<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[36352] trunk: TinyMCE: update to 4.3.3.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/36352">36352</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/36352","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>azaozz</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-01-20 04:17:22 +0000 (Wed, 20 Jan 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>TinyMCE: update to 4.3.3. Update the QUnit tests and revert back to testing the non-minified files in /src.

Fixes <a href="https://core.trac.wordpress.org/ticket/35539">#35539</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesjstinymcepluginscharmappluginjs">trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginscharmappluginminjs">trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginscolorpickerpluginminjs">trunk/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginscompat3xpluginjs">trunk/src/wp-includes/js/tinymce/plugins/compat3x/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsdirectionalitypluginminjs">trunk/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsfullscreenpluginjs">trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsfullscreenpluginminjs">trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginshrpluginminjs">trunk/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsimagepluginjs">trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsimagepluginminjs">trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginslistspluginjs">trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginslistspluginminjs">trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsmediapluginjs">trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsmediapluginminjs">trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginspastepluginjs">trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginspastepluginminjs">trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginstabfocuspluginjs">trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginstabfocuspluginminjs">trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginstextcolorpluginminjs">trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginswpeditimagepluginjs">trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgraycontentinlinemincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgraycontentmincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/content.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmalleot">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.eot</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallsvg">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.svg</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallttf">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallwoff">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.woff</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymceeot">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesvg">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcettf">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcewoff">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayskinie7mincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayskinmincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymcethemesmodernthemejs">trunk/src/wp-includes/js/tinymce/themes/modern/theme.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcethemesmodernthememinjs">trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcetinymcejs">trunk/src/wp-includes/js/tinymce/tinymce.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcetinymceminjs">trunk/src/wp-includes/js/tinymce/tinymce.min.js</a></li>
<li><a href="#trunksrcwpincludesversionphp">trunk/src/wp-includes/version.php</a></li>
<li><a href="#trunktestsquniteditorexternalpluginsnoneditablepluginjs">trunk/tests/qunit/editor/external-plugins/noneditable/plugin.js</a></li>
<li><a href="#trunktestsquniteditorexternalpluginsnoneditablepluginminjs">trunk/tests/qunit/editor/external-plugins/noneditable/plugin.min.js</a></li>
<li><a href="#trunktestsquniteditorindexhtml">trunk/tests/qunit/editor/index.html</a></li>
<li><a href="#trunktestsquniteditorjsmodule_loaderjs">trunk/tests/qunit/editor/js/module_loader.js</a></li>
<li><a href="#trunktestsquniteditorjstinymce_loaderjs">trunk/tests/qunit/editor/js/tinymce_loader.js</a></li>
<li><a href="#trunktestsquniteditorjsutilsjs">trunk/tests/qunit/editor/js/utils.js</a></li>
<li><a href="#trunktestsquniteditorpluginsimagejs">trunk/tests/qunit/editor/plugins/image.js</a></li>
<li><a href="#trunktestsquniteditorpluginslistsjs">trunk/tests/qunit/editor/plugins/lists.js</a></li>
<li><a href="#trunktestsquniteditorpluginsmediajs">trunk/tests/qunit/editor/plugins/media.js</a></li>
<li><a href="#trunktestsquniteditorpluginsnoneditablejs">trunk/tests/qunit/editor/plugins/noneditable.js</a></li>
<li><a href="#trunktestsquniteditorpluginspastejs">trunk/tests/qunit/editor/plugins/paste.js</a></li>
<li><a href="#trunktestsquniteditorpluginssearchreplacejs">trunk/tests/qunit/editor/plugins/searchreplace.js</a></li>
<li><a href="#trunktestsquniteditorpluginstablejs">trunk/tests/qunit/editor/plugins/table.js</a></li>
<li><a href="#trunktestsquniteditortinymceEditorjs">trunk/tests/qunit/editor/tinymce/Editor.js</a></li>
<li><a href="#trunktestsquniteditortinymceEditorCommandsjs">trunk/tests/qunit/editor/tinymce/EditorCommands.js</a></li>
<li><a href="#trunktestsquniteditortinymceEditorManagerjs">trunk/tests/qunit/editor/tinymce/EditorManager.js</a></li>
<li><a href="#trunktestsquniteditortinymceEditorUploadjs">trunk/tests/qunit/editor/tinymce/EditorUpload.js</a></li>
<li><a href="#trunktestsquniteditortinymceEnterKeyjs">trunk/tests/qunit/editor/tinymce/EnterKey.js</a></li>
<li><a href="#trunktestsquniteditortinymceForceBlocksjs">trunk/tests/qunit/editor/tinymce/ForceBlocks.js</a></li>
<li><a href="#trunktestsquniteditortinymceFormatter_applyjs">trunk/tests/qunit/editor/tinymce/Formatter_apply.js</a></li>
<li><a href="#trunktestsquniteditortinymceFormatter_checkjs">trunk/tests/qunit/editor/tinymce/Formatter_check.js</a></li>
<li><a href="#trunktestsquniteditortinymceFormatter_removejs">trunk/tests/qunit/editor/tinymce/Formatter_remove.js</a></li>
<li><a href="#trunktestsquniteditortinymceShortcutsjs">trunk/tests/qunit/editor/tinymce/Shortcuts.js</a></li>
<li><a href="#trunktestsquniteditortinymceUndoManagerjs">trunk/tests/qunit/editor/tinymce/UndoManager.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomSelectionjs">trunk/tests/qunit/editor/tinymce/dom/Selection.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomSerializerjs">trunk/tests/qunit/editor/tinymce/dom/Serializer.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomTridentSelectionjs">trunk/tests/qunit/editor/tinymce/dom/TridentSelection.js</a></li>
<li><a href="#trunktestsquniteditortinymcefileImageScannerjs">trunk/tests/qunit/editor/tinymce/file/ImageScanner.js</a></li>
<li><a href="#trunktestsquniteditortinymcehtmlObsoletejs">trunk/tests/qunit/editor/tinymce/html/Obsolete.js</a></li>
<li><a href="#trunktestsquniteditortinymcehtmlSchemajs">trunk/tests/qunit/editor/tinymce/html/Schema.js</a></li>
<li><a href="#trunktestsquniteditortinymceuiControljs">trunk/tests/qunit/editor/tinymce/ui/Control.js</a></li>
<li><a href="#trunktestsquniteditortinymceutilQuirks_webkitjs">trunk/tests/qunit/editor/tinymce/util/Quirks_webkit.js</a></li>
<li><a href="#trunktestsqunitwpincludesjstinymcepluginswptextpatternpluginjs">trunk/tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmalljson">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.json</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayfontstinymcejson">trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.json</a></li>
<li><a href="#trunktestsquniteditorpluginscharmapjs">trunk/tests/qunit/editor/plugins/charmap.js</a></li>
<li><a href="#trunktestsquniteditortinymceSelectionOverridesjs">trunk/tests/qunit/editor/tinymce/SelectionOverrides.js</a></li>
<li>trunk/tests/qunit/editor/tinymce/caret/</li>
<li><a href="#trunktestsquniteditortinymcecaretCaretBookmarkjs">trunk/tests/qunit/editor/tinymce/caret/CaretBookmark.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretCaretCandidatejs">trunk/tests/qunit/editor/tinymce/caret/CaretCandidate.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretCaretContainerjs">trunk/tests/qunit/editor/tinymce/caret/CaretContainer.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretCaretPositionjs">trunk/tests/qunit/editor/tinymce/caret/CaretPosition.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretCaretUtilsjs">trunk/tests/qunit/editor/tinymce/caret/CaretUtils.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretCaretWalkerjs">trunk/tests/qunit/editor/tinymce/caret/CaretWalker.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretFakeCaretjs">trunk/tests/qunit/editor/tinymce/caret/FakeCaret.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretLineUtilsjs">trunk/tests/qunit/editor/tinymce/caret/LineUtils.js</a></li>
<li><a href="#trunktestsquniteditortinymcecaretLineWalkerjs">trunk/tests/qunit/editor/tinymce/caret/LineWalker.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomDimensionsjs">trunk/tests/qunit/editor/tinymce/dom/Dimensions.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomNodeTypejs">trunk/tests/qunit/editor/tinymce/dom/NodeType.js</a></li>
<li>trunk/tests/qunit/editor/tinymce/geom/</li>
<li><a href="#trunktestsquniteditortinymcegeomClientRectjs">trunk/tests/qunit/editor/tinymce/geom/ClientRect.js</a></li>
<li><a href="#trunktestsquniteditortinymcegeomRectjs">trunk/tests/qunit/editor/tinymce/geom/Rect.js</a></li>
<li>trunk/tests/qunit/editor/tinymce/text/</li>
<li><a href="#trunktestsquniteditortinymcetextExtendingCharjs">trunk/tests/qunit/editor/tinymce/text/ExtendingChar.js</a></li>
<li><a href="#trunktestsquniteditortinymcetextZwspjs">trunk/tests/qunit/editor/tinymce/text/Zwsp.js</a></li>
<li><a href="#trunktestsquniteditortinymceutilDelayjs">trunk/tests/qunit/editor/tinymce/util/Delay.js</a></li>
<li><a href="#trunktestsquniteditortinymceutilFunjs">trunk/tests/qunit/editor/tinymce/util/Fun.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesjstinymcepluginscharmappluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.js        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -11,267 +11,312 @@
</span><span class="cx" style="display: block; padding: 0 10px"> /*global tinymce:true */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> tinymce.PluginManager.add('charmap', function(editor) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var charmap = [
-               ['160', 'no-break space'],
-               ['173', 'soft hyphen'],
-               ['34', 'quotation mark'],
-       // finance
-               ['162', 'cent sign'],
-               ['8364', 'euro sign'],
-               ['163', 'pound sign'],
-               ['165', 'yen sign'],
-       // signs
-               ['169', 'copyright sign'],
-               ['174', 'registered sign'],
-               ['8482', 'trade mark sign'],
-               ['8240', 'per mille sign'],
-               ['181', 'micro sign'],
-               ['183', 'middle dot'],
-               ['8226', 'bullet'],
-               ['8230', 'three dot leader'],
-               ['8242', 'minutes / feet'],
-               ['8243', 'seconds / inches'],
-               ['167', 'section sign'],
-               ['182', 'paragraph sign'],
-               ['223', 'sharp s / ess-zed'],
-       // quotations
-               ['8249', 'single left-pointing angle quotation mark'],
-               ['8250', 'single right-pointing angle quotation mark'],
-               ['171', 'left pointing guillemet'],
-               ['187', 'right pointing guillemet'],
-               ['8216', 'left single quotation mark'],
-               ['8217', 'right single quotation mark'],
-               ['8220', 'left double quotation mark'],
-               ['8221', 'right double quotation mark'],
-               ['8218', 'single low-9 quotation mark'],
-               ['8222', 'double low-9 quotation mark'],
-               ['60', 'less-than sign'],
-               ['62', 'greater-than sign'],
-               ['8804', 'less-than or equal to'],
-               ['8805', 'greater-than or equal to'],
-               ['8211', 'en dash'],
-               ['8212', 'em dash'],
-               ['175', 'macron'],
-               ['8254', 'overline'],
-               ['164', 'currency sign'],
-               ['166', 'broken bar'],
-               ['168', 'diaeresis'],
-               ['161', 'inverted exclamation mark'],
-               ['191', 'turned question mark'],
-               ['710', 'circumflex accent'],
-               ['732', 'small tilde'],
-               ['176', 'degree sign'],
-               ['8722', 'minus sign'],
-               ['177', 'plus-minus sign'],
-               ['247', 'division sign'],
-               ['8260', 'fraction slash'],
-               ['215', 'multiplication sign'],
-               ['185', 'superscript one'],
-               ['178', 'superscript two'],
-               ['179', 'superscript three'],
-               ['188', 'fraction one quarter'],
-               ['189', 'fraction one half'],
-               ['190', 'fraction three quarters'],
-       // math / logical
-               ['402', 'function / florin'],
-               ['8747', 'integral'],
-               ['8721', 'n-ary sumation'],
-               ['8734', 'infinity'],
-               ['8730', 'square root'],
-               ['8764', 'similar to'],
-               ['8773', 'approximately equal to'],
-               ['8776', 'almost equal to'],
-               ['8800', 'not equal to'],
-               ['8801', 'identical to'],
-               ['8712', 'element of'],
-               ['8713', 'not an element of'],
-               ['8715', 'contains as member'],
-               ['8719', 'n-ary product'],
-               ['8743', 'logical and'],
-               ['8744', 'logical or'],
-               ['172', 'not sign'],
-               ['8745', 'intersection'],
-               ['8746', 'union'],
-               ['8706', 'partial differential'],
-               ['8704', 'for all'],
-               ['8707', 'there exists'],
-               ['8709', 'diameter'],
-               ['8711', 'backward difference'],
-               ['8727', 'asterisk operator'],
-               ['8733', 'proportional to'],
-               ['8736', 'angle'],
-       // undefined
-               ['180', 'acute accent'],
-               ['184', 'cedilla'],
-               ['170', 'feminine ordinal indicator'],
-               ['186', 'masculine ordinal indicator'],
-               ['8224', 'dagger'],
-               ['8225', 'double dagger'],
-       // alphabetical special chars
-               ['192', 'A - grave'],
-               ['193', 'A - acute'],
-               ['194', 'A - circumflex'],
-               ['195', 'A - tilde'],
-               ['196', 'A - diaeresis'],
-               ['197', 'A - ring above'],
-               ['198', 'ligature AE'],
-               ['199', 'C - cedilla'],
-               ['200', 'E - grave'],
-               ['201', 'E - acute'],
-               ['202', 'E - circumflex'],
-               ['203', 'E - diaeresis'],
-               ['204', 'I - grave'],
-               ['205', 'I - acute'],
-               ['206', 'I - circumflex'],
-               ['207', 'I - diaeresis'],
-               ['208', 'ETH'],
-               ['209', 'N - tilde'],
-               ['210', 'O - grave'],
-               ['211', 'O - acute'],
-               ['212', 'O - circumflex'],
-               ['213', 'O - tilde'],
-               ['214', 'O - diaeresis'],
-               ['216', 'O - slash'],
-               ['338', 'ligature OE'],
-               ['352', 'S - caron'],
-               ['217', 'U - grave'],
-               ['218', 'U - acute'],
-               ['219', 'U - circumflex'],
-               ['220', 'U - diaeresis'],
-               ['221', 'Y - acute'],
-               ['376', 'Y - diaeresis'],
-               ['222', 'THORN'],
-               ['224', 'a - grave'],
-               ['225', 'a - acute'],
-               ['226', 'a - circumflex'],
-               ['227', 'a - tilde'],
-               ['228', 'a - diaeresis'],
-               ['229', 'a - ring above'],
-               ['230', 'ligature ae'],
-               ['231', 'c - cedilla'],
-               ['232', 'e - grave'],
-               ['233', 'e - acute'],
-               ['234', 'e - circumflex'],
-               ['235', 'e - diaeresis'],
-               ['236', 'i - grave'],
-               ['237', 'i - acute'],
-               ['238', 'i - circumflex'],
-               ['239', 'i - diaeresis'],
-               ['240', 'eth'],
-               ['241', 'n - tilde'],
-               ['242', 'o - grave'],
-               ['243', 'o - acute'],
-               ['244', 'o - circumflex'],
-               ['245', 'o - tilde'],
-               ['246', 'o - diaeresis'],
-               ['248', 'o slash'],
-               ['339', 'ligature oe'],
-               ['353', 's - caron'],
-               ['249', 'u - grave'],
-               ['250', 'u - acute'],
-               ['251', 'u - circumflex'],
-               ['252', 'u - diaeresis'],
-               ['253', 'y - acute'],
-               ['254', 'thorn'],
-               ['255', 'y - diaeresis'],
-               ['913', 'Alpha'],
-               ['914', 'Beta'],
-               ['915', 'Gamma'],
-               ['916', 'Delta'],
-               ['917', 'Epsilon'],
-               ['918', 'Zeta'],
-               ['919', 'Eta'],
-               ['920', 'Theta'],
-               ['921', 'Iota'],
-               ['922', 'Kappa'],
-               ['923', 'Lambda'],
-               ['924', 'Mu'],
-               ['925', 'Nu'],
-               ['926', 'Xi'],
-               ['927', 'Omicron'],
-               ['928', 'Pi'],
-               ['929', 'Rho'],
-               ['931', 'Sigma'],
-               ['932', 'Tau'],
-               ['933', 'Upsilon'],
-               ['934', 'Phi'],
-               ['935', 'Chi'],
-               ['936', 'Psi'],
-               ['937', 'Omega'],
-               ['945', 'alpha'],
-               ['946', 'beta'],
-               ['947', 'gamma'],
-               ['948', 'delta'],
-               ['949', 'epsilon'],
-               ['950', 'zeta'],
-               ['951', 'eta'],
-               ['952', 'theta'],
-               ['953', 'iota'],
-               ['954', 'kappa'],
-               ['955', 'lambda'],
-               ['956', 'mu'],
-               ['957', 'nu'],
-               ['958', 'xi'],
-               ['959', 'omicron'],
-               ['960', 'pi'],
-               ['961', 'rho'],
-               ['962', 'final sigma'],
-               ['963', 'sigma'],
-               ['964', 'tau'],
-               ['965', 'upsilon'],
-               ['966', 'phi'],
-               ['967', 'chi'],
-               ['968', 'psi'],
-               ['969', 'omega'],
-       // symbols
-               ['8501', 'alef symbol'],
-               ['982', 'pi symbol'],
-               ['8476', 'real part symbol'],
-               ['978', 'upsilon - hook symbol'],
-               ['8472', 'Weierstrass p'],
-               ['8465', 'imaginary part'],
-       // arrows
-               ['8592', 'leftwards arrow'],
-               ['8593', 'upwards arrow'],
-               ['8594', 'rightwards arrow'],
-               ['8595', 'downwards arrow'],
-               ['8596', 'left right arrow'],
-               ['8629', 'carriage return'],
-               ['8656', 'leftwards double arrow'],
-               ['8657', 'upwards double arrow'],
-               ['8658', 'rightwards double arrow'],
-               ['8659', 'downwards double arrow'],
-               ['8660', 'left right double arrow'],
-               ['8756', 'therefore'],
-               ['8834', 'subset of'],
-               ['8835', 'superset of'],
-               ['8836', 'not a subset of'],
-               ['8838', 'subset of or equal to'],
-               ['8839', 'superset of or equal to'],
-               ['8853', 'circled plus'],
-               ['8855', 'circled times'],
-               ['8869', 'perpendicular'],
-               ['8901', 'dot operator'],
-               ['8968', 'left ceiling'],
-               ['8969', 'right ceiling'],
-               ['8970', 'left floor'],
-               ['8971', 'right floor'],
-               ['9001', 'left-pointing angle bracket'],
-               ['9002', 'right-pointing angle bracket'],
-               ['9674', 'lozenge'],
-               ['9824', 'black spade suit'],
-               ['9827', 'black club suit'],
-               ['9829', 'black heart suit'],
-               ['9830', 'black diamond suit'],
-               ['8194', 'en space'],
-               ['8195', 'em space'],
-               ['8201', 'thin space'],
-               ['8204', 'zero width non-joiner'],
-               ['8205', 'zero width joiner'],
-               ['8206', 'left-to-right mark'],
-               ['8207', 'right-to-left mark']
-       ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var isArray = tinymce.util.Tools.isArray;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function getDefaultCharMap() {
+               return [
+                       ['160', 'no-break space'],
+                       ['173', 'soft hyphen'],
+                       ['34', 'quotation mark'],
+               // finance
+                       ['162', 'cent sign'],
+                       ['8364', 'euro sign'],
+                       ['163', 'pound sign'],
+                       ['165', 'yen sign'],
+               // signs
+                       ['169', 'copyright sign'],
+                       ['174', 'registered sign'],
+                       ['8482', 'trade mark sign'],
+                       ['8240', 'per mille sign'],
+                       ['181', 'micro sign'],
+                       ['183', 'middle dot'],
+                       ['8226', 'bullet'],
+                       ['8230', 'three dot leader'],
+                       ['8242', 'minutes / feet'],
+                       ['8243', 'seconds / inches'],
+                       ['167', 'section sign'],
+                       ['182', 'paragraph sign'],
+                       ['223', 'sharp s / ess-zed'],
+               // quotations
+                       ['8249', 'single left-pointing angle quotation mark'],
+                       ['8250', 'single right-pointing angle quotation mark'],
+                       ['171', 'left pointing guillemet'],
+                       ['187', 'right pointing guillemet'],
+                       ['8216', 'left single quotation mark'],
+                       ['8217', 'right single quotation mark'],
+                       ['8220', 'left double quotation mark'],
+                       ['8221', 'right double quotation mark'],
+                       ['8218', 'single low-9 quotation mark'],
+                       ['8222', 'double low-9 quotation mark'],
+                       ['60', 'less-than sign'],
+                       ['62', 'greater-than sign'],
+                       ['8804', 'less-than or equal to'],
+                       ['8805', 'greater-than or equal to'],
+                       ['8211', 'en dash'],
+                       ['8212', 'em dash'],
+                       ['175', 'macron'],
+                       ['8254', 'overline'],
+                       ['164', 'currency sign'],
+                       ['166', 'broken bar'],
+                       ['168', 'diaeresis'],
+                       ['161', 'inverted exclamation mark'],
+                       ['191', 'turned question mark'],
+                       ['710', 'circumflex accent'],
+                       ['732', 'small tilde'],
+                       ['176', 'degree sign'],
+                       ['8722', 'minus sign'],
+                       ['177', 'plus-minus sign'],
+                       ['247', 'division sign'],
+                       ['8260', 'fraction slash'],
+                       ['215', 'multiplication sign'],
+                       ['185', 'superscript one'],
+                       ['178', 'superscript two'],
+                       ['179', 'superscript three'],
+                       ['188', 'fraction one quarter'],
+                       ['189', 'fraction one half'],
+                       ['190', 'fraction three quarters'],
+               // math / logical
+                       ['402', 'function / florin'],
+                       ['8747', 'integral'],
+                       ['8721', 'n-ary sumation'],
+                       ['8734', 'infinity'],
+                       ['8730', 'square root'],
+                       ['8764', 'similar to'],
+                       ['8773', 'approximately equal to'],
+                       ['8776', 'almost equal to'],
+                       ['8800', 'not equal to'],
+                       ['8801', 'identical to'],
+                       ['8712', 'element of'],
+                       ['8713', 'not an element of'],
+                       ['8715', 'contains as member'],
+                       ['8719', 'n-ary product'],
+                       ['8743', 'logical and'],
+                       ['8744', 'logical or'],
+                       ['172', 'not sign'],
+                       ['8745', 'intersection'],
+                       ['8746', 'union'],
+                       ['8706', 'partial differential'],
+                       ['8704', 'for all'],
+                       ['8707', 'there exists'],
+                       ['8709', 'diameter'],
+                       ['8711', 'backward difference'],
+                       ['8727', 'asterisk operator'],
+                       ['8733', 'proportional to'],
+                       ['8736', 'angle'],
+               // undefined
+                       ['180', 'acute accent'],
+                       ['184', 'cedilla'],
+                       ['170', 'feminine ordinal indicator'],
+                       ['186', 'masculine ordinal indicator'],
+                       ['8224', 'dagger'],
+                       ['8225', 'double dagger'],
+               // alphabetical special chars
+                       ['192', 'A - grave'],
+                       ['193', 'A - acute'],
+                       ['194', 'A - circumflex'],
+                       ['195', 'A - tilde'],
+                       ['196', 'A - diaeresis'],
+                       ['197', 'A - ring above'],
+                       ['198', 'ligature AE'],
+                       ['199', 'C - cedilla'],
+                       ['200', 'E - grave'],
+                       ['201', 'E - acute'],
+                       ['202', 'E - circumflex'],
+                       ['203', 'E - diaeresis'],
+                       ['204', 'I - grave'],
+                       ['205', 'I - acute'],
+                       ['206', 'I - circumflex'],
+                       ['207', 'I - diaeresis'],
+                       ['208', 'ETH'],
+                       ['209', 'N - tilde'],
+                       ['210', 'O - grave'],
+                       ['211', 'O - acute'],
+                       ['212', 'O - circumflex'],
+                       ['213', 'O - tilde'],
+                       ['214', 'O - diaeresis'],
+                       ['216', 'O - slash'],
+                       ['338', 'ligature OE'],
+                       ['352', 'S - caron'],
+                       ['217', 'U - grave'],
+                       ['218', 'U - acute'],
+                       ['219', 'U - circumflex'],
+                       ['220', 'U - diaeresis'],
+                       ['221', 'Y - acute'],
+                       ['376', 'Y - diaeresis'],
+                       ['222', 'THORN'],
+                       ['224', 'a - grave'],
+                       ['225', 'a - acute'],
+                       ['226', 'a - circumflex'],
+                       ['227', 'a - tilde'],
+                       ['228', 'a - diaeresis'],
+                       ['229', 'a - ring above'],
+                       ['230', 'ligature ae'],
+                       ['231', 'c - cedilla'],
+                       ['232', 'e - grave'],
+                       ['233', 'e - acute'],
+                       ['234', 'e - circumflex'],
+                       ['235', 'e - diaeresis'],
+                       ['236', 'i - grave'],
+                       ['237', 'i - acute'],
+                       ['238', 'i - circumflex'],
+                       ['239', 'i - diaeresis'],
+                       ['240', 'eth'],
+                       ['241', 'n - tilde'],
+                       ['242', 'o - grave'],
+                       ['243', 'o - acute'],
+                       ['244', 'o - circumflex'],
+                       ['245', 'o - tilde'],
+                       ['246', 'o - diaeresis'],
+                       ['248', 'o slash'],
+                       ['339', 'ligature oe'],
+                       ['353', 's - caron'],
+                       ['249', 'u - grave'],
+                       ['250', 'u - acute'],
+                       ['251', 'u - circumflex'],
+                       ['252', 'u - diaeresis'],
+                       ['253', 'y - acute'],
+                       ['254', 'thorn'],
+                       ['255', 'y - diaeresis'],
+                       ['913', 'Alpha'],
+                       ['914', 'Beta'],
+                       ['915', 'Gamma'],
+                       ['916', 'Delta'],
+                       ['917', 'Epsilon'],
+                       ['918', 'Zeta'],
+                       ['919', 'Eta'],
+                       ['920', 'Theta'],
+                       ['921', 'Iota'],
+                       ['922', 'Kappa'],
+                       ['923', 'Lambda'],
+                       ['924', 'Mu'],
+                       ['925', 'Nu'],
+                       ['926', 'Xi'],
+                       ['927', 'Omicron'],
+                       ['928', 'Pi'],
+                       ['929', 'Rho'],
+                       ['931', 'Sigma'],
+                       ['932', 'Tau'],
+                       ['933', 'Upsilon'],
+                       ['934', 'Phi'],
+                       ['935', 'Chi'],
+                       ['936', 'Psi'],
+                       ['937', 'Omega'],
+                       ['945', 'alpha'],
+                       ['946', 'beta'],
+                       ['947', 'gamma'],
+                       ['948', 'delta'],
+                       ['949', 'epsilon'],
+                       ['950', 'zeta'],
+                       ['951', 'eta'],
+                       ['952', 'theta'],
+                       ['953', 'iota'],
+                       ['954', 'kappa'],
+                       ['955', 'lambda'],
+                       ['956', 'mu'],
+                       ['957', 'nu'],
+                       ['958', 'xi'],
+                       ['959', 'omicron'],
+                       ['960', 'pi'],
+                       ['961', 'rho'],
+                       ['962', 'final sigma'],
+                       ['963', 'sigma'],
+                       ['964', 'tau'],
+                       ['965', 'upsilon'],
+                       ['966', 'phi'],
+                       ['967', 'chi'],
+                       ['968', 'psi'],
+                       ['969', 'omega'],
+               // symbols
+                       ['8501', 'alef symbol'],
+                       ['982', 'pi symbol'],
+                       ['8476', 'real part symbol'],
+                       ['978', 'upsilon - hook symbol'],
+                       ['8472', 'Weierstrass p'],
+                       ['8465', 'imaginary part'],
+               // arrows
+                       ['8592', 'leftwards arrow'],
+                       ['8593', 'upwards arrow'],
+                       ['8594', 'rightwards arrow'],
+                       ['8595', 'downwards arrow'],
+                       ['8596', 'left right arrow'],
+                       ['8629', 'carriage return'],
+                       ['8656', 'leftwards double arrow'],
+                       ['8657', 'upwards double arrow'],
+                       ['8658', 'rightwards double arrow'],
+                       ['8659', 'downwards double arrow'],
+                       ['8660', 'left right double arrow'],
+                       ['8756', 'therefore'],
+                       ['8834', 'subset of'],
+                       ['8835', 'superset of'],
+                       ['8836', 'not a subset of'],
+                       ['8838', 'subset of or equal to'],
+                       ['8839', 'superset of or equal to'],
+                       ['8853', 'circled plus'],
+                       ['8855', 'circled times'],
+                       ['8869', 'perpendicular'],
+                       ['8901', 'dot operator'],
+                       ['8968', 'left ceiling'],
+                       ['8969', 'right ceiling'],
+                       ['8970', 'left floor'],
+                       ['8971', 'right floor'],
+                       ['9001', 'left-pointing angle bracket'],
+                       ['9002', 'right-pointing angle bracket'],
+                       ['9674', 'lozenge'],
+                       ['9824', 'black spade suit'],
+                       ['9827', 'black club suit'],
+                       ['9829', 'black heart suit'],
+                       ['9830', 'black diamond suit'],
+                       ['8194', 'en space'],
+                       ['8195', 'em space'],
+                       ['8201', 'thin space'],
+                       ['8204', 'zero width non-joiner'],
+                       ['8205', 'zero width joiner'],
+                       ['8206', 'left-to-right mark'],
+                       ['8207', 'right-to-left mark']
+               ];
+       }
+
+       function charmapFilter(charmap) {
+               return tinymce.util.Tools.grep(charmap, function(item) {
+                       return isArray(item) && item.length == 2;
+               });
+       }
+
+       function getCharsFromSetting(settingValue) {
+               if (isArray(settingValue)) {
+                       return [].concat(charmapFilter(settingValue));
+               }
+
+               if (typeof settingValue == "function") {
+                       return settingValue();
+               }
+
+               return [];
+       }
+
+       function extendCharMap(charmap) {
+               var settings = editor.settings;
+
+               if (settings.charmap) {
+                       charmap = getCharsFromSetting(settings.charmap);
+               }
+
+               if (settings.charmap_append) {
+                       return [].concat(charmap).concat(getCharsFromSetting(settings.charmap_append));
+               }
+
+               return charmap;
+       }
+
+       function getCharMap() {
+               return extendCharMap(getDefaultCharMap());
+       }
+
+       function insertChar(chr) {
+               editor.fire('insertCustomChar', {chr: chr}).chr;
+               editor.execCommand('mceInsertContent', false, chr);
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function showDialog() {
</span><span class="cx" style="display: block; padding: 0 10px">                var gridHtml, x, y, win;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -287,7 +332,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var width = 25;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         var charmap = getCharMap();
+               var width = Math.min(charmap.length, 25);
</ins><span class="cx" style="display: block; padding: 0 10px">                 var height = Math.ceil(charmap.length / width);
</span><span class="cx" style="display: block; padding: 0 10px">                for (y = 0; y < height; y++) {
</span><span class="cx" style="display: block; padding: 0 10px">                        gridHtml += '<tr>';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -314,9 +360,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        html: gridHtml,
</span><span class="cx" style="display: block; padding: 0 10px">                        onclick: function(e) {
</span><span class="cx" style="display: block; padding: 0 10px">                                var target = e.target;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (/^(TD|DIV)$/.test(target.nodeName)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (getParentTd(target).firstChild) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                editor.execCommand('mceInsertContent', false, tinymce.trim(target.innerText || target.textContent));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         insertChar(tinymce.trim(target.innerText || target.textContent));
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (!e.ctrlKey) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        win.close();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -395,4 +442,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                cmd: 'mceShowCharmap',
</span><span class="cx" style="display: block; padding: 0 10px">                context: 'insert'
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       return {
+               getCharMap: getCharMap,
+               insertChar: insertChar
+       };
+});
</ins></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginscharmappluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js    2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/charmap/plugin.min.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("charmap",function(a){function b(){function b(a){for(;a;){if("TD"==a.nodeName)return a;a=a.parentNode}}var d,e,f,g;d='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';var h=25,i=Math.ceil(c.length/h);for(f=0;i>f;f++){for(d+="<tr>",e=0;h>e;e++){var j=f*h+e;if(j<c.length){var k=c[j];d+='<td title="'+k[1]+'"><div tabindex="-1" title="'+k[1]+'" role="button">'+(k?String.fromCharCode(parseInt(k[0],10)):"&nbsp;")+"</div></td>"}else d+="<td />"}d+="</tr>"}d+="</tbody></table>";var l={type:"container",html:d,onclick:function(c){var d=c.target;/^(TD|DIV)$/.test(d.nodeName)&&b(d).firstChild&&(a.exec
 Command("mceInsertContent",!1,tinymce.trim(d.innerText||d.textContent)),c.ctrlKey||g.close())},onmouseover:function(a){var c=b(a.target);c&&c.firstChild?(g.find("#preview").text(c.firstChild.firstChild.data),g.find("#previewTitle").text(c.title)):(g.find("#preview").text(" "),g.find("#previewTitle").text(" "))}};g=a.windowManager.open({title:"Special character",spacing:10,padding:10,items:[l,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"label",name:"previewTitle",text:" ",style:"text-align: center",border:1,minWidth:140,minHeight:80}]}],buttons:[{text:"Close",onclick:function(){g.clo
 se()}}]})}var c=[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single ri
 ght-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161&quot
 ;,"inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to&
 quot;],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["1
 84","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210",&q
 uot;O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233",&
 quot;e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Al
 pha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon&quot
 ;],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592&quo
 t;,"leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],[&
 quot;8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]];a.addCommand("mceShowCharmap",b),a.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"
 mceShowCharmap"}),a.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("charmap",function(e){function t(){return[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign&quo
 t;],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254",&quo
 t;overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],[&quot
 ;8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","as
 terisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I
  - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ri
 ng above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diae
 resis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945",&qu
 ot;alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],
 ["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853",&quo
 t;circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark
 "]]}function n(e){return tinymce.util.Tools.grep(e,function(e){return l(e)&&2==e.length})}function r(e){return l(e)?[].concat(n(e)):"function"==typeof e?e():[]}function i(t){var n=e.settings;return n.charmap&&(t=r(n.charmap)),n.charmap_append?[].concat(t).concat(r(n.charmap_append)):t}function o(){return i(t())}function a(t){e.fire("insertCustomChar",{chr:t}).chr,e.execCommand("mceInsertContent",!1,t)}function s(){function t(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var n,r,i,s;n='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';var l=o(),c=Math.min(l.length,25),u=Math.ceil(l.length/c);for(i=0;u>i;i++){for(n+="<tr>",r=0;c>r;r++){var d=i*c+r;if(d<l.length){var f=l[d];n+='<td title="'+f[1]+'"><div tabindex="-1" title="'+f[1]+'" role="button">'+(f?String.fromCharCode(pars
 eInt(f[0],10)):"&nbsp;")+"</div></td>"}else n+="<td />"}n+="</tr>"}n+="</tbody></table>";var h={type:"container",html:n,onclick:function(e){var n=e.target;/^(TD|DIV)$/.test(n.nodeName)&&t(n).firstChild&&(a(tinymce.trim(n.innerText||n.textContent)),e.ctrlKey||s.close())},onmouseover:function(e){var n=t(e.target);n&&n.firstChild?(s.find("#preview").text(n.firstChild.firstChild.data),s.find("#previewTitle").text(n.title)):(s.find("#preview").text(" "),s.find("#previewTitle").text(" "))}};s=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[h,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"fo
 nt-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"label",name:"previewTitle",text:" ",style:"text-align: center",border:1,minWidth:140,minHeight:80}]}],buttons:[{text:"Close",onclick:function(){s.close()}}]})}var l=tinymce.util.Tools.isArray;return e.addCommand("mceShowCharmap",s),e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"}),{getCharMap:o,insertChar:a}});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginscolorpickerpluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/colorpicker/plugin.min.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("colorpicker",function(a){function b(b,c){function d(a){var b=new tinymce.util.Color(a),c=b.toRgb();f.fromJSON({r:c.r,g:c.g,b:c.b,hex:b.toHex().substr(1)}),e(b.toHex())}function e(a){f.find("#preview")[0].getEl().style.background=a}var f=a.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:c,onchange:function(){var a=this.rgb();f&&(f.find("#r").value(a.r),f.find("#g").value(a.g),f.find("#b").value(a.b),f.find("#hex").value(this.value().substr(1)),e(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var a,b,c=f.find(&quot
 ;colorpicker")[0];return a=this.name(),b=this.value(),"hex"==a?(b="#"+b,d(b),void c.value(b)):(b={r:f.find("#r").value(),g:f.find("#g").value(),b:f.find("#b").value()},c.value(b),void d(b))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){b("#"+this.toJSON().hex)}});d(c)}a.settings.color_picker_callback||(a.settings.color_picker_callback=b)});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("colorpicker",function(e){function t(t,n){function r(e){var t=new tinymce.util.Color(e),n=t.toRgb();o.fromJSON({r:n.r,g:n.g,b:n.b,hex:t.toHex().substr(1)}),i(t.toHex())}function i(e){o.find("#preview")[0].getEl().style.background=e}var o=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:n,onchange:function(){var e=this.rgb();o&&(o.find("#r").value(e.r),o.find("#g").value(e.g),o.find("#b").value(e.b),o.find("#hex").value(this.value().substr(1)),i(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,t,n=o.find(&quot
 ;colorpicker")[0];return e=this.name(),t=this.value(),"hex"==e?(t="#"+t,r(t),void n.value(t)):(t={r:o.find("#r").value(),g:o.find("#g").value(),b:o.find("#b").value()},n.value(t),void r(t))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){t("#"+this.toJSON().hex)}});r(n)}e.settings.color_picker_callback||(e.settings.color_picker_callback=t)});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginscompat3xpluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/compat3x/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/compat3x/plugin.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/compat3x/plugin.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -230,7 +230,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                settings.onPostRender = patchedPostRender;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( settings.title ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (settings.title) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // WP
</span><span class="cx" style="display: block; padding: 0 10px">                                string = (editor.settings.language || "en") + "." + settings.title;
</span><span class="cx" style="display: block; padding: 0 10px">                                translated = tinymce.i18n.translate(string);
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsdirectionalitypluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/directionality/plugin.min.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("directionality",function(a){function b(b){var c,d=a.dom,e=a.selection.getSelectedBlocks();e.length&&(c=d.getAttrib(e[0],"dir"),tinymce.each(e,function(a){d.getParent(a.parentNode,"*[dir='"+b+"']",d.getRoot())||(c!=b?d.setAttrib(a,"dir",b):d.setAttrib(a,"dir",null))}),a.nodeChanged())}function c(a){var b=[];return tinymce.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(c){b.push(c+"[dir="+a+"]")}),b.join(",")}a.addCommand("mceDirectionLTR",function(){b("ltr")}),a.addCommand("mceDirectionRTL",function(){b("rtl")}),a.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:c("ltr")}),a.addButton("rtl",{title:"Right to left",cmd:&
 quot;mceDirectionRTL",stateSelector:c("rtl")})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("directionality",function(e){function t(t){var n,r=e.dom,i=e.selection.getSelectedBlocks();i.length&&(n=r.getAttrib(i[0],"dir"),tinymce.each(i,function(e){r.getParent(e.parentNode,"*[dir='"+t+"']",r.getRoot())||(n!=t?r.setAttrib(e,"dir",t):r.setAttrib(e,"dir",null))}),e.nodeChanged())}function n(e){var t=[];return tinymce.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(n){t.push(n+"[dir="+e+"]")}),t.join(",")}e.addCommand("mceDirectionLTR",function(){t("ltr")}),e.addCommand("mceDirectionRTL",function(){t("rtl")}),e.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:n("ltr")}),e.addButton("rtl",{title:"Right to left",cmd:&
 quot;mceDirectionRTL",stateSelector:n("rtl")})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsfullscreenpluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.js     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,7 +12,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> tinymce.PluginManager.add('fullscreen', function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">        var fullscreenState = false, DOM = tinymce.DOM, iframeWidth, iframeHeight, resizeHandler;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var containerWidth, containerHeight;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var containerWidth, containerHeight, scrollPos;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if (editor.settings.inline) {
</span><span class="cx" style="display: block; padding: 0 10px">                return;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -37,6 +37,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return {w: w, h: h};
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function getScrollPos() {
+               var vp = tinymce.DOM.getViewPort();
+
+               return {
+                       x: vp.x,
+                       y: vp.y
+               };
+       }
+
+       function setScrollPos(pos) {
+               scrollTo(pos.x, pos.y);
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function toggleFullscreen() {
</span><span class="cx" style="display: block; padding: 0 10px">                var body = document.body, documentElement = document.documentElement, editorContainerStyle;
</span><span class="cx" style="display: block; padding: 0 10px">                var editorContainer, iframe, iframeStyle;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,6 +66,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                iframeStyle = iframe.style;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if (fullscreenState) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        scrollPos = getScrollPos();
</ins><span class="cx" style="display: block; padding: 0 10px">                         iframeWidth = iframeStyle.width;
</span><span class="cx" style="display: block; padding: 0 10px">                        iframeHeight = iframeStyle.height;
</span><span class="cx" style="display: block; padding: 0 10px">                        iframeStyle.width = iframeStyle.height = '100%';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -83,6 +97,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        DOM.removeClass(documentElement, 'mce-fullscreen');
</span><span class="cx" style="display: block; padding: 0 10px">                        DOM.removeClass(editorContainer, 'mce-fullscreen');
</span><span class="cx" style="display: block; padding: 0 10px">                        DOM.unbind(window, 'resize', resizeHandler);
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        setScrollPos(scrollPos);
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.fire('FullscreenStateChanged', {state: fullscreenState});
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -133,4 +148,4 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        return fullscreenState;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+});
</ins></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsfullscreenpluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("fullscreen",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function c(){function c(){j.setStyle(m,"height",b().h-(l.clientHeight-m.clientHeight))}var k,l,m,n,o=document.body,p=document.documentElement;i=!i,l=a.getContainer(),k=l.style,m=a.getContentAreaContainer().firstChild,n=m.style,i?(d=n.width,e=n.height,n.width=n.height="100%",g=k.width,h=k.height,k.width=k.height="",j.addClass(o,"mce-fullscreen"),j.addClass(p,"mce-fullscreen"),j.addClass(l,"mce-fullscreen"),j.bind(window,"resize",c),c(),f=c):(n.width=d,n.height=e,g&&(k.width=g),h&&(k.height=h),j.removeClass(o,"mce-fullscreen"),j.removeC
 lass(p,"mce-fullscreen"),j.removeClass(l,"mce-fullscreen"),j.unbind(window,"resize",f)),a.fire("FullscreenStateChanged",{state:i})}var d,e,f,g,h,i=!1,j=tinymce.DOM;return a.settings.inline?void 0:(a.on("init",function(){a.addShortcut("Meta+Alt+F","",c)}),a.on("remove",function(){f&&j.unbind(window,"resize",f)}),a.addCommand("mceFullScreen",c),a.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Meta+Alt+F",selectable:!0,onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})},context:"view"}),a.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Meta+Alt+F",onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})}}),{isFullscreen:function(){return i}})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,r=document,i=r.body;return i.offsetWidth&&(e=i.offsetWidth,t=i.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){var e=tinymce.DOM.getViewPort();return{x:e.x,y:e.y}}function r(e){scrollTo(e.x,e.y)}function i(){function i(){f.setStyle(p,"height",t().h-(m.clientHeight-p.clientHeight))}var h,m,p,g,v=document.body,y=document.documentElement;d=!d,m=e.getContainer(),h=m.style,p=e.getContentAreaContainer().firstChild,g=p.style,d?(u=n(),o=g.width,a=g.height,g.width=g.height="100%",l=h.width,c=h.height,h.width=h.height="",f.addClass(v,"mce-fullscreen"),f.addClass(y,"mce-fullscreen"),f.addClass(m,"mce-fullscreen"),f.bind(window,"resize",i),i(),s=i):(g.width=o,g.height
 =a,l&&(h.width=l),c&&(h.height=c),f.removeClass(v,"mce-fullscreen"),f.removeClass(y,"mce-fullscreen"),f.removeClass(m,"mce-fullscreen"),f.unbind(window,"resize",s),r(u)),e.fire("FullscreenStateChanged",{state:d})}var o,a,s,l,c,u,d=!1,f=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Meta+Alt+F","",i)}),e.on("remove",function(){s&&f.unbind(window,"resize",s)}),e.addCommand("mceFullScreen",i),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Meta+Alt+F",selectable:!0,onClick:i,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Meta+Alt+F",onClick:i,onPostRender:function(){var t=this;e.on("FullscreenStateChanged
 ",function(e){t.active(e.state)})}}),{isFullscreen:function(){return d}})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginshrpluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/hr/plugin.min.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1,"<hr />")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"<hr />")}),e.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsimagepluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -83,7 +83,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        function showDialog(imageList) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var win, data = {}, dom = editor.dom, imgElm = editor.selection.getNode();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         var win, data = {}, dom = editor.dom, imgElm, figureElm;
</ins><span class="cx" style="display: block; padding: 0 10px">                 var width, height, imageListCtrl, classListCtrl, imageDimensions = editor.settings.image_dimensions !== false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function recalcSize() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -120,6 +120,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function onSubmitForm() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        var figureElm, oldImg;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         function waitLoad(imgElm) {
</span><span class="cx" style="display: block; padding: 0 10px">                                function selectImage() {
</span><span class="cx" style="display: block; padding: 0 10px">                                        imgElm.onload = imgElm.onerror = null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -150,7 +152,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        recalcSize();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        data = tinymce.extend(data, win.toJSON());
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var caption = data.caption; // WP
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var wpcaption = data.wpcaption; // WP
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!data.alt) {
</span><span class="cx" style="display: block; padding: 0 10px">                                data.alt = '';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -181,12 +183,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                width: data.width,
</span><span class="cx" style="display: block; padding: 0 10px">                                height: data.height,
</span><span class="cx" style="display: block; padding: 0 10px">                                style: data.style,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                caption: data.caption,
</ins><span class="cx" style="display: block; padding: 0 10px">                                 "class": data["class"]
</span><span class="cx" style="display: block; padding: 0 10px">                        };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.undoManager.transact(function() {
</span><span class="cx" style="display: block; padding: 0 10px">                                // WP
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                var eventData = { node: imgElm, data: data, caption: caption };
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         var eventData = { node: imgElm, data: data, wpcaption: wpcaption };
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.fire( 'wpImageFormSubmit', { imgData: eventData } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -218,9 +221,44 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        dom.setAttrib(imgElm, 'id', null);
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        dom.setAttribs(imgElm, data);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        editor.editorUpload.uploadImagesAuto();
</del><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                editor.editorUpload.uploadImagesAuto();
+
+                               if (data.caption === false) {
+                                       if (dom.is(imgElm.parentNode, 'figure.image')) {
+                                               figureElm = imgElm.parentNode;
+                                               dom.insertAfter(imgElm, figureElm);
+                                               dom.remove(figureElm);
+                                       }
+                               }
+
+                               function isTextBlock(node) {
+                                       return editor.schema.getTextBlockElements()[node.nodeName];
+                               }
+
+                               if (data.caption === true) {
+                                       if (!dom.is(imgElm.parentNode, 'figure.image')) {
+                                               oldImg = imgElm;
+                                               imgElm = imgElm.cloneNode(true);
+                                               figureElm = dom.create('figure', {'class': 'image'});
+                                               figureElm.appendChild(imgElm);
+                                               figureElm.appendChild(dom.create('figcaption', {contentEditable: true}, 'Caption'));
+                                               figureElm.contentEditable = false;
+
+                                               var textBlock = dom.getParent(oldImg, isTextBlock);
+                                               if (textBlock) {
+                                                       dom.split(textBlock, oldImg, figureElm);
+                                               } else {
+                                                       dom.replace(figureElm, oldImg);
+                                               }
+
+                                               editor.selection.select(figureElm);
+                                       }
+
+                                       return;
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 waitLoad(imgElm);
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -268,23 +306,32 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                width = dom.getAttrib(imgElm, 'width');
-               height = dom.getAttrib(imgElm, 'height');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         imgElm = editor.selection.getNode();
+               figureElm = dom.getParent(imgElm, 'figure.image');
+               if (figureElm) {
+                       imgElm = dom.select('img', figureElm)[0];
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (imgElm.nodeName == 'IMG' && !imgElm.getAttribute('data-mce-object') && !imgElm.getAttribute('data-mce-placeholder')) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (imgElm && (imgElm.nodeName != 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {
+                       imgElm = null;
+               }
+
+               if (imgElm) {
+                       width = dom.getAttrib(imgElm, 'width');
+                       height = dom.getAttrib(imgElm, 'height');
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         data = {
</span><span class="cx" style="display: block; padding: 0 10px">                                src: dom.getAttrib(imgElm, 'src'),
</span><span class="cx" style="display: block; padding: 0 10px">                                alt: dom.getAttrib(imgElm, 'alt'),
</span><span class="cx" style="display: block; padding: 0 10px">                                title: dom.getAttrib(imgElm, 'title'),
</span><span class="cx" style="display: block; padding: 0 10px">                                "class": dom.getAttrib(imgElm, 'class'),
</span><span class="cx" style="display: block; padding: 0 10px">                                width: width,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                height: height
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         height: height,
+                               caption: !!figureElm
</ins><span class="cx" style="display: block; padding: 0 10px">                         };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // WP
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.fire( 'wpLoadImageData', { imgData: { data: data, node: imgElm } } );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                } else {
-                       imgElm = null;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if (imageList) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -373,6 +420,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                generalFormItems.push(classListCtrl);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if (editor.settings.image_caption && tinymce.Env.ceFalse) {
+                       generalFormItems.push({name: 'caption', type: 'checkbox', label: 'Caption'});
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // WP
</span><span class="cx" style="display: block; padding: 0 10px">                editor.fire( 'wpLoadImageForm', { data: generalFormItems } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -551,11 +602,40 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        editor.on('preInit', function() {
+               function hasImageClass(node) {
+                       var className = node.attr('class');
+                       return className && /\bimage\b/.test(className);
+               }
+
+               function toggleContentEditableState(state) {
+                       return function(nodes) {
+                               var i = nodes.length, node;
+
+                               function toggleContentEditable(node) {
+                                       node.attr('contenteditable', state ? 'true' : null);
+                               }
+
+                               while (i--) {
+                                       node = nodes[i];
+
+                                       if (hasImageClass(node)) {
+                                               node.attr('contenteditable', state ? 'false' : null);
+                                               tinymce.each(node.getAll('figcaption'), toggleContentEditable);
+                                       }
+                               }
+                       };
+               }
+
+               editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
+               editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
+       });
+
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.addButton('image', {
</span><span class="cx" style="display: block; padding: 0 10px">                icon: 'image',
</span><span class="cx" style="display: block; padding: 0 10px">                tooltip: 'Insert/edit image',
</span><span class="cx" style="display: block; padding: 0 10px">                onclick: createImageList(showDialog),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                stateSelector: 'img:not([data-mce-object],[data-mce-placeholder])'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.addMenuItem('image', {
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsimagepluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(Math.max(d.width,d.clientWidth),Math.max(d.height,d.clientHeight))},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){fun
 ction e(){var a,b,c,d;a=l.find("#width")[0],b=l.find("#height")[0],a&&b&&(c=a.value(),d=b.value(),l.find("#constrain")[0].checked()&&m&&n&&c&&d&&(m!=c?(d=Math.round(c/m*d),isNaN(d)||b.value(d)):(c=Math.round(d/n*c),isNaN(c)||a.value(c))),m=c,n=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){q.width||q.height||!t||(r.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}j(),e(),q=tinymce.extend(q,l.toJSON());var c=q.caption;q.alt||(q.alt=""),q.title||(q.title=""),""===q.width&&(q.width=null),""===q.height&&(q.height=null),q.style||(q.style=null),q={src:q.src,alt:q.alt,title:q.title,width:q.width,height:q.height,style:q.style,"class":q["class"]},a.undoManager.
 transact(function(){var d={node:s,data:q,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):q.src?(""===q.title&&(q.title=null),s?(r.setAttribs(s,q),a.editorUpload.uploadImagesAuto()):(q.id="__mcenew",a.focus(),a.selection.setContent(r.createHTML("img",q)),s=r.get("__mcenew"),r.setAttrib(s,"id",null)),void b(s)):void(s&&(r.remove(s),a.focus(),a.nodeChanged()))})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(c){var d,e,f,g=c.meta||{};o&&o.value(a.convertURL(this.value(),"src")),tinymce.each(g,function(a,b){l.find("#"+b).value(a)}),g.width||g.height||(d=a.convertURL(this.value(),"src"),e=a.settings.image_prepend_url,f=new RegExp("^(?:[a-z]+:)?//","i"),e&&!f.test(d)&&d.substring(0,e.length)!==e&&(d=e+d),this.value(d),b(a.documentBaseURI.toAbsolute(this.value()),functi
 on(a){a.width&&a.height&&t&&(m=a.width,n=a.height,l.find("#width").value(m),l.find("#height").value(n))}))}function i(a){if(a.margin){var b=a.margin.split(" ");switch(b.length){case 1:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[0],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[0];break;case 2:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[1];break;case 3:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[1];b
 reak;case 4:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[3]}delete a.margin}return a}function j(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=l.toJSON(),d=r.parseStyle(c.style);d=i(d),c.vspace&&(d["margin-top"]=d["margin-bottom"]=b(c.vspace)),c.hspace&&(d["margin-left"]=d["margin-right"]=b(c.hspace)),c.border&&(d["border-width"]=b(c.border)),l.find("#style").value(r.serializeStyle(r.parseStyle(r.serializeStyle(d))))}}function k(){if(a.settings.image_advtab){var b=l.toJSON(),c=r.parseStyle(b.style);l.find("#vspace").value(""),l.find("#hspace").value(""),c=i(c),(c["margin-top"]&
 amp;&c["margin-bottom"]||c["margin-right"]&&c["margin-left"])&&(c["margin-top"]===c["margin-bottom"]?l.find("#vspace").value(g(c["margin-top"])):l.find("#vspace").value(""),c["margin-right"]===c["margin-left"]?l.find("#hspace").value(g(c["margin-right"])):l.find("#hspace").value("")),c["border-width"]&&l.find("#border").value(g(c["border-width"])),l.find("#style").value(r.serializeStyle(r.parseStyle(r.serializeStyle(c))))}}var l,m,n,o,p,q={},r=a.dom,s=a.selection.getNode(),t=a.settings.image_dimensions!==!1;m=r.getAttrib(s,"width"),n=r.getAttrib(s,"height"),"IMG"!=s.nodeName||s.getAttribute("data-mce-object")||s.getAttribute("data-mce-placeholder")?s=null:(q={src:r.getAttrib(s,"src"),alt:r.getAttrib(s,"al
 t"),title:r.getAttrib(s,"title"),"class":r.getAttrib(s,"class"),width:m,height:n},a.fire("wpLoadImageData",{imgData:{data:q,node:s}})),d&&(o={type:"listbox",label:"Image list",values:c(d,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:q.src&&a.convertURL(q.src,"src"),onselect:function(a){var b=l.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),l.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){o=this}}),a.settings.image_class_list&&(p={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var u=[{name:"
 src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},o];a.settings.image_description!==!1&&u.push({name:"alt",type:"textbox",label:"Image description"}),a.settings.image_title&&u.push({name:"title",type:"textbox",label:"Image Title"}),t&&u.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),u.push(p),a.fire("wpLoadImageForm",{data:u}),a.settings.image_advtab?(s&&
 amp;(s.style.marginLeft&&s.style.marginRight&&s.style.marginLeft===s.style.marginRight&&(q.hspace=g(s.style.marginLeft)),s.style.marginTop&&s.style.marginBottom&&s.style.marginTop===s.style.marginBottom&&(q.vspace=g(s.style.marginTop)),s.style.borderWidth&&(q.border=g(s.style.borderWidth)),q.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(s,"style")))),l=a.windowManager.open({title:"Insert/edit image",data:q,bodyType:"tabpanel",body:[{title:"General",type:"form",items:u},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:k},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:j},items:[{label:"Vertical space",nam
 e:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})):l=a.windowManager.open({title:"Insert/edit image",data:q,body:u,onSubmit:f})}a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert/edit image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage",d(e))});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(Math.max(d.width,d.clientWidth),Math.max(d.height,d.clientHeight))},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){fun
 ction e(){var a,b,c,d;a=l.find("#width")[0],b=l.find("#height")[0],a&&b&&(c=a.value(),d=b.value(),l.find("#constrain")[0].checked()&&o&&p&&c&&d&&(o!=c?(d=Math.round(c/o*d),isNaN(d)||b.value(d)):(c=Math.round(d/p*c),isNaN(c)||a.value(c))),o=c,p=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){s.width||s.height||!u||(t.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}var c,d;j(),e(),s=tinymce.extend(s,l.toJSON());var f=s.wpcaption;s.alt||(s.alt=""),s.title||(s.title=""),""===s.width&&(s.width=null),""===s.height&&(s.height=null),s.style||(s.style=null),s={src:s.src,alt:s.alt,title:s.title,width:s.width,height:s.height,style:s.style,caption:s.caption,"class":s["
 class"]},a.undoManager.transact(function(){function e(b){return a.schema.getTextBlockElements()[b.nodeName]}var g={node:m,data:s,wpcaption:f};if(a.fire("wpImageFormSubmit",{imgData:g}),g.cancel)return void b(g.node);if(!s.src)return void(m&&(t.remove(m),a.focus(),a.nodeChanged()));if(""===s.title&&(s.title=null),m?t.setAttribs(m,s):(s.id="__mcenew",a.focus(),a.selection.setContent(t.createHTML("img",s)),m=t.get("__mcenew"),t.setAttrib(m,"id",null)),a.editorUpload.uploadImagesAuto(),s.caption===!1&&t.is(m.parentNode,"figure.image")&&(c=m.parentNode,t.insertAfter(m,c),t.remove(c)),s.caption!==!0)b(m);else if(!t.is(m.parentNode,"figure.image")){d=m,m=m.cloneNode(!0),c=t.create("figure",{"class":"image"}),c.appendChild(m),c.appendChild(t.create("figcaption",{contentEditable:!0},"Caption")),c.contentEditable=!1;var h=t.getP
 arent(d,e);h?t.split(h,d,c):t.replace(c,d),a.selection.select(c)}})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(c){var d,e,f,g=c.meta||{};q&&q.value(a.convertURL(this.value(),"src")),tinymce.each(g,function(a,b){l.find("#"+b).value(a)}),g.width||g.height||(d=a.convertURL(this.value(),"src"),e=a.settings.image_prepend_url,f=new RegExp("^(?:[a-z]+:)?//","i"),e&&!f.test(d)&&d.substring(0,e.length)!==e&&(d=e+d),this.value(d),b(a.documentBaseURI.toAbsolute(this.value()),function(a){a.width&&a.height&&u&&(o=a.width,p=a.height,l.find("#width").value(o),l.find("#height").value(p))}))}function i(a){if(a.margin){var b=a.margin.split(" ");switch(b.length){case 1:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[0],a["margin-bottom"]=a["margin-bo
 ttom"]||b[0],a["margin-left"]=a["margin-left"]||b[0];break;case 2:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[1];break;case 3:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[1];break;case 4:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[3]}delete a.margin}return a}function j(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.im
 age_advtab){var c=l.toJSON(),d=t.parseStyle(c.style);d=i(d),c.vspace&&(d["margin-top"]=d["margin-bottom"]=b(c.vspace)),c.hspace&&(d["margin-left"]=d["margin-right"]=b(c.hspace)),c.border&&(d["border-width"]=b(c.border)),l.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(d))))}}function k(){if(a.settings.image_advtab){var b=l.toJSON(),c=t.parseStyle(b.style);l.find("#vspace").value(""),l.find("#hspace").value(""),c=i(c),(c["margin-top"]&&c["margin-bottom"]||c["margin-right"]&&c["margin-left"])&&(c["margin-top"]===c["margin-bottom"]?l.find("#vspace").value(g(c["margin-top"])):l.find("#vspace").value(""),c["margin-right"]===c["margin-left"]?l.find("#hspace").value(g(c["margin-right"])
 ):l.find("#hspace").value("")),c["border-width"]&&l.find("#border").value(g(c["border-width"])),l.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(c))))}}var l,m,n,o,p,q,r,s={},t=a.dom,u=a.settings.image_dimensions!==!1;m=a.selection.getNode(),n=t.getParent(m,"figure.image"),n&&(m=t.select("img",n)[0]),m&&("IMG"!=m.nodeName||m.getAttribute("data-mce-object")||m.getAttribute("data-mce-placeholder"))&&(m=null),m&&(o=t.getAttrib(m,"width"),p=t.getAttrib(m,"height"),s={src:t.getAttrib(m,"src"),alt:t.getAttrib(m,"alt"),title:t.getAttrib(m,"title"),"class":t.getAttrib(m,"class"),width:o,height:p,caption:!!n},a.fire("wpLoadImageData",{imgData:{data:s,node:m}})),d&&(q={type:"listbox",label:"Image list",values:c(d,funct
 ion(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:s.src&&a.convertURL(s.src,"src"),onselect:function(a){var b=l.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),l.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){q=this}}),a.settings.image_class_list&&(r={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var v=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},q];a.settings.image_description!==!1&&v.push({name:"alt",type:"textbox",label:"Image description"}),a.settings.i
 mage_title&&v.push({name:"title",type:"textbox",label:"Image Title"}),u&&v.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),v.push(r),a.settings.image_caption&&tinymce.Env.ceFalse&&v.push({name:"caption",type:"checkbox",label:"Caption"}),a.fire("wpLoadImageForm",{data:v}),a.settings.image_advtab?(m&&(m.style.marginLeft&&m.style.marginRight&&m.style.marginLeft===m.style.marginRight&&(s.
 hspace=g(m.style.marginLeft)),m.style.marginTop&&m.style.marginBottom&&m.style.marginTop===m.style.marginBottom&&(s.vspace=g(m.style.marginTop)),m.style.borderWidth&&(s.border=g(m.style.borderWidth)),s.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(m,"style")))),l=a.windowManager.open({title:"Insert/edit image",data:s,bodyType:"tabpanel",body:[{title:"General",type:"form",items:v},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:k},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:j},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:&
 quot;border"}]}]}],onSubmit:f})):l=a.windowManager.open({title:"Insert/edit image",data:s,body:v,onSubmit:f})}a.on("preInit",function(){function b(a){var b=a.attr("class");return b&&/\bimage\b/.test(b)}function c(a){return function(c){function d(b){b.attr("contenteditable",a?"true":null)}for(var e,f=c.length;f--;)e=c[f],b(e)&&(e.attr("contenteditable",a?"false":null),tinymce.each(e.getAll("figcaption"),d))}}a.parser.addNodeFilter("figure",c(!0)),a.serializer.addNodeFilter("figure",c(!1))}),a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),a.addMenuItem("image",{icon:"image",text:"Insert/edit image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage&quot
 ;,d(e))});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginslistspluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -498,8 +498,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function applyList(listName) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var rng = selection.getRng(true), bookmark = createBookmark(rng), listItemName = 'LI';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var rng = selection.getRng(true), bookmark, listItemName = 'LI';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (dom.getContentEditable(selection.getNode()) === "false") {
+                               return;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         listName = listName.toUpperCase();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (listName == 'DL') {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -583,6 +587,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return textBlocks;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        bookmark = createBookmark(rng);
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         tinymce.each(getSelectedTextBlocks(), function(block) {
</span><span class="cx" style="display: block; padding: 0 10px">                                var listBlock, sibling;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginslistspluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/lists/plugin.min.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("lists",function(a){function b(a){return a&&/^(OL|UL|DL)$/.test(a.nodeName)}function c(a){return a.parentNode.firstChild==a}function d(a){return a.parentNode.lastChild==a}function e(b){return b&&!!a.schema.getTextBlockElements()[b.nodeName]}function f(b){return b===a.getBody()}var g=this;a.on("init",function(){function h(a,b){var c=x.isEmpty(a);return b&&x.select("span[data-mce-type=bookmark]").length>0?!1:c}function i(a){function b(b){var d,e,f;e=a[b?"startContainer":"endContainer"],f=a[b?"startOffset":"endOffset"],1==e.nodeType&&(d=x.create("span",{"data-mce-type":"bookmark"}),e.hasChildNodes()?(f=Math.min(f,e.childNodes.length-1),b?e.insertBefore(d,e.childNodes[f]):x.insertAfter(d,e.childNodes[f])):e.appendChild(d),e=d,f=0),c[
 b?"startContainer":"endContainer"]=e,c[b?"startOffset":"endOffset"]=f}var c={};return b(!0),a.collapsed||b(),c}function j(a){function b(b){function c(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b==a)return c;(1!=b.nodeType||"bookmark"!=b.getAttribute("data-mce-type"))&&c++,b=b.nextSibling}return-1}var d,e,f;d=f=a[b?"startContainer":"endContainer"],e=a[b?"startOffset":"endOffset"],d&&(1==d.nodeType&&(e=c(d),d=d.parentNode,x.remove(f)),a[b?"startContainer":"endContainer"]=d,a[b?"startOffset":"endOffset"]=e)}b(!0),b();var c=x.createRng();c.setStart(a.startContainer,a.startOffset),a.endContainer&&c.setEnd(a.endContainer,a.endOffset),y.setRng(c)}function k(b,c){var d,e,f,g=x.createFragment(),h=a.schema.getBlockElements();if(a.settings.forced_root_block&&(c=c||a.settings.forced_root_block),c&&(e=x.cr
 eate(c),e.tagName===a.settings.forced_root_block&&x.setAttribs(e,a.settings.forced_root_block_attrs),g.appendChild(e)),b)for(;d=b.firstChild;){var i=d.nodeName;f||"SPAN"==i&&"bookmark"==d.getAttribute("data-mce-type")||(f=!0),h[i]?(g.appendChild(d),e=null):c?(e||(e=x.create(c),g.appendChild(e)),e.appendChild(d)):g.appendChild(d)}return a.settings.forced_root_block?f||tinymce.Env.ie&&!(tinymce.Env.ie>10)||e.appendChild(x.create("br",{"data-mce-bogus":"1"})):g.appendChild(x.create("br")),g}function l(){return tinymce.grep(y.getSelectedBlocks(),function(a){return/^(LI|DT|DD)$/.test(a.nodeName)})}function m(a,b,c){function d(a){tinymce.each(g,function(c){a.parentNode.insertBefore(c,b.parentNode)}),x.remove(a)}var e,f,g,i;for(g=x.select('span[data-mce-type="bookmark"]',a),c=c||k(b),e=x.createRng(),e.setStartAfter(b),e.setEndAfter(a),f=e.extractContents(),i=f.firstChild;i;i=i.firstCh
 ild)if("LI"==i.nodeName&&x.isEmpty(i)){x.remove(i);break}x.isEmpty(f)||x.insertAfter(f,a),x.insertAfter(c,a),h(b.parentNode)&&d(b.parentNode),x.remove(b),h(a)&&x.remove(a)}function n(a){var c,d;if(c=a.nextSibling,c&&b(c)&&c.nodeName==a.nodeName){for(;d=c.firstChild;)a.appendChild(d);x.remove(c)}if(c=a.previousSibling,c&&b(c)&&c.nodeName==a.nodeName){for(;d=c.firstChild;)a.insertBefore(d,a.firstChild);x.remove(c)}}function o(a){tinymce.each(tinymce.grep(x.select("ol,ul",a)),function(a){var c,d=a.parentNode;"LI"==d.nodeName&&d.firstChild==a&&(c=d.previousSibling,c&&"LI"==c.nodeName&&(c.appendChild(a),h(d)&&x.remove(d))),b(d)&&(c=d.previousSibling,c&&"LI"==c.nodeName&&c.appendChild(a))})}function p(a){function e(a){h(a)&&x.remove(a)}var g,i=a.parentNode,j=i.parentNode;return f(i)?!0:"DD"==a.nodeName?(
 x.rename(a,"DT"),!0):c(a)&&d(a)?("LI"==j.nodeName?(x.insertAfter(a,j),e(j),x.remove(i)):b(j)?x.remove(i,!0):(j.insertBefore(k(a),i),x.remove(i)),!0):c(a)?("LI"==j.nodeName?(x.insertAfter(a,j),a.appendChild(i),e(j)):b(j)?j.insertBefore(a,i):(j.insertBefore(k(a),i),x.remove(a)),!0):d(a)?("LI"==j.nodeName?x.insertAfter(a,j):b(j)?x.insertAfter(a,i):(x.insertAfter(k(a),i),x.remove(a)),!0):("LI"==j.nodeName?(i=j,g=k(a,"LI")):g=b(j)?k(a,"LI"):k(a),m(i,a,g),o(i.parentNode),!0)}function q(a){function c(c,d){var e;if(b(c)){for(;e=a.lastChild.firstChild;)d.appendChild(e);x.remove(c)}}var d,e;return"DT"==a.nodeName?(x.rename(a,"DD"),!0):(d=a.previousSibling,d&&b(d)?(d.appendChild(a),!0):d&&"LI"==d.nodeName&&b(d.lastChild)?(d.lastChild.appendChild(a),c(a.lastChild,d.lastChild),!0):(d=a.nextSibling,d&&b(d)?(d.insertBefore(a,d.firstChild),!0):d&&"
 LI"==d.nodeName&&b(a.lastChild)?!1:(d=a.previousSibling,d&&"LI"==d.nodeName?(e=x.create(a.parentNode.nodeName),d.appendChild(e),e.appendChild(a),c(a.lastChild,e),!0):!1)))}function r(){var b=l();if(b.length){for(var c=i(y.getRng(!0)),d=0;d<b.length&&(q(b[d])||0!==d);d++);return j(c),a.nodeChanged(),!0}}function s(){var b=l();if(b.length){var c,d,e=i(y.getRng(!0)),f=a.getBody();for(c=b.length;c--;)for(var g=b[c].parentNode;g&&g!=f;){for(d=b.length;d--;)if(b[d]===g){b.splice(c,1);break}g=g.parentNode}for(c=0;c<b.length&&(p(b[c])||0!==c);c++);return j(e),a.nodeChanged(),!0}}function t(c){function d(){function b(a){var b,c;for(b=f[a?"startContainer":"endContainer"],c=f[a?"startOffset":"endOffset"],1==b.nodeType&&(b=b.childNodes[Math.min(c,b.childNodes.length-1)]||b);b.parentNode!=g;){if(e(b))return b;if(/^(TD|TH)$/.test(b.parentNode.nodeName))return b;b=b.parentNode}return b}for(
 var c,d=[],g=a.getBody(),h=b(!0),i=b(),j=[],k=h;k&&(j.push(k),k!=i);k=k.nextSibling);return tinymce.each(j,function(a){if(e(a))return d.push(a),void(c=null);if(x.isBlock(a)||"BR"==a.nodeName)return"BR"==a.nodeName&&x.remove(a),void(c=null);var b=a.nextSibling;return tinymce.dom.BookmarkManager.isBookmarkNode(a)&&(e(b)||!b&&a.parentNode==g)?void(c=null):(c||(c=x.create("p"),a.parentNode.insertBefore(c,a),d.push(c)),void c.appendChild(a))}),d}var f=y.getRng(!0),g=i(f),h="LI";c=c.toUpperCase(),"DL"==c&&(h="DT"),tinymce.each(d(),function(a){var d,e;e=a.previousSibling,e&&b(e)&&e.nodeName==c?(d=e,a=x.rename(a,h),e.appendChild(a)):(d=x.create(c),a.parentNode.insertBefore(d,a),d.appendChild(a),a=x.rename(a,h)),n(d)}),j(g)}function u(){var c=i(y.getRng(!0)),d=a.getBody();tinymce.each(l(),function(a){var c,e;if(!f(a.parentNode)){if(h(a))return void p(a);for(c=a;c&&c!=d;
 c=c.parentNode)b(c)&&(e=c);m(e,a)}}),j(c)}function v(a){var b=x.getParent(y.getStart(),"OL,UL,DL");if(!f(b))if(b)if(b.nodeName==a)u(a);else{var c=i(y.getRng(!0));n(x.rename(b,a)),j(c)}else t(a)}function w(b){return function(){var c=x.getParent(a.selection.getStart(),"UL,OL,DL");return c&&c.nodeName==b}}var x=a.dom,y=a.selection;g.backspaceDelete=function(c){function d(b,c){var d,e,f=b.startContainer,g=b.startOffset;if(3==f.nodeType&&(c?g<f.data.length:g>0))return f;for(d=a.schema.getNonEmptyElements(),e=new tinymce.dom.TreeWalker(b.startContainer);f=e[c?"next":"prev"]();){if("LI"==f.nodeName&&!f.hasChildNodes())return f;if(d[f.nodeName])return f;if(3==f.nodeType&&f.data.length>0)return f}}function e(a,c){var d,e,g=a.parentNode;if(b(c.lastChild)&&(e=c.lastChild),d=c.lastChild,d&&"BR"==d.nodeName&&a.hasChildNodes()&&x.remove(d),h(c,!0)&&x
 .$(c).empty(),!h(a,!0))for(;d=a.firstChild;)c.appendChild(d);e&&c.appendChild(e),x.remove(a),h(g)&&!f(g)&&x.remove(g)}if(y.isCollapsed()){var g,k,l,m=x.getParent(y.getStart(),"LI");if(m){if(g=m.parentNode,f(g)&&x.isEmpty(g))return!0;if(k=y.getRng(!0),l=x.getParent(d(k,c),"LI"),l&&l!=m){var n=i(k);return c?e(l,m):e(m,l),j(n),!0}if(!l&&!c&&u(g.nodeName))return!0}}},a.on("BeforeExecCommand",function(b){var c,d=b.command.toLowerCase();return"indent"==d?r()&&(c=!0):"outdent"==d&&s()&&(c=!0),c?(a.fire("ExecCommand",{command:b.command}),b.preventDefault(),!0):void 0}),a.addCommand("InsertUnorderedList",function(){v("UL")}),a.addCommand("InsertOrderedList",function(){v("OL")}),a.addCommand("InsertDefinitionList",function(){v("DL")}),a.addQueryStateHandler("InsertUnorderedList",w(&quot
 ;UL")),a.addQueryStateHandler("InsertOrderedList",w("OL")),a.addQueryStateHandler("InsertDefinitionList",w("DL")),a.on("keydown",function(b){9!=b.keyCode||tinymce.util.VK.metaKeyPressed(b)||a.dom.getParent(a.selection.getStart(),"LI,DT,DD")&&(b.preventDefault(),b.shiftKey?s():r())})}),a.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var b=this;a.on("nodechange",function(){for(var d=a.selection.getSelectedBlocks(),e=!1,f=0,g=d.length;!e&&g>f;f++){var h=d[f].nodeName;e="LI"==h&&c(d[f])||"UL"==h||"OL"==h||"DD"==h}b.disabled(e)})}}),a.on("keydown",function(a){a.keyCode==tinymce.util.VK.BACKSPACE?g.backspaceDelete()&&a.preventDefault():a.keyCode==tinymce.util.VK.DELETE&&g.backspaceDelete(!0)&&a.preventDefault()})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("lists",function(e){function t(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)}function n(e){return e.parentNode.firstChild==e}function r(e){return e.parentNode.lastChild==e}function i(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function o(t){return t===e.getBody()}var a=this;e.on("init",function(){function s(e,t){var n=N.isEmpty(e);return t&&N.select("span[data-mce-type=bookmark]").length>0?!1:n}function l(e){function t(t){var r,i,o;i=e[t?"startContainer":"endContainer"],o=e[t?"startOffset":"endOffset"],1==i.nodeType&&(r=N.create("span",{"data-mce-type":"bookmark"}),i.hasChildNodes()?(o=Math.min(o,i.childNodes.length-1),t?i.insertBefore(r,i.childNodes[o]):N.insertAfter(r,i.childNodes[o])):i.appendChild(r),i=r,o=0),n[
 t?"startContainer":"endContainer"]=i,n[t?"startOffset":"endOffset"]=o}var n={};return t(!0),e.collapsed||t(),n}function c(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var r,i,o;r=o=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],r&&(1==r.nodeType&&(i=n(r),r=r.parentNode,N.remove(o)),e[t?"startContainer":"endContainer"]=r,e[t?"startOffset":"endOffset"]=i)}t(!0),t();var n=N.createRng();n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),E.setRng(n)}function u(t,n){var r,i,o,a=N.createFragment(),s=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&(i=N.cr
 eate(n),i.tagName===e.settings.forced_root_block&&N.setAttribs(i,e.settings.forced_root_block_attrs),a.appendChild(i)),t)for(;r=t.firstChild;){var l=r.nodeName;o||"SPAN"==l&&"bookmark"==r.getAttribute("data-mce-type")||(o=!0),s[l]?(a.appendChild(r),i=null):n?(i||(i=N.create(n),a.appendChild(i)),i.appendChild(r)):a.appendChild(r)}return e.settings.forced_root_block?o||tinymce.Env.ie&&!(tinymce.Env.ie>10)||i.appendChild(N.create("br",{"data-mce-bogus":"1"})):a.appendChild(N.create("br")),a}function d(){return tinymce.grep(E.getSelectedBlocks(),function(e){return/^(LI|DT|DD)$/.test(e.nodeName)})}function f(e,t,n){function r(e){tinymce.each(a,function(n){e.parentNode.insertBefore(n,t.parentNode)}),N.remove(e)}var i,o,a,l;for(a=N.select('span[data-mce-type="bookmark"]',e),n=n||u(t),i=N.createRng(),i.setStartAfter(t),i.setEndAfter(e),o=i.extractContents(),l=o.firstChild;l;l=l.firstCh
 ild)if("LI"==l.nodeName&&N.isEmpty(l)){N.remove(l);break}N.isEmpty(o)||N.insertAfter(o,e),N.insertAfter(n,e),s(t.parentNode)&&r(t.parentNode),N.remove(t),s(e)&&N.remove(e)}function h(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);N.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);N.remove(n)}}function m(e){tinymce.each(tinymce.grep(N.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),s(r)&&N.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function p(e){function i(e){s(e)&&N.remove(e)}var a,l=e.parentNode,c=l.parentNode;return o(l)?!0:"DD"==e.nodeName?(
 N.rename(e,"DT"),!0):n(e)&&r(e)?("LI"==c.nodeName?(N.insertAfter(e,c),i(c),N.remove(l)):t(c)?N.remove(l,!0):(c.insertBefore(u(e),l),N.remove(l)),!0):n(e)?("LI"==c.nodeName?(N.insertAfter(e,c),e.appendChild(l),i(c)):t(c)?c.insertBefore(e,l):(c.insertBefore(u(e),l),N.remove(e)),!0):r(e)?("LI"==c.nodeName?N.insertAfter(e,c):t(c)?N.insertAfter(e,l):(N.insertAfter(u(e),l),N.remove(e)),!0):("LI"==c.nodeName?(l=c,a=u(e,"LI")):a=t(c)?u(e,"LI"):u(e),f(l,e,a),m(l.parentNode),!0)}function g(e){function n(n,r){var i;if(t(n)){for(;i=e.lastChild.firstChild;)r.appendChild(i);N.remove(n)}}var r,i;return"DT"==e.nodeName?(N.rename(e,"DD"),!0):(r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"
 LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(i=N.create(e.parentNode.nodeName),r.appendChild(i),i.appendChild(e),n(e.lastChild,i),!0):!1)))}function v(){var t=d();if(t.length){for(var n=l(E.getRng(!0)),r=0;r<t.length&&(g(t[r])||0!==r);r++);return c(n),e.nodeChanged(),!0}}function y(){var t=d();if(t.length){var n,r,i=l(E.getRng(!0)),o=e.getBody();for(n=t.length;n--;)for(var a=t[n].parentNode;a&&a!=o;){for(r=t.length;r--;)if(t[r]===a){t.splice(n,1);break}a=a.parentNode}for(n=0;n<t.length&&(p(t[n])||0!==n);n++);return c(i),e.nodeChanged(),!0}}function b(n){function r(){function t(e){var t,n;for(t=a[e?"startContainer":"endContainer"],n=a[e?"startOffset":"endOffset"],1==t.nodeType&&(t=t.childNodes[Math.min(n,t.childNodes.length-1)]||t);t.parentNode!=o;){if(i(t))return t;if(/^(TD|TH)$/.test(t.parentNode.nodeName))return t;t=t.parentNode}return t}for(
 var n,r=[],o=e.getBody(),s=t(!0),l=t(),c=[],u=s;u&&(c.push(u),u!=l);u=u.nextSibling);return tinymce.each(c,function(e){if(i(e))return r.push(e),void(n=null);if(N.isBlock(e)||"BR"==e.nodeName)return"BR"==e.nodeName&&N.remove(e),void(n=null);var t=e.nextSibling;return tinymce.dom.BookmarkManager.isBookmarkNode(e)&&(i(t)||!t&&e.parentNode==o)?void(n=null):(n||(n=N.create("p"),e.parentNode.insertBefore(n,e),r.push(n)),void n.appendChild(e))}),r}var o,a=E.getRng(!0),s="LI";"false"!==N.getContentEditable(E.getNode())&&(n=n.toUpperCase(),"DL"==n&&(s="DT"),o=l(a),tinymce.each(r(),function(e){var r,i;i=e.previousSibling,i&&t(i)&&i.nodeName==n?(r=i,e=N.rename(e,s),i.appendChild(e)):(r=N.create(n),e.parentNode.insertBefore(r,e),r.appendChild(e),e=N.rename(e,s)),h(r)}),c(o))}function x(){var n=l(E.getRng(!0)),r=e.getBody();tinymce.each(d(),function(e){var n,i;if(
 !o(e.parentNode)){if(s(e))return void p(e);for(n=e;n&&n!=r;n=n.parentNode)t(n)&&(i=n);f(i,e)}}),c(n)}function C(e){var t=N.getParent(E.getStart(),"OL,UL,DL");if(!o(t))if(t)if(t.nodeName==e)x(e);else{var n=l(E.getRng(!0));h(N.rename(t,e)),c(n)}else b(e)}function w(t){return function(){var n=N.getParent(e.selection.getStart(),"UL,OL,DL");return n&&n.nodeName==t}}var N=e.dom,E=e.selection;a.backspaceDelete=function(n){function r(t,n){var r,i,o=t.startContainer,a=t.startOffset;if(3==o.nodeType&&(n?a<o.data.length:a>0))return o;for(r=e.schema.getNonEmptyElements(),i=new tinymce.dom.TreeWalker(t.startContainer);o=i[n?"next":"prev"]();){if("LI"==o.nodeName&&!o.hasChildNodes())return o;if(r[o.nodeName])return o;if(3==o.nodeType&&o.data.length>0)return o}}function i(e,n){var r,i,a=e.parentNode;if(t(n.lastChild)&&(i=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName
 &&e.hasChildNodes()&&N.remove(r),s(n,!0)&&N.$(n).empty(),!s(e,!0))for(;r=e.firstChild;)n.appendChild(r);i&&n.appendChild(i),N.remove(e),s(a)&&!o(a)&&N.remove(a)}if(E.isCollapsed()){var a,u,d,f=N.getParent(E.getStart(),"LI");if(f){if(a=f.parentNode,o(a)&&N.isEmpty(a))return!0;if(u=E.getRng(!0),d=N.getParent(r(u,n),"LI"),d&&d!=f){var h=l(u);return n?i(d,f):i(f,d),c(h),!0}if(!d&&!n&&x(a.nodeName))return!0}}},e.on("BeforeExecCommand",function(t){var n,r=t.command.toLowerCase();return"indent"==r?v()&&(n=!0):"outdent"==r&&y()&&(n=!0),n?(e.fire("ExecCommand",{command:t.command}),t.preventDefault(),!0):void 0}),e.addCommand("InsertUnorderedList",function(){C("UL")}),e.addCommand("InsertOrderedList",function(){C("OL")}),e.addCommand("InsertDefinitionList",function(){C("DL&quot
 ;)}),e.addQueryStateHandler("InsertUnorderedList",w("UL")),e.addQueryStateHandler("InsertOrderedList",w("OL")),e.addQueryStateHandler("InsertDefinitionList",w("DL")),e.on("keydown",function(t){9!=t.keyCode||tinymce.util.VK.metaKeyPressed(t)||e.dom.getParent(e.selection.getStart(),"LI,DT,DD")&&(t.preventDefault(),t.shiftKey?y():v())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){for(var r=e.selection.getSelectedBlocks(),i=!1,o=0,a=r.length;!i&&a>o;o++){var s=r[o].nodeName;i="LI"==s&&n(r[o])||"UL"==s||"OL"==s||"DD"==s}t.disabled(i)})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?a.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&
 a.backspaceDelete(!0)&&e.preventDefault()})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsmediapluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14,8 +14,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> tinymce.PluginManager.add('media', function(editor, url) {
</span><span class="cx" style="display: block; padding: 0 10px">        var urlPatterns = [
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                {regex: /youtu\.be\/([\w\-.]+)/, type: 'iframe', w: 425, h: 350, url: '//www.youtube.com/embed/$1', allowFullscreen: true},
-               {regex: /youtube\.com(.+)v=([^&]+)/, type: 'iframe', w: 425, h: 350, url: '//www.youtube.com/embed/$2', allowFullscreen: true},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         {regex: /youtu\.be\/([\w\-.]+)/, type: 'iframe', w: 560, h: 314, url: '//www.youtube.com/embed/$1', allowFullscreen: true},
+               {regex: /youtube\.com(.+)v=([^&]+)/, type: 'iframe', w: 560, h: 314, url: '//www.youtube.com/embed/$2', allowFullscreen: true},
+               {regex: /youtube.com\/embed\/([a-z0-9\-_]+)/i, type: 'iframe', w: 560, h: 314, url: '//www.youtube.com/embed/$1', allowFullscreen: true},
</ins><span class="cx" style="display: block; padding: 0 10px">                 {regex: /vimeo\.com\/([0-9]+)/, type: 'iframe', w: 425, h: 350, url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc', allowfullscreen: true},
</span><span class="cx" style="display: block; padding: 0 10px">                {regex: /vimeo\.com\/(.*)\/([0-9]+)/, type: "iframe", w: 425, h: 350, url: "//player.vimeo.com/video/$2?title=0&amp;byline=0", allowfullscreen: true},
</span><span class="cx" style="display: block; padding: 0 10px">                {regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/, type: 'iframe', w: 425, h: 350, url: '//maps.google.com/maps/ms?msid=$2&output=embed"', allowFullscreen: false}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -611,6 +612,86 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function retainAttributesAndInnerHtml(sourceNode, targetNode) {
+               var attrName, attrValue, attribs, ai, innerHtml;
+
+               // Prefix all attributes except width, height and style since we
+               // will add these to the placeholder
+               attribs = sourceNode.attributes;
+               ai = attribs.length;
+               while (ai--) {
+                       attrName = attribs[ai].name;
+                       attrValue = attribs[ai].value;
+
+                       if (attrName !== "width" && attrName !== "height" && attrName !== "style") {
+                               if (attrName == "data" || attrName == "src") {
+                                       attrValue = editor.convertURL(attrValue, attrName);
+                               }
+
+                               targetNode.attr('data-mce-p-' + attrName, attrValue);
+                       }
+               }
+
+               // Place the inner HTML contents inside an escaped attribute
+               // This enables us to copy/paste the fake object
+               innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
+               if (innerHtml) {
+                       targetNode.attr("data-mce-html", escape(innerHtml));
+                       targetNode.firstChild = null;
+               }
+       }
+
+       function createPlaceholderNode(node) {
+               var placeHolder, name = node.name;
+
+               placeHolder = new tinymce.html.Node('img', 1);
+               placeHolder.shortEnded = true;
+
+               retainAttributesAndInnerHtml(node, placeHolder);
+
+               placeHolder.attr({
+                       width: node.attr('width') || "300",
+                       height: node.attr('height') || (name == "audio" ? "30" : "150"),
+                       style: node.attr('style'),
+                       src: tinymce.Env.transparentSrc,
+                       "data-mce-object": name,
+                       "class": "mce-object mce-object-" + name
+               });
+
+               return placeHolder;
+       }
+
+       function createPreviewNode(node) {
+               var previewWrapper, previewNode, shimNode, name = node.name;
+
+               previewWrapper = new tinymce.html.Node('span', 1);
+               previewWrapper.attr({
+                       contentEditable: 'false',
+                       style: node.attr('style'),
+                       "data-mce-object": name,
+                       "class": "mce-preview-object mce-object-" + name
+               });
+
+               retainAttributesAndInnerHtml(node, previewWrapper);
+
+               previewNode = new tinymce.html.Node(name, 1);
+               previewNode.attr({
+                       src: node.attr('src'),
+                       allowfullscreen: node.attr('allowfullscreen'),
+                       width: node.attr('width') || "300",
+                       height: node.attr('height') || (name == "audio" ? "30" : "150"),
+                       frameborder: '0'
+               });
+
+               shimNode = new tinymce.html.Node('span', 1);
+               shimNode.attr('class', 'mce-shim');
+
+               previewWrapper.append(previewNode);
+               previewWrapper.append(shimNode);
+
+               return previewWrapper;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.on('preInit', function() {
</span><span class="cx" style="display: block; padding: 0 10px">                // Make sure that any messy HTML is retained inside these
</span><span class="cx" style="display: block; padding: 0 10px">                var specialElements = editor.schema.getSpecialElements();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -628,9 +709,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Converts iframe, video etc into placeholder images
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes, name) {
-                       var i = nodes.length, ai, node, placeHolder, attrName, attrValue, attribs, innerHtml;
-                       var videoScript;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes) {
+                       var i = nodes.length, node, placeHolder, videoScript;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        while (i--) {
</span><span class="cx" style="display: block; padding: 0 10px">                                node = nodes[i];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -638,6 +718,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        continue;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                if (node.parent.attr('data-mce-object')) {
+                                       continue;
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (node.name == 'script') {
</span><span class="cx" style="display: block; padding: 0 10px">                                        videoScript = getVideoScriptMatch(node.attr('src'));
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (!videoScript) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -645,9 +729,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                placeHolder = new tinymce.html.Node('img', 1);
-                               placeHolder.shortEnded = true;
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 if (videoScript) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (videoScript.width) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                node.attr('width', videoScript.width.toString());
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -658,47 +739,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                // Prefix all attributes except width, height and style since we
-                               // will add these to the placeholder
-                               attribs = node.attributes;
-                               ai = attribs.length;
-                               while (ai--) {
-                                       attrName = attribs[ai].name;
-                                       attrValue = attribs[ai].value;
-
-                                       if (attrName !== "width" && attrName !== "height" && attrName !== "style") {
-                                               if (attrName == "data" || attrName == "src") {
-                                                       attrValue = editor.convertURL(attrValue, attrName);
-                                               }
-
-                                               placeHolder.attr('data-mce-p-' + attrName, attrValue);
-                                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (node.name == 'iframe' && editor.settings.media_live_embeds !== false && tinymce.Env.ceFalse) {
+                                       placeHolder = createPreviewNode(node);
+                               } else {
+                                       placeHolder = createPlaceholderNode(node);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                // Place the inner HTML contents inside an escaped attribute
-                               // This enables us to copy/paste the fake object
-                               innerHtml = node.firstChild && node.firstChild.value;
-                               if (innerHtml) {
-                                       placeHolder.attr("data-mce-html", escape(innerHtml));
-                                       placeHolder.firstChild = null;
-                               }
-
-                               placeHolder.attr({
-                                       width: node.attr('width') || "300",
-                                       height: node.attr('height') || (name == "audio" ? "30" : "150"),
-                                       style: node.attr('style'),
-                                       src: tinymce.Env.transparentSrc,
-                                       "data-mce-object": name,
-                                       "class": "mce-object mce-object-" + name
-                               });
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 node.replace(placeHolder);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Replaces placeholder images with real elements for video, object, iframe etc
</span><span class="cx" style="display: block; padding: 0 10px">                editor.serializer.addAttributeFilter('data-mce-object', function(nodes, name) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName, className;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        while (i--) {
</span><span class="cx" style="display: block; padding: 0 10px">                                node = nodes[i];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -711,10 +764,18 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Add width/height to everything but audio
</span><span class="cx" style="display: block; padding: 0 10px">                                if (realElmName != "audio" && realElmName != "script") {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        realElm.attr({
-                                               width: node.attr('width'),
-                                               height: node.attr('height')
-                                       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 className = node.attr('class');
+                                       if (className && className.indexOf('mce-preview-object') !== -1) {
+                                               realElm.attr({
+                                                       width: node.firstChild.attr('width'),
+                                                       height: node.firstChild.attr('height')
+                                               });
+                                       } else {
+                                               realElm.attr({
+                                                       width: node.attr('width'),
+                                                       height: node.attr('height')
+                                               });
+                                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                realElm.attr({
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -778,7 +839,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.addButton('media', {
</span><span class="cx" style="display: block; padding: 0 10px">                tooltip: 'Insert/edit video',
</span><span class="cx" style="display: block; padding: 0 10px">                onclick: showDialog,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                stateSelector: ['img[data-mce-object=video]', 'img[data-mce-object=iframe]']
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         stateSelector: ['img[data-mce-object]', 'span[data-mce-object]']
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.addMenuItem('media', {
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsmediapluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("media",function(a,b){function c(a){return a=a.toLowerCase(),-1!=a.indexOf(".mp3")?"audio/mpeg":-1!=a.indexOf(".wav")?"audio/wav":-1!=a.indexOf(".mp4")?"video/mp4":-1!=a.indexOf(".webm")?"video/webm":-1!=a.indexOf(".ogg")?"video/ogg":-1!=a.indexOf(".swf")?"application/x-shockwave-flash":""}function d(b){var c=a.settings.media_scripts;if(c)for(var d=0;d<c.length;d++)if(-1!==b.indexOf(c[d].filter))return c[d]}function e(){function b(a){var b,c,f,g;b=d.find("#width")[0],c=d.find("#height")[0],f=b.value(),g=c.value(),d.find("#constrain")[0].checked()&&e&&j&&f&&g&&(a.control==b?(g=Math.round(f/e*g),isNaN(g)||c.value(g)):(f=Math.round(g/j*f),isNaN(f)||b.value
 (f))),e=f,j=g}function c(){k=h(this.value()),this.parent().parent().fromJSON(k)}var d,e,j,k,l=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onchange:function(a){tinymce.each(a.meta,function(a,b){d.find("#"+b).value(a)})}}];a.settings.media_alt_source!==!1&&l.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),a.settings.media_poster!==!1&&l.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),a.settings.media_dimensions!==!1&&l.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:b,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height&qu
 ot;,type:"textbox",maxLength:5,size:3,onchange:b,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),k=i(a.selection.getNode()),e=k.width,j=k.height;var n={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:f(),multiline:!0,label:"Source"};n[m]=c,d=a.windowManager.open({title:"Insert/edit video",data:k,bodyType:"tabpanel",body:[{title:"General",type:"form",onShowTab:function(){k=h(this.next().find("#embed").value()),this.fromJSON(k)},items:l},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(g(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},n]}],
 onSubmit:function(){var b,c,d,e;for(b=a.dom.select("img[data-mce-object]"),a.insertContent(g(this.toJSON())),c=a.dom.select("img[data-mce-object]"),d=0;d<b.length;d++)for(e=c.length-1;e>=0;e--)b[d]==c[e]&&c.splice(e,1);a.selection.select(c[0]),a.nodeChanged()}})}function f(){var b=a.selection.getNode();return b.getAttribute("data-mce-object")?a.selection.getContent():void 0}function g(e){var f="";if(!e.source1&&(tinymce.extend(e,h(e.embed)),!e.source1))return"";if(e.source2||(e.source2=""),e.poster||(e.poster=""),e.source1=a.convertURL(e.source1,"source"),e.source2=a.convertURL(e.source2,"source"),e.source1mime=c(e.source1),e.source2mime=c(e.source2),e.poster=a.convertURL(e.poster,"poster"),e.flashPlayerUrl=a.convertURL(b+"/moxieplayer.swf","movie"),tinymce.each(l,function(a){var b,c,d;if(b=a.regex.exec(e.source1)){for(d=a.url,c=0;b[c];c++)d=d
 .replace("$"+c,function(){return b[c]});e.source1=d,e.type=a.type,e.allowFullscreen=a.allowFullscreen,e.width=e.width||a.w,e.height=e.height||a.h}}),e.embed)f=k(e.embed,e,!0);else{var g=d(e.source1);if(g&&(e.type="script",e.width=g.width,e.height=g.height),e.width=e.width||300,e.height=e.height||150,tinymce.each(e,function(b,c){e[c]=a.dom.encode(b)}),"iframe"==e.type){var i=e.allowFullscreen?' allowFullscreen="1"':"";f+='<iframe src="'+e.source1+'" width="'+e.width+'" height="'+e.height+'"'+i+"></iframe>"}else"application/x-shockwave-flash"==e.source1mime?(f+='<object data="'+e.source1+'" width="'+e.width+'" height="'+e.height+'" type="application/x-shockwave-flash">',e.poster&&(f+='<img src="'+e.poster+'" width="'+e.width+'" height="'+e.height+'" />'),f+="</object>
 "):-1!=e.source1mime.indexOf("audio")?a.settings.audio_template_callback?f=a.settings.audio_template_callback(e):f+='<audio controls="controls" src="'+e.source1+'">'+(e.source2?'\n<source src="'+e.source2+'"'+(e.source2mime?' type="'+e.source2mime+'"':"")+" />\n":"")+"</audio>":"script"==e.type?f+='<script src="'+e.source1+'"></script>':f=a.settings.video_template_callback?a.settings.video_template_callback(e):'<video width="'+e.width+'" height="'+e.height+'"'+(e.poster?' poster="'+e.poster+'"':"")+' controls="controls">\n<source src="'+e.source1+'"'+(e.source1mime?' type="'+e.source1mime+'"':"")+" />\n"+(e.source2?'<source src="'+e.source2+'"'+(e.source2mime?' type="'+e.source2mime+'"':"")+" />\n&qu
 ot;:"")+"</video>"}return f}function h(a){var b={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(a,c){if(b.source1||"param"!=a||(b.source1=c.map.movie),("iframe"==a||"object"==a||"embed"==a||"video"==a||"audio"==a)&&(b.type||(b.type=a),b=tinymce.extend(c.map,b)),"script"==a){var e=d(c.map.src);if(!e)return;b={type:"script",source1:c.map.src,width:e.width,height:e.height}}"source"==a&&(b.source1?b.source2||(b.source2=c.map.src):b.source1=c.map.src),"img"!=a||b.poster||(b.poster=c.map.src)}}).parse(a),b.source1=b.source1||b.src||b.data,b.source2=b.source2||"",b.poster=b.poster||"",b}function i(b){return b.getAttribute("data-mce-object")?h(a.serializer.serialize(b,{selection:!0})):{}}function j(b){if(a.settings.media_filter_html===!1)re
 turn b;var c,d=new tinymce.html.Writer;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(a){d.comment(a)},cdata:function(a){d.cdata(a)},text:function(a,b){d.text(a,b)},start:function(b,e,f){if(c=!0,"script"!=b&&"noscript"!=b){for(var g=0;g<e.length;g++){if(0===e[g].name.indexOf("on"))return;"style"==e[g].name&&(e[g].value=a.dom.serializeStyle(a.dom.parseStyle(e[g].value),b))}d.start(b,e,f),c=!1}},end:function(a){c||d.end(a)}},new tinymce.html.Schema({})).parse(b),d.getContent()}function k(a,b,c){function d(a,b){var c,d,e,f;for(c in b)if(e=""+b[c],a.map[c])for(d=a.length;d--;)f=a[d],f.name==c&&(e?(a.map[c]=e,f.value=e):(delete a.map[c],a.splice(d,1)));else e&&(a.push({name:c,value:e}),a.map[c]=e)}var e,f=new tinymce.html.Writer,g=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"
 script,noscript",comment:function(a){f.comment(a)},cdata:function(a){f.cdata(a)},text:function(a,b){f.text(a,b)},start:function(a,h,i){switch(a){case"video":case"object":case"embed":case"img":case"iframe":d(h,{width:b.width,height:b.height})}if(c)switch(a){case"video":d(h,{poster:b.poster,src:""}),b.source2&&d(h,{src:""});break;case"iframe":d(h,{src:b.source1});break;case"source":if(g++,2>=g&&(d(h,{src:b["source"+g],type:b["source"+g+"mime"]}),!b["source"+g]))return;break;case"img":if(!b.poster)return;e=!0}f.start(a,h,i)},end:function(a){if("video"==a&&c)for(var h=1;2>=h;h++)if(b["source"+h]){var i=[];i.map={},h>g&&(d(i,{src:b["source"+h],type:b["source"+h+"mime"]}),f.start("source",i,!0))}if(b.poster&&"object"==a
 &&c&&!e){var j=[];j.map={},d(j,{src:b.poster,width:b.width,height:b.height}),f.start("img",j,!0)}f.end(a)}},new tinymce.html.Schema({})).parse(a),f.getContent()}var l=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowfullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowfullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1}],m=tinymce.Env.
 ie&&tinymce.Env.ie<=8?"onChange":"onInput";a.on("ResolveName",function(a){var b;1==a.target.nodeType&&(b=a.target.getAttribute("data-mce-object"))&&(a.name=b)}),a.on("preInit",function(){var b=a.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(a){b[a]=new RegExp("</"+a+"[^>]*>","gi")});var c=a.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(a){c[a]={}}),a.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(b,c){for(var e,f,g,h,i,j,k,l,m=b.length;m--;)if(f=b[m],f.parent&&("script"!=f.name||(l=d(f.attr("src"))))){for(g=new tinymce.html.Node("img",1),g.shortEnded=!0,l&&(l.width&&f.attr("width",l.width.toString()),l.height&&f.attr
 ("height",l.height.toString())),j=f.attributes,e=j.length;e--;)h=j[e].name,i=j[e].value,"width"!==h&&"height"!==h&&"style"!==h&&(("data"==h||"src"==h)&&(i=a.convertURL(i,h)),g.attr("data-mce-p-"+h,i));k=f.firstChild&&f.firstChild.value,k&&(g.attr("data-mce-html",escape(k)),g.firstChild=null),g.attr({width:f.attr("width")||"300",height:f.attr("height")||("audio"==c?"30":"150"),style:f.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":c,"class":"mce-object mce-object-"+c}),f.replace(g)}}),a.serializer.addAttributeFilter("data-mce-object",function(a,b){for(var c,d,e,f,g,h,i,k=a.length;k--;)if(c=a[k],c.parent){for(i=c.attr(b),d=new tinymce.html.Node(i,1),"audio"!=i&&"script"!=i&&d.attr({width:c.attr(&quot
 ;width"),height:c.attr("height")}),d.attr({style:c.attr("style")}),f=c.attributes,e=f.length;e--;){var l=f[e].name;0===l.indexOf("data-mce-p-")&&d.attr(l.substr(11),f[e].value)}"script"==i&&d.attr("type","text/javascript"),g=c.attr("data-mce-html"),g&&(h=new tinymce.html.Node("#text",3),h.raw=!0,h.value=j(unescape(g)),d.append(h)),c.replace(d)}})}),a.on("ObjectSelected",function(a){var b=a.target.getAttribute("data-mce-object");("audio"==b||"script"==b)&&a.preventDefault()}),a.on("objectResized",function(a){var b,c=a.target;c.getAttribute("data-mce-object")&&(b=c.getAttribute("data-mce-html"),b&&(b=unescape(b),c.setAttribute("data-mce-html",escape(k(b,{width:a.width,height:a.height})))))}),a.addButton("media",{tooltip:"Insert/edit video",onclick:e,stateS
 elector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),a.addMenuItem("media",{icon:"media",text:"Insert/edit video",onclick:e,context:"insert",prependToContext:!0}),a.addCommand("mceMedia",e),this.showDialog=e});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("media",function(e,t){function n(e){return e=e.toLowerCase(),-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var n=e.settings.media_scripts;if(n)for(var r=0;r<n.length;r++)if(-1!==t.indexOf(n[r].filter))return n[r]}function i(){function t(e){var t,n,o,a;t=r.find("#width")[0],n=r.find("#height")[0],o=t.value(),a=n.value(),r.find("#constrain")[0].checked()&&i&&c&&o&&a&&(e.control==t?(a=Math.round(o/i*a),isNaN(a)||n.value(a)):(o=Math.round(a/c*o),isNaN(o)||t.value
 (o))),i=o,c=a}function n(){u=s(this.value()),this.parent().parent().fromJSON(u)}var r,i,c,u,d=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onchange:function(e){tinymce.each(e.meta,function(e,t){r.find("#"+t).value(e)})}}];e.settings.media_alt_source!==!1&&d.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&d.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&d.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:t,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height&qu
 ot;,type:"textbox",maxLength:5,size:3,onchange:t,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),u=l(e.selection.getNode()),i=u.width,c=u.height;var f={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:o(),multiline:!0,label:"Source"};f[p]=n,r=e.windowManager.open({title:"Insert/edit video",data:u,bodyType:"tabpanel",body:[{title:"General",type:"form",onShowTab:function(){u=s(this.next().find("#embed").value()),this.fromJSON(u)},items:d},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(a(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},f]}],
 onSubmit:function(){var t,n,r,i;for(t=e.dom.select("img[data-mce-object]"),e.insertContent(a(this.toJSON())),n=e.dom.select("img[data-mce-object]"),r=0;r<t.length;r++)for(i=n.length-1;i>=0;i--)t[r]==n[i]&&n.splice(i,1);e.selection.select(n[0]),e.nodeChanged()}})}function o(){var t=e.selection.getNode();return t.getAttribute("data-mce-object")?e.selection.getContent():void 0}function a(i){var o="";if(!i.source1&&(tinymce.extend(i,s(i.embed)),!i.source1))return"";if(i.source2||(i.source2=""),i.poster||(i.poster=""),i.source1=e.convertURL(i.source1,"source"),i.source2=e.convertURL(i.source2,"source"),i.source1mime=n(i.source1),i.source2mime=n(i.source2),i.poster=e.convertURL(i.poster,"poster"),i.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(m,function(e){var t,n,r;if(t=e.regex.exec(i.source1)){for(r=e.url,n=0;t[n];n++)r=r
 .replace("$"+n,function(){return t[n]});i.source1=r,i.type=e.type,i.allowFullscreen=e.allowFullscreen,i.width=i.width||e.w,i.height=i.height||e.h}}),i.embed)o=u(i.embed,i,!0);else{var a=r(i.source1);if(a&&(i.type="script",i.width=a.width,i.height=a.height),i.width=i.width||300,i.height=i.height||150,tinymce.each(i,function(t,n){i[n]=e.dom.encode(t)}),"iframe"==i.type){var l=i.allowFullscreen?' allowFullscreen="1"':"";o+='<iframe src="'+i.source1+'" width="'+i.width+'" height="'+i.height+'"'+l+"></iframe>"}else"application/x-shockwave-flash"==i.source1mime?(o+='<object data="'+i.source1+'" width="'+i.width+'" height="'+i.height+'" type="application/x-shockwave-flash">',i.poster&&(o+='<img src="'+i.poster+'" width="'+i.width+'" height="'+i.height+'" />'),o+="</object>
 "):-1!=i.source1mime.indexOf("audio")?e.settings.audio_template_callback?o=e.settings.audio_template_callback(i):o+='<audio controls="controls" src="'+i.source1+'">'+(i.source2?'\n<source src="'+i.source2+'"'+(i.source2mime?' type="'+i.source2mime+'"':"")+" />\n":"")+"</audio>":"script"==i.type?o+='<script src="'+i.source1+'"></script>':o=e.settings.video_template_callback?e.settings.video_template_callback(i):'<video width="'+i.width+'" height="'+i.height+'"'+(i.poster?' poster="'+i.poster+'"':"")+' controls="controls">\n<source src="'+i.source1+'"'+(i.source1mime?' type="'+i.source1mime+'"':"")+" />\n"+(i.source2?'<source src="'+i.source2+'"'+(i.source2mime?' type="'+i.source2mime+'"':"")+" />\n&qu
 ot;:"")+"</video>"}return o}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,n){if(t.source1||"param"!=e||(t.source1=n.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(n.map,t)),"script"==e){var i=r(n.map.src);if(!i)return;t={type:"script",source1:n.map.src,width:i.width,height:i.height}}"source"==e&&(t.source1?t.source2||(t.source2=n.map.src):t.source1=n.map.src),"img"!=e||t.poster||(t.poster=n.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function l(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function c(t){if(e.settings.media_filter_html===!1)re
 turn t;var n,r=new tinymce.html.Writer;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){r.comment(e)},cdata:function(e){r.cdata(e)},text:function(e,t){r.text(e,t)},start:function(t,i,o){if(n=!0,"script"!=t&&"noscript"!=t){for(var a=0;a<i.length;a++){if(0===i[a].name.indexOf("on"))return;"style"==i[a].name&&(i[a].value=e.dom.serializeStyle(e.dom.parseStyle(i[a].value),t))}r.start(t,i,o),n=!1}},end:function(e){n||r.end(e)}},new tinymce.html.Schema({})).parse(t),r.getContent()}function u(e,t,n){function r(e,t){var n,r,i,o;for(n in t)if(i=""+t[n],e.map[n])for(r=e.length;r--;)o=e[r],o.name==n&&(i?(e.map[n]=i,o.value=i):(delete e.map[n],e.splice(r,1)));else i&&(e.push({name:n,value:i}),e.map[n]=i)}var i,o=new tinymce.html.Writer,a=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"
 script,noscript",comment:function(e){o.comment(e)},cdata:function(e){o.cdata(e)},text:function(e,t){o.text(e,t)},start:function(e,s,l){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(n)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(a++,2>=a&&(r(s,{src:t["source"+a],type:t["source"+a+"mime"]}),!t["source"+a]))return;break;case"img":if(!t.poster)return;i=!0}o.start(e,s,l)},end:function(e){if("video"==e&&n)for(var s=1;2>=s;s++)if(t["source"+s]){var l=[];l.map={},s>a&&(r(l,{src:t["source"+s],type:t["source"+s+"mime"]}),o.start("source",l,!0))}if(t.poster&&"object"==e
 &&n&&!i){var c=[];c.map={},r(c,{src:t.poster,width:t.width,height:t.height}),o.start("img",c,!0)}o.end(e)}},new tinymce.html.Schema({})).parse(e),o.getContent()}function d(t,n){var r,i,o,a,s;for(o=t.attributes,a=o.length;a--;)r=o[a].name,i=o[a].value,"width"!==r&&"height"!==r&&"style"!==r&&(("data"==r||"src"==r)&&(i=e.convertURL(i,r)),n.attr("data-mce-p-"+r,i));s=t.firstChild&&t.firstChild.value,s&&(n.attr("data-mce-html",escape(s)),n.firstChild=null)}function f(e){var t,n=e.name;return t=new tinymce.html.Node("img",1),t.shortEnded=!0,d(e,t),t.attr({width:e.attr("width")||"300",height:e.attr("height")||("audio"==n?"30":"150"),style:e.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n})
 ,t}function h(e){var t,n,r,i=e.name;return t=new tinymce.html.Node("span",1),t.attr({contentEditable:"false",style:e.attr("style"),"data-mce-object":i,"class":"mce-preview-object mce-object-"+i}),d(e,t),n=new tinymce.html.Node(i,1),n.attr({src:e.attr("src"),allowfullscreen:e.attr("allowfullscreen"),width:e.attr("width")||"300",height:e.attr("height")||("audio"==i?"30":"150"),frameborder:"0"}),r=new tinymce.html.Node("span",1),r.attr("class","mce-shim"),t.append(n),t.append(r),t}var m=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\-_]+)/i,type:"ifr
 ame",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowfullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&amp;byline=0",allowfullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1}],p=tinymce.Env.ie&&tinymce.Env.ie<=8?"onChange":"onInput";e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),funct
 ion(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var n=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){n[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t){for(var n,i,o,a=t.length;a--;)n=t[a],n.parent&&(n.parent.attr("data-mce-object")||("script"!=n.name||(o=r(n.attr("src"))))&&(o&&(o.width&&n.attr("width",o.width.toString()),o.height&&n.attr("height",o.height.toString())),i="iframe"==n.name&&e.settings.media_live_embeds!==!1&&tinymce.Env.ceFalse?h(n):f(n),n.replace(i)))}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var n,r,i,o,a,s,l,u,d=e.length;d--;)if(n=e[d],n.parent){for(l=n.attr(t),r=new tinymce.html.Node(l,1),"audio"!=l&&"script"!=l&
 amp;&(u=n.attr("class"),u&&-1!==u.indexOf("mce-preview-object")?r.attr({width:n.firstChild.attr("width"),height:n.firstChild.attr("height")}):r.attr({width:n.attr("width"),height:n.attr("height")})),r.attr({style:n.attr("style")}),o=n.attributes,i=o.length;i--;){var f=o[i].name;0===f.indexOf("data-mce-p-")&&r.attr(f.substr(11),o[i].value)}"script"==l&&r.attr("type","text/javascript"),a=n.attr("data-mce-html"),a&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=c(unescape(a)),r.append(s)),n.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,n=e.target;n.getAttribute("data-mce-object")&&(t=n.getAttribute("da
 ta-mce-html"),t&&(t=unescape(t),n.setAttribute("data-mce-html",escape(u(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:i,stateSelector:["img[data-mce-object]","span[data-mce-object]"]}),e.addMenuItem("media",{icon:"media",text:"Insert/edit video",onclick:i,context:"insert",prependToContext:!0}),e.addCommand("mceMedia",i),this.showDialog=i});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginspastepluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -216,6 +216,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g, // Remove anything but the contents within the BODY element
</span><span class="cx" style="display: block; padding: 0 10px">                        /<!--StartFragment-->|<!--EndFragment-->/g, // Inner fragments (tables from excel on mac)
</span><span class="cx" style="display: block; padding: 0 10px">                        [/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g, trimSpaces],
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        /<br class="Apple-interchange-newline">/g,
</ins><span class="cx" style="display: block; padding: 0 10px">                         /<br>$/i // Trailing BR elements
</span><span class="cx" style="display: block; padding: 0 10px">                ]);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -264,8 +265,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/RangeUtils",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/VK",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/pasteplugin/Utils"
-], function(Env, RangeUtils, VK, Utils) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/pasteplugin/Utils",
+       "tinymce/util/Delay"
+], function(Env, RangeUtils, VK, Utils, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         return function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0, draggingInternally = false;
</span><span class="cx" style="display: block; padding: 0 10px">                var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -724,6 +726,65 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode) {
+                               var content;
+
+                               // Grab HTML from Clipboard API or paste bin as a fallback
+                               if (hasContentType(clipboardContent, 'text/html')) {
+                                       content = clipboardContent['text/html'];
+                               } else {
+                                       content = getPasteBinHtml();
+
+                                       // If paste bin is empty try using plain text mode
+                                       // since that is better than nothing right
+                                       if (content == pasteBinDefaultContent) {
+                                               plainTextMode = true;
+                                       }
+                               }
+
+                               content = Utils.trimHtml(content);
+
+                               // WebKit has a nice bug where it clones the paste bin if you paste from for example notepad
+                               // so we need to force plain text mode in this case
+                               if (pasteBinElm && pasteBinElm.firstChild && pasteBinElm.firstChild.id === 'mcepastebin') {
+                                       plainTextMode = true;
+                               }
+
+                               removePasteBin();
+
+                               // If we got nothing from clipboard API and pastebin then we could try the last resort: plain/text
+                               if (!content.length) {
+                                       plainTextMode = true;
+                               }
+
+                               // Grab plain text from Clipboard API or convert existing HTML to plain text
+                               if (plainTextMode) {
+                                       // Use plain text contents from Clipboard API unless the HTML contains paragraphs then
+                                       // we should convert the HTML to plain text since works better when pasting HTML/Word contents as plain text
+                                       if (hasContentType(clipboardContent, 'text/plain') && content.indexOf('</p>') == -1) {
+                                               content = clipboardContent['text/plain'];
+                                       } else {
+                                               content = Utils.innerText(content);
+                                       }
+                               }
+
+                               // If the content is the paste bin default HTML then it was
+                               // impossible to get the cliboard data out.
+                               if (content == pasteBinDefaultContent) {
+                                       if (!isKeyBoardPaste) {
+                                               editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
+                                       }
+
+                                       return;
+                               }
+
+                               if (plainTextMode) {
+                                       pasteText(content);
+                               } else {
+                                       pasteHtml(content);
+                               }
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         editor.on('paste', function(e) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // Getting content from the Clipboard can take some time
</span><span class="cx" style="display: block; padding: 0 10px">                                var clipboardTimer = new Date().getTime();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -762,64 +823,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        clipboardContent["text/html"] = getPasteBinHtml();
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                setTimeout(function() {
-                                       var content;
-
-                                       // Grab HTML from Clipboard API or paste bin as a fallback
-                                       if (hasContentType(clipboardContent, 'text/html')) {
-                                               content = clipboardContent['text/html'];
-                                       } else {
-                                               content = getPasteBinHtml();
-
-                                               // If paste bin is empty try using plain text mode
-                                               // since that is better than nothing right
-                                               if (content == pasteBinDefaultContent) {
-                                                       plainTextMode = true;
-                                               }
-                                       }
-
-                                       content = Utils.trimHtml(content);
-
-                                       // WebKit has a nice bug where it clones the paste bin if you paste from for example notepad
-                                       // so we need to force plain text mode in this case
-                                       if (pasteBinElm && pasteBinElm.firstChild && pasteBinElm.firstChild.id === 'mcepastebin') {
-                                               plainTextMode = true;
-                                       }
-
-                                       removePasteBin();
-
-                                       // If we got nothing from clipboard API and pastebin then we could try the last resort: plain/text
-                                       if (!content.length) {
-                                               plainTextMode = true;
-                                       }
-
-                                       // Grab plain text from Clipboard API or convert existing HTML to plain text
-                                       if (plainTextMode) {
-                                               // Use plain text contents from Clipboard API unless the HTML contains paragraphs then
-                                               // we should convert the HTML to plain text since works better when pasting HTML/Word contents as plain text
-                                               if (hasContentType(clipboardContent, 'text/plain') && content.indexOf('</p>') == -1) {
-                                                       content = clipboardContent['text/plain'];
-                                               } else {
-                                                       content = Utils.innerText(content);
-                                               }
-                                       }
-
-                                       // If the content is the paste bin default HTML then it was
-                                       // impossible to get the cliboard data out.
-                                       if (content == pasteBinDefaultContent) {
-                                               if (!isKeyBoardPaste) {
-                                                       editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
-                                               }
-
-                                               return;
-                                       }
-
-                                       if (plainTextMode) {
-                                               pasteText(content);
-                                       } else {
-                                               pasteHtml(content);
-                                       }
-                               }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         // If clipboard API has HTML then use that directly
+                               if (hasContentType(clipboardContent, 'text/html')) {
+                                       e.preventDefault();
+                                       insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode);
+                               } else {
+                                       Delay.setEditorTimeout(editor, function() {
+                                               insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode);
+                                       }, 0);
+                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.on('dragstart dragend', function(e) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1623,10 +1635,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                this.active(true);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!userIsInformed) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        editor.windowManager.alert(
-                                               'Paste is now in plain text mode. Contents will now ' +
-                                               'be pasted as plain text until you toggle this option off.'
-                                       );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 var message = editor.translate('Paste is now in plain text mode. Contents will now ' +
+                                               'be pasted as plain text until you toggle this option off.');
+                                       editor.notificationManager.open({
+                                               text: message,
+                                               type: 'info'
+                                       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        userIsInformed = true;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginspastepluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-!function(a,b){"use strict";function c(a,b){for(var c,d=[],f=0;f<a.length;++f){if(c=g[a[f]]||e(a[f]),!c)throw"module definition dependecy not found: "+a[f];d.push(c)}b.apply(null,d)}function d(a,d,e){if("string"!=typeof a)throw"invalid module definition, module id must be defined and be a string";if(d===b)throw"invalid module definition, dependencies must be specified";if(e===b)throw"invalid module definition, definition function must be specified";c(d,function(){g[a]=e.apply(null,arguments)})}function e(b){for(var c=a,d=b.split(/[.\/]/),e=0;e<d.length;++e){if(!c[d[e]])return;c=c[d[e]]}return c}function f(c){var d,e,f,h,i;for(d=0;d<c.length;d++){e=a,f=c[d],h=f.split(/[.\/]/);for(var j=0;j<h.length-1;++j)e[h[j]]===b&&(e[h[j]]={}),e=e[h[j]];e[h[h.length-1]]=g[f]}if(a.AMDLC_TESTS){i=a.privateModules||{};for(f in
  g)i[f]=g[f];for(d=0;d<c.length;d++)delete i[c[d]];a.privateModules=i}}var g={};d("tinymce/pasteplugin/Utils",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema"],function(a,b,c){function d(b,c){return a.each(c,function(a){b=a.constructor==RegExp?b.replace(a,""):b.replace(a[0],a[1])}),b}function e(e){function f(a){var b=a.name,c=a;if("br"===b)return void(i+="\n");if(j[b]&&(i+=" "),k[b])return void(i+=" ");if(3==a.type&&(i+=a.value),!a.shortEnded&&(a=a.firstChild))do f(a);while(a=a.next);l[b]&&c.next&&(i+="\n","p"==b&&(i+="\n"))}var g=new c,h=new b({},g),i="",j=g.getShortEndedElements(),k=a.makeMap("script noscript style textarea video audio iframe object"," "),l=g.getBlockElements();return e=d(e,[/<!\[[^\]]+\]>/g]),f(h.parse(e)),i}function f(a){function b(a,b,c){
 return b||c?"\xa0":" "}return a=d(a,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,b],/<br>$/i])}return{filter:d,innerText:e,trimHtml:f}}),d("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils"],function(a,b,c,d){return function(e){function f(a){var b,c=e.dom;if(b=e.fire("BeforePastePreProcess",{content:a}),b=e.fire("PastePreProcess",b),a=b.content,!b.isDefaultPrevented()){if(e.hasEventListeners("PastePostProcess")&&!b.isDefaultPrevented()){var d=c.add(e.getBody(),"div",{style:"display:none"},a);b=e.fire("PastePostProcess",{node:d}),c.remove(d),a=b.node.innerHTML}b.isDefaultPrevented()||e.insertContent(a,{merge:e.sett
 ings.paste_merge_formats!==!1,data:{paste:!0}})}}function g(a){a=e.dom.encode(a).replace(/\r\n/g,"\n");var b,c=e.dom.getParent(e.selection.getStart(),e.dom.isBlock),g=e.settings.forced_root_block;g&&(b=e.dom.createHTML(g,e.settings.forced_root_block_attrs),b=b.substr(0,b.length-3)+">"),c&&/^(PRE|DIV)$/.test(c.nodeName)||!g?a=d.filter(a,[[/\n/g,"<br>"]]):(a=d.filter(a,[[/\n\n/g,"</p>"+b],[/^(.*<\/p>)(<p>)$/,b+"$1"],[/\n/g,"<br />"]]),-1!=a.indexOf("<p>")&&(a=b+a)),f(a)}function h(){function b(a){var b,c,e,f=a.startContainer;if(b=a.getClientRects(),b.length)return b[0];if(a.collapsed&&1==f.nodeType){for(e=f.childNodes[v.startOffset];e&&3==e.nodeType&&!e.data.length;)e=e.nextSibling;if(e)return"BR"==e.tagName&&(c=d.doc.createTextNode("\ufeff"),e.parentNode.insertBefore(c,e),a=d.createRng(),a.setStartBefo
 re(c),a.setEndAfter(c),b=a.getClientRects(),d.remove(c)),b.length?b[0]:void 0}}var c,d=e.dom,f=e.getBody(),g=e.dom.getViewPort(e.getWin()),h=g.y,i=20;if(v=e.selection.getRng(),e.inline&&(c=e.selection.getScrollContainer(),c&&c.scrollTop>0&&(h=c.scrollTop)),v.getClientRects){var j=b(v);if(j)i=h+(j.top-d.getPos(f).y);else{i=h;var k=v.startContainer;k&&(3==k.nodeType&&k.parentNode!=f&&(k=k.parentNode),1==k.nodeType&&(i=d.getPos(k,c||f).y))}}u=d.add(e.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+i+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},A),(a.ie||a.gecko)&&d.setStyle(u,"left","rtl"==d.getStyle(f,"direction",!0)?65535:-65535),d.bind(u,"beforedeactivate focusin focusout",function(a){a.stopPropagation()}),u.focus(),e.selection.select(u,!0)}
 function i(){if(u){for(var a;a=e.dom.get("mcepastebin");)e.dom.remove(a),e.dom.unbind(a);v&&e.selection.setRng(v)}u=v=null}function j(){var a,b,c,d,f="";for(a=e.dom.select("div[id=mcepastebin]"),b=0;b<a.length;b++)c=a[b],c.firstChild&&"mcepastebin"==c.firstChild.id&&(c=c.firstChild),d=c.innerHTML,f!=A&&(f+=d);return f}function k(a){var b,c,d,e;for(d=[25942,29554,28521,14958],b=0;b<d.length;b++)if(a.charCodeAt(b)!=d[b])return a;for(c="",b=0;b<a.length;b++)e=a.charCodeAt(b),c+=String.fromCharCode(255&e),c+=String.fromCharCode((65280&e)>>8);return decodeURIComponent(escape(c))}function l(a){var b,c,d;return c="<!--StartFragment-->",b=a.indexOf(c),-1!==b&&(a=a.substr(b+c.length)),d="<!--EndFragment-->",b=a.indexOf(d),-1!==b&&(a=a.substr(0,b)),a}function m(a){var b={};if(a){if(a.getData){var c=a.getData("Text");c&&c.len
 gth>0&&-1==c.indexOf(B)&&(b["text/plain"]=c)}if(a.types)for(var d=0;d<a.types.length;d++){var e=a.types[d],f=a.getData(e);"text/html"==e&&(f=l(k(f))),b[e]=f}}return b}function n(a){return m(a.clipboardData||e.getDoc().dataTransfer)}function o(a,b){function c(c){function d(a){b&&(e.selection.setRng(b),b=null),f('<img src="'+a.result+'">')}var g,h,i,j=!1;if(c)for(g=0;g<c.length;g++)h=c[g],/^image\/(jpeg|png|gif|bmp)$/.test(h.type)&&(i=new FileReader,i.onload=d.bind(null,i),i.readAsDataURL(h.getAsFile?h.getAsFile():h),a.preventDefault(),j=!0);return j}var d=a.clipboardData||a.dataTransfer;return e.settings.paste_data_images&&d?c(d.items)||c(d.files):void 0}function p(a){var b=a.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&b&&b.items&&0===b.items.length}function q(a){return b.getCaretRangeFromPoint(a.clientX,a.clientY,e.getDoc())}function r(a,
 b){return b in a&&a[b].length>0}function s(a){return c.metaKeyPressed(a)&&86==a.keyCode||a.shiftKey&&45==a.keyCode}function t(){e.on("keydown",function(b){function c(a){s(a)&&!a.isDefaultPrevented()&&i()}if(s(b)&&!b.isDefaultPrevented()){if(w=b.shiftKey&&86==b.keyCode,w&&a.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(b.stopImmediatePropagation(),y=(new Date).getTime(),a.ie&&w)return b.preventDefault(),void e.fire("paste",{ieFake:!0});i(),h(),e.once("keyup",c),e.once("paste",function(){e.off("keyup",c)})}}),e.on("paste",function(b){var c=(new Date).getTime(),k=n(b),l=(new Date).getTime()-c,m=(new Date).getTime()-y-l<1e3,q="text"==x.pasteFormat||w;return w=!1,b.isDefaultPrevented()||p(b)?void i():o(b)?void i():(m||b.preventDefault(),!a.ie||m&&!b.ieFake||(h(),e.dom.bind(u,"paste",function
 (a){a.stopPropagation()}),e.getDoc().execCommand("Paste",!1,null),k["text/html"]=j()),void setTimeout(function(){var a;return r(k,"text/html")?a=k["text/html"]:(a=j(),a==A&&(q=!0)),a=d.trimHtml(a),u&&u.firstChild&&"mcepastebin"===u.firstChild.id&&(q=!0),i(),a.length||(q=!0),q&&(a=r(k,"text/plain")&&-1==a.indexOf("</p>")?k["text/plain"]:d.innerText(a)),a==A?void(m||e.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(q?g(a):f(a))},0))}),e.on("dragstart dragend",function(a){z="dragstart"==a.type}),e.on("drop",function(a){var b=q(a);if(!a.isDefaultPrevented()&&!z&&!o(a,b)&&b&&e.settings.paste_filter_drop!==!1){var c=m(a.dataTransfer),h=c["mce-internal"]||c["text/html"]||c["text/plain"];h&&(a.preventDefault(
 ),e.undoManager.transact(function(){c["mce-internal"]&&e.execCommand("Delete"),e.selection.setRng(b),h=d.trimHtml(h),c["text/html"]?f(h):g(h)}))}}),e.on("dragover dragend",function(a){e.settings.paste_data_images&&a.preventDefault()})}var u,v,w,x=this,y=0,z=!1,A="%MCEPASTEBIN%",B="data:text/mce-internal,";x.pasteHtml=f,x.pasteText=g,e.on("preInit",function(){t(),e.parser.addNodeFilter("img",function(b,c,d){function f(a){return a.data&&a.data.paste===!0}function g(b){b.attr("data-mce-object")||k===a.transparentSrc||b.remove()}function h(a){return 0===a.indexOf("webkit-fake-url")}function i(a){return 0===a.indexOf("data:")}if(!e.settings.paste_data_images&&f(d))for(var j=b.length;j--;){var k=b[j].attributes.map.src;k&&(h(k)?g(b[j]):!e.settings.allow_html_data_urls&&i(k)&&g(b[j]))}})})}}),d("tinymce/pasteplugin/WordFi
 lter",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema","tinymce/html/Serializer","tinymce/html/Node","tinymce/pasteplugin/Utils"],function(a,b,c,d,e,f){function g(a){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(a)||/class="OutlineElement/.test(a)||/id="?docs\-internal\-guid\-/.test(a)}function h(b){var c,d;return d=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],b=b.replace(/^[\u00a0 ]+/,""),a.each(d,function(a){return a.test(b)?(c=!0,!1):void 0}),c}function i(a){return/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(a)}function j(j){var k=j.setti
 ngs;j.on("BeforePastePreProcess",function(l){function m(a){function b(a){var c="";if(3===a.type)return a.value;if(a=a.firstChild)do c+=b(a);while(a=a.next);return c}function c(a,b){if(3===a.type&&b.test(a.value))return a.value=a.value.replace(b,""),!1;if(a=a.firstChild)do if(!c(a,b))return!1;while(a=a.next);return!0}function d(a){if(a._listIgnore)return void a.remove();if(a=a.firstChild)do d(a);while(a=a.next)}function f(a,b,f){var h=a._listLevel||k;h!=k&&(k>h?g&&(g=g.parent.parent):(j=g,g=null)),g&&g.name==b?g.append(a):(j=j||g,g=new e(b,1),f>1&&g.attr("start",""+f),a.wrap(g)),a.name="li",h>k&&j&&j.lastChild.append(g),k=h,d(a),c(a,/^\u00a0+/),c(a,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),c(a,/^\u00a0+/)}for(var g,j,k=1,l=[],m=a.firstChild;"undefined"!=typeof m&&null!==m;)if(l.push(m),m=m.walk(),null!==m)for(;"undefined"!=typeof m&a
 mp;&m.parent!==a;)m=m.walk();for(var n=0;n<l.length;n++)if(a=l[n],"p"==a.name&&a.firstChild){var o=b(a);if(i(o)){f(a,"ul");continue}if(h(o)){var p=/([0-9]+)\./.exec(o),q=1;p&&(q=parseInt(p[1],10)),f(a,"ol",q);continue}if(a._listLevel){f(a,"ul",1);continue}g=null}else j=g,g=null}function n(b,c){var d,f={},g=j.dom.parseStyle(c);return a.each(g,function(a,e){switch(e){case"mso-list":d=/\w+ \w+([0-9]+)/i.exec(c),d&&(b._listLevel=parseInt(d[1],10)),/Ignore/i.test(a)&&b.firstChild&&(b._listIgnore=!0,b.firstChild._listIgnore=!0);break;case"horiz-align":e="text-align";break;case"vert-align":e="vertical-align";break;case"font-color":case"mso-foreground":e="color";break;case"mso-background":case"mso-highlight":e="background";break;case"font-weight":case"font-style":return void(&q
 uot;normal"!=a&&(f[e]=a));case"mso-element":if(/^(comment|comment-list)$/i.test(a))return void b.remove()}return 0===e.indexOf("mso-comment")?void b.remove():void(0!==e.indexOf("mso-")&&("all"==o||p&&p[e])&&(f[e]=a))}),/(bold)/i.test(f["font-weight"])&&(delete f["font-weight"],b.wrap(new e("b",1))),/(italic)/i.test(f["font-style"])&&(delete f["font-style"],b.wrap(new e("i",1))),f=j.dom.serializeStyle(f,b.name),f?f:null}var o,p,q=l.content;if(q=q.replace(/<b[^>]+id="?docs-internal-[^>]*>/gi,""),q=q.replace(/<br class="?Apple-interchange-newline"?>/gi,""),o=k.paste_retain_style_properties,o&&(p=a.makeMap(o.split(/[, ]/))),k.paste_enable_default_filters!==!1&&g(l.content)){l.wordContent=!0,q=f.filter(q,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/scri
 pt(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(a,b){return b.length>0?b.replace(/./," ").slice(Math.floor(b.length/2)).split("").join("\xa0"):""}]]);var r=k.paste_word_valid_elements;r||(r="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var s=new c({valid_elements:r,valid_children:"-li[p]"});a.each(s.elements,function(a){a.attributes["class"]||(a.attributes["class"]={},a.attributesOrder.push("class")),a.attributes.style||(a.attributes.style={},a.attributesOrder.push("style"))});var t=new b({},s);t
 .addAttributeFilter("style",function(a){for(var b,c=a.length;c--;)b=a[c],b.attr("style",n(b,b.attr("style"))),"span"==b.name&&b.parent&&!b.attributes.length&&b.unwrap()}),t.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(c)&&b.remove(),b.attr("class",null)}),t.addNodeFilter("del",function(a){for(var b=a.length;b--;)a[b].remove()}),t.addNodeFilter("a",function(a){for(var b,c,d,e=a.length;e--;)if(b=a[e],c=b.attr("href"),d=b.attr("name"),c&&-1!=c.indexOf("#_msocom_"))b.remove();else if(c&&0===c.indexOf("file://")&&(c=c.split("#")[1],c&&(c="#"+c)),c||d){if(d&&!/^_?(?:toc|edn|ftn)/i.test(d)){b.unwrap();continue}b.attr({href:c,name:d})}else b.unwrap()});var u=t.parse(q);k.pa
 ste_convert_word_fake_lists!==!1&&m(u),l.content=new d({validate:k.validate},s).serialize(u)}})}return j.isWordContent=g,j}),d("tinymce/pasteplugin/Quirks",["tinymce/Env","tinymce/util/Tools","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Utils"],function(a,b,c,d){return function(e){function f(a){e.on("BeforePastePreProcess",function(b){b.content=a(b.content)})}function g(a){if(!c.isWordContent(a))return a;var f=[];b.each(e.schema.getBlockElements(),function(a,b){f.push(b)});var g=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+f.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return a=d.filter(a,[[g,"$1"]]),a=d.filter(a,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function h(a){if(c.isWordContent(a))return a;v
 ar b=e.settings.paste_webkit_styles;if(e.settings.paste_remove_styles_if_webkit===!1||"all"==b)return a;if(b&&(b=b.split(/[, ]/)),b){var d=e.dom,f=e.selection.getNode();a=a.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(a,c,e,g){var h=d.parseStyle(e,"span"),i={};if("none"===b)return c+g;for(var j=0;j<b.length;j++){var k=h[b[j]],l=d.getStyle(f,b[j],!0);/color/.test(b[j])&&(k=d.toHex(k),l=d.toHex(l)),l!=k&&(i[b[j]]=k)}return i=d.serializeStyle(i,"span"),i?c+' style="'+i+'"'+g:c+g})}else a=a.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return a=a.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(a,b,c,d){return b+' style="'+c+'"'+d})}a.webkit&&f(h),a.ie&&f(g)}}),d("tinymce/pasteplugin/Plugin",["tinymce/PluginManager","tinymce/pasteplugin/Clipb
 oard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks"],function(a,b,c,d){var e;a.add("paste",function(a){function f(){"text"==g.pasteFormat?(this.active(!1),g.pasteFormat="html"):(g.pasteFormat="text",this.active(!0),e||(a.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),e=!0))}var g,h=this,i=a.settings;h.clipboard=g=new b(a),h.quirks=new d(a),h.wordFilter=new c(a),a.settings.paste_as_text&&(h.clipboard.pasteFormat="text"),i.paste_preprocess&&a.on("PastePreProcess",function(a){i.paste_preprocess.call(h,h,a)}),i.paste_postprocess&&a.on("PastePostProcess",function(a){i.paste_postprocess.call(h,h,a)}),a.addCommand("mceInsertClipboardContent",function(a,b){b.content&&h.clipboard.pasteHtml(b.content),b.text&&h.clipboard.pasteText(b.text)}),
 a.paste_block_drop&&a.on("dragend dragover draggesture dragdrop drop drag",function(a){a.preventDefault(),a.stopPropagation()}),a.settings.paste_data_images||a.on("drop",function(a){var b=a.dataTransfer;b&&b.files&&b.files.length>0&&a.preventDefault()}),a.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:f,active:"text"==h.clipboard.pasteFormat}),a.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:g.pasteFormat,onclick:f})})}),f(["tinymce/pasteplugin/Utils"])}(this);
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+!function(e,t){"use strict";function n(e,t){for(var n,r=[],o=0;o<e.length;++o){if(n=a[e[o]]||i(e[o]),!n)throw"module definition dependecy not found: "+e[o];r.push(n)}t.apply(null,r)}function r(e,r,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(r===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(r,function(){a[e]=i.apply(null,arguments)})}function i(t){for(var n=e,r=t.split(/[.\/]/),i=0;i<r.length;++i){if(!n[r[i]])return;n=n[r[i]]}return n}function o(n){var r,i,o,s,l;for(r=0;r<n.length;r++){i=e,o=n[r],s=o.split(/[.\/]/);for(var c=0;c<s.length-1;++c)i[s[c]]===t&&(i[s[c]]={}),i=i[s[c]];i[s[s.length-1]]=a[o]}if(e.AMDLC_TESTS){l=e.privateModules||{};for(o in
  a)l[o]=a[o];for(r=0;r<n.length;r++)delete l[n[r]];e.privateModules=l}}var a={};r("tinymce/pasteplugin/Utils",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema"],function(e,t,n){function r(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function i(i){function o(e){var t=e.name,n=e;if("br"===t)return void(l+="\n");if(c[t]&&(l+=" "),u[t])return void(l+=" ");if(3==e.type&&(l+=e.value),!e.shortEnded&&(e=e.firstChild))do o(e);while(e=e.next);d[t]&&n.next&&(l+="\n","p"==t&&(l+="\n"))}var a=new n,s=new t({},a),l="",c=a.getShortEndedElements(),u=e.makeMap("script noscript style textarea video audio iframe object"," "),d=a.getBlockElements();return i=r(i,[/<!\[[^\]]+\]>/g]),o(s.parse(i)),l}function o(e){function t(e,t,n){
 return t||n?"\xa0":" "}return e=r(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br class="Apple-interchange-newline">/g,/<br>$/i])}return{filter:r,innerText:i,trimHtml:o}}),r("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils","tinymce/util/Delay"],function(e,t,n,r,i){return function(o){function a(e){var t,n=o.dom;if(t=o.fire("BeforePastePreProcess",{content:e}),t=o.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(o.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(o.getBody(),"div",{style:"display:none"},e);t=o.fire("PastePostProcess",{node
 :r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||o.insertContent(e,{merge:o.settings.paste_merge_formats!==!1,data:{paste:!0}})}}function s(e){e=o.dom.encode(e).replace(/\r\n/g,"\n");var t,n=o.dom.getParent(o.selection.getStart(),o.dom.isBlock),i=o.settings.forced_root_block;i&&(t=o.dom.createHTML(i,o.settings.forced_root_block_attrs),t=t.substr(0,t.length-3)+">"),n&&/^(PRE|DIV)$/.test(n.nodeName)||!i?e=r.filter(e,[[/\n/g,"<br>"]]):(e=r.filter(e,[[/\n\n/g,"</p>"+t],[/^(.*<\/p>)(<p>)$/,t+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=t+e)),a(e)}function l(){function t(e){var t,n,i,o=e.startContainer;if(t=e.getClientRects(),t.length)return t[0];if(e.collapsed&&1==o.nodeType){for(i=o.childNodes[w.startOffset];i&&3==i.nodeType&&!i.data.length;)i=i.nextSibling;if(i)return"BR"==i.tagName&&(n=r.doc.creat
 eTextNode("\ufeff"),i.parentNode.insertBefore(n,i),e=r.createRng(),e.setStartBefore(n),e.setEndAfter(n),t=e.getClientRects(),r.remove(n)),t.length?t[0]:void 0}}var n,r=o.dom,i=o.getBody(),a=o.dom.getViewPort(o.getWin()),s=a.y,l=20;if(w=o.selection.getRng(),o.inline&&(n=o.selection.getScrollContainer(),n&&n.scrollTop>0&&(s=n.scrollTop)),w.getClientRects){var c=t(w);if(c)l=s+(c.top-r.getPos(i).y);else{l=s;var u=w.startContainer;u&&(3==u.nodeType&&u.parentNode!=i&&(u=u.parentNode),1==u.nodeType&&(l=r.getPos(u,n||i).y))}}C=r.add(o.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+l+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},k),(e.ie||e.gecko)&&r.setStyle(C,"left","rtl"==r.getStyle(i,"direction",!0)?65535:-65535),r.bind(C,"beforedeactivate f
 ocusin focusout",function(e){e.stopPropagation()}),C.focus(),o.selection.select(C,!0)}function c(){if(C){for(var e;e=o.dom.get("mcepastebin");)o.dom.remove(e),o.dom.unbind(e);w&&o.selection.setRng(w)}C=w=null}function u(){var e,t,n,r,i="";for(e=o.dom.select("div[id=mcepastebin]"),t=0;t<e.length;t++)n=e[t],n.firstChild&&"mcepastebin"==n.firstChild.id&&(n=n.firstChild),r=n.innerHTML,i!=k&&(i+=r);return i}function d(e){var t,n,r,i;for(r=[25942,29554,28521,14958],t=0;t<r.length;t++)if(e.charCodeAt(t)!=r[t])return e;for(n="",t=0;t<e.length;t++)i=e.charCodeAt(t),n+=String.fromCharCode(255&i),n+=String.fromCharCode((65280&i)>>8);return decodeURIComponent(escape(n))}function f(e){var t,n,r;return n="<!--StartFragment-->",t=e.indexOf(n),-1!==t&&(e=e.substr(t+n.length)),r="<!--EndFragment-->",t=e.indexOf(r),-1!==t&&(e=e.substr(0,t)),e}fu
 nction h(e){var t={};if(e){if(e.getData){var n=e.getData("Text");n&&n.length>0&&-1==n.indexOf(T)&&(t["text/plain"]=n)}if(e.types)for(var r=0;r<e.types.length;r++){var i=e.types[r],o=e.getData(i);"text/html"==i&&(o=f(d(o))),t[i]=o}}return t}function m(e){return h(e.clipboardData||o.getDoc().dataTransfer)}function p(e,t){function n(n){function r(e){t&&(o.selection.setRng(t),t=null),a('<img src="'+e.result+'">')}var i,s,l,c=!1;if(n)for(i=0;i<n.length;i++)s=n[i],/^image\/(jpeg|png|gif|bmp)$/.test(s.type)&&(l=new FileReader,l.onload=r.bind(null,l),l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),c=!0);return c}var r=e.clipboardData||e.dataTransfer;return o.settings.paste_data_images&&r?n(r.items)||n(r.files):void 0}function g(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}
 function v(e){return t.getCaretRangeFromPoint(e.clientX,e.clientY,o.getDoc())}function y(e,t){return t in e&&e[t].length>0}function b(e){return n.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function x(){function t(e,t,n){var i;return y(e,"text/html")?i=e["text/html"]:(i=u(),i==k&&(n=!0)),i=r.trimHtml(i),C&&C.firstChild&&"mcepastebin"===C.firstChild.id&&(n=!0),c(),i.length||(n=!0),n&&(i=y(e,"text/plain")&&-1==i.indexOf("</p>")?e["text/plain"]:r.innerText(i)),i==k?void(t||o.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(n?s(i):a(i))}o.on("keydown",function(t){function n(e){b(e)&&!e.isDefaultPrevented()&&c()}if(b(t)&&!t.isDefaultPrevented()){if(N=t.shiftKey&&86==t.keyCode,N&&e.webkit&&-1!=navigator.userAgent.indexOf(&quot
 ;Version/"))return;if(t.stopImmediatePropagation(),_=(new Date).getTime(),e.ie&&N)return t.preventDefault(),void o.fire("paste",{ieFake:!0});c(),l(),o.once("keyup",n),o.once("paste",function(){o.off("keyup",n)})}}),o.on("paste",function(n){var r=(new Date).getTime(),a=m(n),s=(new Date).getTime()-r,d=(new Date).getTime()-_-s<1e3,f="text"==E.pasteFormat||N;return N=!1,n.isDefaultPrevented()||g(n)?void c():p(n)?void c():(d||n.preventDefault(),!e.ie||d&&!n.ieFake||(l(),o.dom.bind(C,"paste",function(e){e.stopPropagation()}),o.getDoc().execCommand("Paste",!1,null),a["text/html"]=u()),void(y(a,"text/html")?(n.preventDefault(),t(a,d,f)):i.setEditorTimeout(o,function(){t(a,d,f)},0)))}),o.on("dragstart dragend",function(e){S="dragstart"==e.type}),o.on("drop",function(e){var t=v(e);if(!e.isDefaultPrevented()&&!S&&!p(e,t)&&
 amp;t&&o.settings.paste_filter_drop!==!1){var n=h(e.dataTransfer),i=n["mce-internal"]||n["text/html"]||n["text/plain"];i&&(e.preventDefault(),o.undoManager.transact(function(){n["mce-internal"]&&o.execCommand("Delete"),o.selection.setRng(t),i=r.trimHtml(i),n["text/html"]?a(i):s(i)}))}}),o.on("dragover dragend",function(e){o.settings.paste_data_images&&e.preventDefault()})}var C,w,N,E=this,_=0,S=!1,k="%MCEPASTEBIN%",T="data:text/mce-internal,";E.pasteHtml=a,E.pasteText=s,o.on("preInit",function(){x(),o.parser.addNodeFilter("img",function(t,n,r){function i(e){return e.data&&e.data.paste===!0}function a(t){t.attr("data-mce-object")||u===e.transparentSrc||t.remove()}function s(e){return 0===e.indexOf("webkit-fake-url")}function l(e){return 0===e.indexOf("data:")}if(!o.settings.paste_data_images&&i(r))f
 or(var c=t.length;c--;){var u=t[c].attributes.map.src;u&&(s(u)?a(t[c]):!o.settings.allow_html_data_urls&&l(u)&&a(t[c]))}})})}}),r("tinymce/pasteplugin/WordFilter",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema","tinymce/html/Serializer","tinymce/html/Node","tinymce/pasteplugin/Utils"],function(e,t,n,r,i,o){function a(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function s(t){var n,r;return r=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],t=t.replace(
 /^[\u00a0 ]+/,""),e.each(r,function(e){return e.test(t)?(n=!0,!1):void 0}),n}function l(e){return/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(e)}function c(c){var u=c.settings;c.on("BeforePastePreProcess",function(d){function f(e){function t(e){var n="";if(3===e.type)return e.value;if(e=e.firstChild)do n+=t(e);while(e=e.next);return n}function n(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do if(!n(e,t))return!1;while(e=e.next);return!0}function r(e){if(e._listIgnore)return void e.remove();if(e=e.firstChild)do r(e);while(e=e.next)}function o(e,t,o){var s=e._listLevel||u;s!=u&&(u>s?a&&(a=a.parent.parent):(c=a,a=null)),a&&a.name==t?a.append(e):(c=c||a,a=new i(t,1),o>1&&a.attr("start",""+o),e.wrap(a)),e.name="li",s>u&&c&&c.lastChild.append(a),u=s,r(e),n(e,/^\u00a0+/),n(e,/^\s*([\u2022\u00b7\u00a7\u25C
 F]|\w+\.)/),n(e,/^\u00a0+/)}for(var a,c,u=1,d=[],f=e.firstChild;"undefined"!=typeof f&&null!==f;)if(d.push(f),f=f.walk(),null!==f)for(;"undefined"!=typeof f&&f.parent!==e;)f=f.walk();for(var h=0;h<d.length;h++)if(e=d[h],"p"==e.name&&e.firstChild){var m=t(e);if(l(m)){o(e,"ul");continue}if(s(m)){var p=/([0-9]+)\./.exec(m),g=1;p&&(g=parseInt(p[1],10)),o(e,"ol",g);continue}if(e._listLevel){o(e,"ul",1);continue}a=null}else c=a,a=null}function h(t,n){var r,o={},a=c.dom.parseStyle(n);return e.each(a,function(e,i){switch(i){case"mso-list":r=/\w+ \w+([0-9]+)/i.exec(n),r&&(t._listLevel=parseInt(r[1],10)),/Ignore/i.test(e)&&t.firstChild&&(t._listIgnore=!0,t.firstChild._listIgnore=!0);break;case"horiz-align":i="text-align";break;case"vert-align":i="vertical-align";break;case"font-color":case"mso-foreground":i
 ="color";break;case"mso-background":case"mso-highlight":i="background";break;case"font-weight":case"font-style":return void("normal"!=e&&(o[i]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void t.remove()}return 0===i.indexOf("mso-comment")?void t.remove():void(0!==i.indexOf("mso-")&&("all"==m||p&&p[i])&&(o[i]=e))}),/(bold)/i.test(o["font-weight"])&&(delete o["font-weight"],t.wrap(new i("b",1))),/(italic)/i.test(o["font-style"])&&(delete o["font-style"],t.wrap(new i("i",1))),o=c.dom.serializeStyle(o,t.name),o?o:null}var m,p,g=d.content;if(g=g.replace(/<b[^>]+id="?docs-internal-[^>]*>/gi,""),g=g.replace(/<br class="?Apple-interchange-newline"?>/gi,""),m=u.paste_retain_style_properties,m&&
 (p=e.makeMap(m.split(/[, ]/))),u.paste_enable_default_filters!==!1&&a(d.content)){d.wordContent=!0,g=o.filter(g,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var v=u.paste_word_valid_elements;v||(v="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var y=new n({valid_elements:v,valid_children:"-li[p]"});e.each(y.elements,function(e){e.attributes["class"]||
 (e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var b=new t({},y);b.addAttributeFilter("style",function(e){for(var t,n=e.length;n--;)t=e[n],t.attr("style",h(t,t.attr("style"))),"span"==t.name&&t.parent&&!t.attributes.length&&t.unwrap()}),b.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)t=e[r],n=t.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),b.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),b.addNodeFilter("a",function(e){for(var t,n,r,i=e.length;i--;)if(t=e[i],n=t.attr("href"),r=t.attr("name"),n&&-1!=n.indexOf("#_msocom_"))t.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split
 ("#")[1],n&&(n="#"+n)),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){t.unwrap();continue}t.attr({href:n,name:r})}else t.unwrap()});var x=b.parse(g);u.paste_convert_word_fake_lists!==!1&&f(x),d.content=new r({validate:u.validate},y).serialize(x)}})}return c.isWordContent=a,c}),r("tinymce/pasteplugin/Quirks",["tinymce/Env","tinymce/util/Tools","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Utils"],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+o.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[
 [/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function s(e){if(n.isWordContent(e))return e;var t=i.settings.paste_webkit_styles;if(i.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var r=i.dom,o=i.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,i,a){var s=r.parseStyle(i,"span"),l={};if("none"===t)return n+a;for(var c=0;c<t.length;c++){var u=s[t[c]],d=r.getStyle(o,t[c],!0);/color/.test(t[c])&&(u=r.toHex(u),d=r.toHex(d)),d!=u&&(l[t[c]]=u)}return l=r.serializeStyle(l,"span"),l?n+' style="'+l+'"'+a:n+a})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return
  t+' style="'+n+'"'+r})}e.webkit&&o(s),e.ie&&o(a)}}),r("tinymce/pasteplugin/Plugin",["tinymce/PluginManager","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks"],function(e,t,n,r){var i;e.add("paste",function(e){function o(){if("text"==a.pasteFormat)this.active(!1),a.pasteFormat="html";else if(a.pasteFormat="text",this.active(!0),!i){var t=e.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");e.notificationManager.open({text:t,type:"info"}),i=!0}}var a,s=this,l=e.settings;s.clipboard=a=new t(e),s.quirks=new r(e),s.wordFilter=new n(e),e.settings.paste_as_text&&(s.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(s,s,e)}),l.paste_postprocess&&a
 mp;e.on("PastePostProcess",function(e){l.paste_postprocess.call(s,s,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&s.clipboard.pasteHtml(t.content),t.text&&s.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==s.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:a.pasteFormat,onclick:o})})}),o(["tinymce/pasteplugin/Utils"])}(this);
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginstabfocuspluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,7 +90,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        if (el.id && focusEditor) {
</span><span class="cx" style="display: block; padding: 0 10px">                                focusEditor.focus();
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         tinymce.util.Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (!tinymce.Env.webkit) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                window.focus();
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginstabfocuspluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("tabfocus",function(a){function b(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function c(b){function c(c){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function i(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&tinymce.get(b.id)&&-1!=a.tabIndex&&f(a)}if(h=d.select(":input:enabled,*[tabindex]:not(iframe)"),e(h,function(b,c){return b.id==a.id?(g=c,!1):void 0}),c>0){for(j=g+1;j<h.length;j++)if(i(h[j]))return h[j]}else for(j=g-1;j>=0;j--)if(i(h[j]))return h[j];return null}var g,h,i,j;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(i=f(a.getParam("tab_focus",a.getParam("tabfocus_elements&quo
 t;,":prev,:next"))),1==i.length&&(i[1]=i[0],i[0]=":prev"),h=b.shiftKey?":prev"==i[0]?c(-1):d.get(i[0]):":next"==i[1]?c(1):d.get(i[1]))){var k=tinymce.get(h.id||h.name);h.id&&k?k.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),h.focus()},10),b.preventDefault()}}var d=tinymce.DOM,e=tinymce.each,f=tinymce.explode;a.on("init",function(){a.inline&&tinymce.DOM.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",b),tinymce.Env.gecko?a.on("keypress keydown",c):a.on("keydown",c)})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&-1!=e.tabIndex&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){return t.id==e.id?(a=n,!1):void 0}),n>0){for(c=a+1;c<s.length;c++)if(l(s[c]))return s[c]}else for(c=a-1;c>=0;c--)if(l(s[c]))return s[c];return null}var a,s,l,c;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements&quo
 t;,":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var u=tinymce.get(s.id||s.name);s.id&&u?u.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginstextcolorpluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("textcolor",function(a){function b(b){var c;return a.dom.getParents(a.selection.getStart(),function(a){var d;(d=a.style["forecolor"==b?"color":"background-color"])&&(c=d)}),c}function c(){var b,c,d=[];for(c=a.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue&
 quot;,"808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],b=0;b<c.length;b+=2)d.push({text:c[b+1],colo
 r:"#"+c[b]});return d}function d(){function b(a,b){var c="transparent"==a;return'<td class="mce-grid-cell'+(c?" mce-colorbtn-trans":"")+'"><div id="'+n+"-"+o++ +'" data-mce-color="'+(a?a:"")+'" role="option" tabIndex="-1" style="'+(a?"background-color: "+a:"")+'" title="'+tinymce.translate(b)+'">'+(c?"&#215;":"")+"</div></td>"}var d,e,f,g,h,k,l,m=this,n=m._id,o=0;for(d=c(),d.push({text:tinymce.translate("No color"),color:"transparent"}),f='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',g=d.length-1,k=0;j>k;k++){for(f+="<tr>",h=0;i>h;h++)l=k*i+h,l>g?f+="<td></td>":(e=d[l],f+=b(e.color,e.text));f+="</tr>"}if
 (a.settings.color_picker_callback){for(f+='<tr><td colspan="'+i+'" class="mce-custom-color-btn"><div id="'+n+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+n+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+tinymce.translate("Custom...")+"</button></div></td></tr>",f+="<tr>",h=0;i>h;h++)f+=b("","Custom color");f+="</tr>"}return f+="</tbody></table>"}function e(b,c){a.undoManager.transact(function(){a.focus(),a.formatter.apply(b,{value:c}),a.nodeChanged()})}function f(b){a.undoManager.transact(function(){a.focus(),a.formatter.remove(b,{value:null},null,!0),a.nodeChanged()})}function g(c){function d(a){k.hidePanel(),k.color(a),e(k.settings.for
 mat,a)}function g(){k.hidePanel(),k.resetColor(),f(k.settings.format)}function h(a,b){a.style.background=b,a.setAttribute("data-mce-color",b)}var j,k=this.parent();tinymce.DOM.getParent(c.target,".mce-custom-color-btn")&&(k.hidePanel(),a.settings.color_picker_callback.call(a,function(a){var b,c,e,f=k.panel.getEl().getElementsByTagName("table")[0];for(b=tinymce.map(f.rows[f.rows.length-1].childNodes,function(a){return a.firstChild}),e=0;e<b.length&&(c=b[e],c.getAttribute("data-mce-color"));e++);if(e==i)for(e=0;i-1>e;e++)h(b[e],b[e+1].getAttribute("data-mce-color"));h(c,a),d(a)},b(k.settings.format))),j=c.target.getAttribute("data-mce-color"),j?(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),c.target.setAttribute("aria-selected",!0),this.lastId=c.target.id,"transparent"==j?g():d(j)):null!==j&&k.hidePanel()}function h(){var 
 a=this;a._color?e(a.settings.format,a._color):f(a.settings.format)}var i,j;j=a.settings.textcolor_rows||5,i=a.settings.textcolor_cols||8,a.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:d,onclick:g},onclick:h}),a.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:d,onclick:g},onclick:h})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("textcolor",function(e){function t(t){var n;return e.dom.getParents(e.selection.getStart(),function(e){var r;(r=e.style["forecolor"==t?"color":"background-color"])&&(n=r)}),n}function n(){var t,n,r=[];for(n=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue&
 quot;,"808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],t=0;t<n.length;t+=2)r.push({text:n[t+1],colo
 r:"#"+n[t]});return r}function r(){function t(e,t){var n="transparent"==e;return'<td class="mce-grid-cell'+(n?" mce-colorbtn-trans":"")+'"><div id="'+h+"-"+m++ +'" data-mce-color="'+(e?e:"")+'" role="option" tabIndex="-1" style="'+(e?"background-color: "+e:"")+'" title="'+tinymce.translate(t)+'">'+(n?"&#215;":"")+"</div></td>"}var r,i,o,a,s,u,d,f=this,h=f._id,m=0;for(r=n(),r.push({text:tinymce.translate("No color"),color:"transparent"}),o='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',a=r.length-1,u=0;c>u;u++){for(o+="<tr>",s=0;l>s;s++)d=u*l+s,d>a?o+="<td></td>":(i=r[d],o+=t(i.color,i.text));o+="</tr>"}if
 (e.settings.color_picker_callback){for(o+='<tr><td colspan="'+l+'" class="mce-custom-color-btn"><div id="'+h+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+h+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+tinymce.translate("Custom...")+"</button></div></td></tr>",o+="<tr>",s=0;l>s;s++)o+=t("","Custom color");o+="</tr>"}return o+="</tbody></table>"}function i(t,n){e.undoManager.transact(function(){e.focus(),e.formatter.apply(t,{value:n}),e.nodeChanged()})}function o(t){e.undoManager.transact(function(){e.focus(),e.formatter.remove(t,{value:null},null,!0),e.nodeChanged()})}function a(n){function r(e){u.hidePanel(),u.color(e),i(u.settings.for
 mat,e)}function a(){u.hidePanel(),u.resetColor(),o(u.settings.format)}function s(e,t){e.style.background=t,e.setAttribute("data-mce-color",t)}var c,u=this.parent();tinymce.DOM.getParent(n.target,".mce-custom-color-btn")&&(u.hidePanel(),e.settings.color_picker_callback.call(e,function(e){var t,n,i,o=u.panel.getEl().getElementsByTagName("table")[0];for(t=tinymce.map(o.rows[o.rows.length-1].childNodes,function(e){return e.firstChild}),i=0;i<t.length&&(n=t[i],n.getAttribute("data-mce-color"));i++);if(i==l)for(i=0;l-1>i;i++)s(t[i],t[i+1].getAttribute("data-mce-color"));s(n,e),r(e)},t(u.settings.format))),c=n.target.getAttribute("data-mce-color"),c?(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),n.target.setAttribute("aria-selected",!0),this.lastId=n.target.id,"transparent"==c?a():r(c)):null!==c&&u.hidePanel()}function s(){var 
 e=this;e._color?i(e.settings.format,e._color):o(e.settings.format)}var l,c;c=e.settings.textcolor_rows||5,l=e.settings.textcolor_cols||8,e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:a},onclick:s}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:a},onclick:s})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginswpeditimagepluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js    2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -583,7 +583,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        var captionField = {
</span><span class="cx" style="display: block; padding: 0 10px">                                type: 'textbox',
</span><span class="cx" style="display: block; padding: 0 10px">                                flex: 1,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                name: 'caption',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         name: 'wpcaption',
</ins><span class="cx" style="display: block; padding: 0 10px">                                 minHeight: 60,
</span><span class="cx" style="display: block; padding: 0 10px">                                multiline: true,
</span><span class="cx" style="display: block; padding: 0 10px">                                scroll: true,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -609,7 +609,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                editor.on( 'wpImageFormSubmit', function( event ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var data = event.imgData.data,
</span><span class="cx" style="display: block; padding: 0 10px">                                imgNode = event.imgData.node,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                caption = event.imgData.caption,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         caption = event.imgData.wpcaption,
</ins><span class="cx" style="display: block; padding: 0 10px">                                 captionId = '',
</span><span class="cx" style="display: block; padding: 0 10px">                                captionAlign = '',
</span><span class="cx" style="display: block; padding: 0 10px">                                captionWidth = '',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -792,7 +792,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                parent = dom.select( 'dd.wp-caption-dd', parent )[0];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( parent ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        data.caption = editor.serializer.serialize( parent )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 data.wpcaption = editor.serializer.serialize( parent )
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 .replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgraycontentinlinemincss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:0 0;text-decoration:none;color:#000;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:400;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-
 select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333}
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}fig
 ure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-mar
 ker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td.mce-item-selected,th.mce-item-selected{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgraycontentmincss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/content.min.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/content.min.css  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/content.min.css    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-body{background-color:#FFF;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:0 0;text-decoration:none;color:#000;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:400;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{bord
 er:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-i
 tem-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333}
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+body{background-color:#fff;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce
 -object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-preview-object[data-mce-selected] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inl
 ine-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #f00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #bbb}td.mce-item-selected,th.mce-item-selected{background-color:#39f !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px so
 lid #7acaff}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmalleot"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.eot</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmalljson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.json                         (rev 0)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.json   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,1277 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "IcoMoonType": "selection",
+       "icons": [
+               {
+                       "icon": {
+                               "paths": [
+                                       "M704 832v-37.004c151.348-61.628 256-193.82 256-346.996 0-212.078-200.576-384-448-384s-448 171.922-448 384c0 153.176 104.654 285.368 256 346.996v37.004h-192l-64-96v224h320v-222.812c-100.9-51.362-170.666-161.54-170.666-289.188 0-176.732 133.718-320 298.666-320 164.948 0 298.666 143.268 298.666 320 0 127.648-69.766 237.826-170.666 289.188v222.812h320v-224l-64 96h-192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57376,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 0,
+                               "order": 1,
+                               "prevSize": 32,
+                               "code": 57376,
+                               "name": "charmap",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 0
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M256 64v896l256-256 256 256v-896h-512zM704 789.49l-192-192-192 192v-661.49h384v661.49z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57363,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 1,
+                               "order": 2,
+                               "prevSize": 32,
+                               "code": 57363,
+                               "name": "bookmark",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 1
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.1
 04-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM800 838c-9.724 0-19.45-3.708-26.87-11.13l-128-127.998c-14.844-14.84-14.844-38.898 0-53.738 14.84-14.844 38.896-14.844 53.736 0l128 128c14.844 14.84 14.844 38.896 0 53.736-7.416 7.422-17.142 11.13-26.866 11.13zM608 960c-17.674 0-32-14.326-32-32v-128c0-17.674 14.326-32 32-32s32 14.326 32 32v128c0 17.674-14.326 32-32 32zM928 640h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32h128c17.674 0 32 14.326 32 32s-14.326 32-32 32zM224 186c9.724 0 19.45 3.708 26.87 11.13l128 128c14.842 14.84 14.842 38.898 0 53.738-14.84 14.844-38.898 14.844-53.738 0l-128-128c-14.842-14.84-14.842-38.898 0-53.738 7.418-7.422 17.144-11.13 26.868-11.13zM416 64c17.674 0 32 14.326 32 32v128c0 17.
 674-14.326 32-32 32s-32-14.326-32-32v-128c0-17.674 14.326-32 32-32zM96 384h128c17.674 0 32 14.326 32 32s-14.326 32-32 32h-128c-17.674 0-32-14.326-32-32s14.326-32 32-32z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57362,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 2,
+                               "order": 3,
+                               "prevSize": 32,
+                               "code": 57362,
+                               "name": "link",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 2
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M927.274 230.216l-133.49-133.488c-21.104-21.104-49.232-32.728-79.198-32.728s-58.094 11.624-79.196 32.726l-165.492 165.49c-43.668 43.668-43.668 114.724 0 158.392l2.746 2.746 67.882-67.882-2.746-2.746c-6.132-6.132-6.132-16.494 0-22.626l165.492-165.492c4.010-4.008 8.808-4.608 11.312-4.608s7.302 0.598 11.312 4.61l133.49 133.488c6.132 6.134 6.132 16.498 0.002 22.628l-165.494 165.494c-4.008 4.008-8.806 4.608-11.31 4.608s-7.302-0.6-11.312-4.612l-2.746-2.746-67.88 67.884 2.742 2.742c21.106 21.108 49.23 32.728 79.2 32.728s58.094-11.624 79.196-32.726l165.494-165.492c43.662-43.666 43.662-114.72-0.004-158.39zM551.356 600.644l-67.882 67.882 2.746 2.746c4.008 4.008 4.61 8.806 4.61 11.31 0 2.506-0.598 7.302-4.606 11.314l-165.494 165.49c-4.010 4.010-8.81 4.61-11.314 4.61s-7.304-0.6-11.314-4.61l-133.492-133.486c-4.010-4.010-4.61-8.81-4.61-11.314s0.598-7.3 4.61-11.312l165.49-165.488c4.010-4.012 8.81-4.612 11.314-4.612s7.304 0.6 11.314 4.612l2.746 2.742 67.882-67.88-2.746-2.746c-21.104-21.1
 04-49.23-32.726-79.196-32.726s-58.092 11.624-79.196 32.726l-165.488 165.486c-21.106 21.104-32.73 49.234-32.73 79.198s11.624 58.094 32.726 79.198l133.49 133.49c21.106 21.102 49.232 32.726 79.198 32.726s58.092-11.624 79.196-32.726l165.494-165.492c21.104-21.104 32.722-49.23 32.722-79.196s-11.624-58.094-32.726-79.196l-2.744-2.746zM352 710c-9.724 0-19.45-3.71-26.87-11.128-14.84-14.84-14.84-38.898 0-53.738l320-320c14.84-14.84 38.896-14.84 53.736 0 14.844 14.84 14.844 38.9 0 53.74l-320 320c-7.416 7.416-17.142 11.126-26.866 11.126z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57361,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 3,
+                               "order": 4,
+                               "prevSize": 32,
+                               "code": 57361,
+                               "name": "unlink",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 3
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M576 281.326v-217.326l336.002 336-336.002 336v-222.096c-390.906-9.17-315 247.096-256 446.096-288-320-212.092-690.874 256-678.674z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57360,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 4,
+                               "order": 5,
+                               "prevSize": 32,
+                               "code": 57360,
+                               "name": "redo",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 4
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M704 960c59-199 134.906-455.266-256-446.096v222.096l-336.002-336 336.002-336v217.326c468.092-12.2 544 358.674 256 678.674z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57359,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 5,
+                               "order": 6,
+                               "prevSize": 32,
+                               "code": 57359,
+                               "name": "undo",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 5
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M256.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.954 10.578-19.034 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498zM768.428 424.726c105.8 0 191.572 91.17 191.572 203.638 0 112.464-85.772 203.636-191.572 203.636-105.802 0-191.572-91.17-191.572-203.636l-0.856-29.092c0-224.93 171.54-407.272 383.144-407.272v116.364c-73.1 0-141.826 30.26-193.516 85.204-9.956 10.578-19.036 21.834-27.224 33.656 9.784-1.64 19.806-2.498 30.024-2.498z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57358,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 6,
+                               "order": 7,
+                               "prevSize": 32,
+                               "code": 57358,
+                               "name": "blockquote",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 6
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM384 576h576v128h-576zM384 384h576v128h-576zM64 768h896v128h-896zM64 384l224 160-224 160z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57356,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 7,
+                               "order": 8,
+                               "prevSize": 32,
+                               "code": 57356,
+                               "name": "indent",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 7
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM64 576h576v128h-576zM64 384h576v128h-576zM64 768h896v128h-896zM960 384l-224 160 224 160z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57357,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 8,
+                               "order": 9,
+                               "prevSize": 32,
+                               "code": 57357,
+                               "name": "outdent",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 8
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM320 530v-146h-64v-320h-128v64h64v256h-64v64h128v50l-128 60v146h128v64h-128v64h128v64h-128v64h192v-320h-128v-50z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57355,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 9,
+                               "order": 10,
+                               "prevSize": 32,
+                               "code": 57355,
+                               "name": "numlist",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 9
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M384 128h576v128h-576zM384 448h576v128h-576zM384 768h576v128h-576zM128 192c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 512c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM128 832c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57354,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 10,
+                               "order": 11,
+                               "prevSize": 32,
+                               "code": 57354,
+                               "name": "bullist",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 10
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M888 384h-56v-256h64v-64h-320v64h64v256h-256v-256h64v-64h-320v64h64v256h-56c-39.6 0-72 32.4-72 72v432c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-312h128v312c0 39.6 32.4 72 72 72h240c39.6 0 72-32.4 72-72v-432c0-39.6-32.4-72-72-72zM348 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM860 896h-184c-19.8 0-36-14.4-36-32s16.2-32 36-32h184c19.8 0 36 14.4 36 32s-16.2 32-36 32z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57353,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 11,
+                               "order": 12,
+                               "prevSize": 32,
+                               "code": 57353,
+                               "name": "searchreplace",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 11
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h384l192-192v-384h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM704 869.49v-101.49h101.49l-101.49 101.49zM832 704h-192v192h-256v-448h448v256z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57352,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 12,
+                               "order": 13,
+                               "prevSize": 32,
+                               "code": 57352,
+                               "name": "paste",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 12
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M832 320h-192v-64l-192-192h-384v704h384v192h576v-448l-192-192zM832 410.51l101.49 101.49h-101.49v-101.49zM448 154.51l101.49 101.49h-101.49v-101.49zM128 128h256v192h192v384h-448v-576zM960 896h-448v-128h128v-384h128v192h192v320z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57393,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 13,
+                               "order": 14,
+                               "prevSize": 32,
+                               "code": 57393,
+                               "name": "copy",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 13
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M960 512h-265.876c-50.078-35.42-114.43-54.86-182.124-54.86-89.206 0-164.572-50.242-164.572-109.712 0-59.47 75.366-109.714 164.572-109.714 75.058 0 140.308 35.576 159.12 82.286h113.016c-7.93-50.644-37.58-97.968-84.058-132.826-50.88-38.16-117.676-59.174-188.078-59.174-70.404 0-137.196 21.014-188.074 59.174-54.788 41.090-86.212 99.502-86.212 160.254s31.424 119.164 86.212 160.254c1.956 1.466 3.942 2.898 5.946 4.316h-265.872v64h512.532c58.208 17.106 100.042 56.27 100.042 100.572 0 59.468-75.368 109.71-164.572 109.71-75.060 0-140.308-35.574-159.118-82.286h-113.016c7.93 50.64 37.582 97.968 84.060 132.826 50.876 38.164 117.668 59.18 188.072 59.18 70.402 0 137.198-21.016 188.074-59.174 54.79-41.090 86.208-99.502 86.208-160.254 0-35.298-10.654-69.792-30.294-100.572h204.012v-64z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57389,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 19,
+                               "order": 15,
+                               "prevSize": 32,
+                               "code": 57389,
+                               "name": "strikethrough",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 14
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M192 832h576v64h-576v-64zM640 128v384c0 31.312-14.7 61.624-41.39 85.352-30.942 27.502-73.068 42.648-118.61 42.648-45.544 0-87.668-15.146-118.608-42.648-26.692-23.728-41.392-54.040-41.392-85.352v-384h-128v384c0 141.382 128.942 256 288 256s288-114.618 288-256v-384h-128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57388,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 20,
+                               "order": 16,
+                               "prevSize": 32,
+                               "code": 57388,
+                               "name": "underline",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 15
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M832 128v64h-144l-256 640h144v64h-448v-64h144l256-640h-144v-64h448z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57387,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 21,
+                               "order": 17,
+                               "prevSize": 32,
+                               "code": 57387,
+                               "name": "italic",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 16
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M625.442 494.182c48.074-38.15 78.558-94.856 78.558-158.182 0-114.876-100.29-208-224-208h-224v768h288c123.712 0 224-93.124 224-208 0-88.196-59.118-163.562-142.558-193.818zM384 304c0-26.51 21.49-48 48-48h67.204c42.414 0 76.796 42.98 76.796 96s-34.382 96-76.796 96h-115.204v-144zM547.2 768h-115.2c-26.51 0-48-21.49-48-48v-144h163.2c42.418 0 76.8 42.98 76.8 96s-34.382 96-76.8 96z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57386,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 22,
+                               "order": 18,
+                               "prevSize": 32,
+                               "code": 57386,
+                               "name": "bold",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 17
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M850.746 242.746l-133.492-133.49c-24.888-24.892-74.054-45.256-109.254-45.256h-416c-35.2 0-64 28.8-64 64v768c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-544c0-35.2-20.366-84.364-45.254-109.254zM805.49 287.998c6.792 6.796 13.792 19.162 18.894 32.002h-184.384v-184.386c12.84 5.1 25.204 12.1 32 18.896l133.49 133.488zM831.884 896h-639.77c-0.040-0.034-0.082-0.076-0.114-0.116v-767.77c0.034-0.040 0.076-0.082 0.114-0.114h383.886v256h256v511.884c-0.034 0.040-0.076 0.082-0.116 0.116z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57345,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 23,
+                               "order": 19,
+                               "prevSize": 32,
+                               "code": 57345,
+                               "name": "newdocument",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 18
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M960 880v-591.938l-223.938-224.062h-592.062c-44.182 0-80 35.816-80 80v736c0 44.184 35.818 80 80 80h736c44.184 0 80-35.816 80-80zM576 192h64v192h-64v-192zM704 832h-384v-255.882c0.034-0.042 0.076-0.082 0.116-0.118h383.77c0.040 0.036 0.082 0.076 0.116 0.118l-0.002 255.882zM832 832h-64v-256c0-35.2-28.8-64-64-64h-384c-35.2 0-64 28.8-64 64v256h-64v-640h64v192c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-171.010l128 128.072v490.938z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57344,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 24,
+                               "order": 20,
+                               "prevSize": 32,
+                               "code": 57344,
+                               "name": "save",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 19
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192v704h896v-704h-896zM384 640v-128h256v128h-256zM640 704v128h-256v-128h256zM640 320v128h-256v-128h256zM320 320v128h-192v-128h192zM128 512h192v128h-192v-128zM704 512h192v128h-192v-128zM704 448v-128h192v128h-192zM128 704h192v128h-192v-128zM704 832v-128h192v128h-192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57371,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 25,
+                               "order": 21,
+                               "prevSize": 32,
+                               "code": 57371,
+                               "name": "table",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 20
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M512 140c99.366 0 192.782 38.694 263.042 108.956s108.958 163.678 108.958 263.044-38.696 192.782-108.958 263.042-163.676 108.958-263.042 108.958-192.782-38.696-263.044-108.958-108.956-163.676-108.956-263.042 38.694-192.782 108.956-263.044 163.678-108.956 263.044-108.956zM512 64c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448v0zM320 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM576 384c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64zM512 656c-101.84 0-192.56-36.874-251.166-94.328 23.126 117.608 126.778 206.328 251.166 206.328 124.388 0 228.040-88.72 251.168-206.328-58.608 57.454-149.328 94.328-251.168 94.328z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57377,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 26,
+                               "order": 22,
+                               "prevSize": 32,
+                               "code": 57377,
+                               "name": "emoticons",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 21
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M480 384l-192-192 128-128h-352v352l128-128 192 192zM640 480l192-192 128 128v-352h-352l128 128-192 192zM544 640l192 192-128 128h352v-352l-128 128-192-192zM384 544l-192 192-128-128v352h352l-128-128 192-192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57379,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 27,
+                               "order": 23,
+                               "prevSize": 32,
+                               "code": 57379,
+                               "name": "fullscreen",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 22
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 448h896v128h-896z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57372,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 28,
+                               "order": 24,
+                               "prevSize": 32,
+                               "code": 57372,
+                               "name": "hr",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 23
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 768h512v128h-512v-128zM768 192h-220.558l-183.766 512h-132.288l183.762-512h-223.15v-128h576v128zM929.774 896l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774-62.226 62.226z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57373,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 29,
+                               "order": 25,
+                               "prevSize": 32,
+                               "code": 57373,
+                               "name": "removefromat",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 24
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M256 128h512v128h-512v-128zM896 320h-768c-35.2 0-64 28.8-64 64v256c0 35.2 28.796 64 64 64h128v192h512v-192h128c35.2 0 64-28.8 64-64v-256c0-35.2-28.8-64-64-64zM704 832h-384v-256h384v256zM910.4 416c0 25.626-20.774 46.4-46.398 46.4s-46.402-20.774-46.402-46.4 20.778-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57378,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 30,
+                               "order": 26,
+                               "prevSize": 32,
+                               "code": 57378,
+                               "name": "print",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 25
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M384 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57390,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 31,
+                               "order": 27,
+                               "prevSize": 32,
+                               "code": 57390,
+                               "name": "visualchars",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 26
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M448 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM64 896l224-192-224-192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57391,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 32,
+                               "order": 28,
+                               "prevSize": 32,
+                               "code": 57391,
+                               "name": "ltr",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 27
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M416 704l-192-192 192-192-64-64-256 256 256 256zM672 256l-64 64 192 192-192 192 64 64 256-256z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57367,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 38,
+                               "order": 29,
+                               "prevSize": 32,
+                               "code": 57367,
+                               "name": "code",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 28
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M448 704h128v128h-128v-128zM704 256c35.346 0 64 28.654 64 64v166l-228 154h-92v-64l192-128v-64h-320v-128h384zM512 64c-119.666 0-232.166 46.6-316.784 131.216-84.614 84.618-131.216 197.118-131.216 316.784 0 119.664 46.602 232.168 131.216 316.784 84.618 84.616 197.118 131.216 316.784 131.216 119.664 0 232.168-46.6 316.784-131.216 84.616-84.616 131.216-197.12 131.216-316.784 0-119.666-46.6-232.166-131.216-316.784-84.616-84.616-197.12-131.216-316.784-131.216z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57366,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 39,
+                               "order": 30,
+                               "prevSize": 32,
+                               "code": 57366,
+                               "name": "help",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 29
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM896 831.884c-0.012 0.014-0.030 0.028-0.042 0.042l-191.958-319.926-160 128-224-288-191.968 479.916c-0.010-0.010-0.022-0.022-0.032-0.032v-639.77c0.034-0.040 0.076-0.082 0.114-0.114h767.77c0.040 0.034 0.082 0.076 0.116 0.116v639.768zM640 352c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57364,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 40,
+                               "order": 31,
+                               "prevSize": 32,
+                               "code": 57364,
+                               "name": "image",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 30
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M896 128h-768c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h768c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM256 832h-128v-128h128v128zM256 576h-128v-128h128v128zM256 320h-128v-128h128v128zM704 832h-384v-640h384v640zM896 832h-128v-128h128v128zM896 576h-128v-128h128v128zM896 320h-128v-128h128v128zM384 320v384l288-192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57365,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 41,
+                               "order": 32,
+                               "prevSize": 32,
+                               "code": 57365,
+                               "name": "media",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 31
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M77.798 304.624l81.414 50.882c50.802-81.114 128.788-143.454 221.208-174.246l-30.366-91.094c-113.748 37.898-209.728 114.626-272.256 214.458zM673.946 90.166l-30.366 91.094c92.422 30.792 170.404 93.132 221.208 174.248l81.412-50.882c-62.526-99.834-158.506-176.562-272.254-214.46zM607.974 704.008c-4.808 0-9.692-1.090-14.286-3.386l-145.688-72.844v-211.778c0-17.672 14.328-32 32-32s32 14.328 32 32v172.222l110.31 55.156c15.806 7.902 22.214 27.124 14.31 42.932-5.604 11.214-16.908 17.696-28.646 17.698zM512 192c-212.078 0-384 171.922-384 384s171.922 384 384 384c212.078 0 384-171.922 384-384 0-212.078-171.922-384-384-384zM512 864c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.058 0 288 128.942 288 288 0 159.058-128.942 288-288 288z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57368,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 42,
+                               "order": 33,
+                               "prevSize": 32,
+                               "code": 57368,
+                               "name": "insertdatetime",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 32
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 455.746c45.318-49.92 97.162-92.36 153.272-125.124 90.332-52.744 192.246-80.622 294.728-80.622 102.48 0 204.396 27.878 294.726 80.624 56.112 32.764 107.956 75.204 153.274 125.124v-117.432c-33.010-28.118-68.124-53.14-104.868-74.594-105.006-61.314-223.658-93.722-343.132-93.722s-238.128 32.408-343.134 93.72c-36.742 21.454-71.856 46.478-104.866 74.596v117.43zM512 320c-183.196 0-345.838 100.556-448 256 102.162 155.448 264.804 256 448 256 183.196 0 345.838-100.552 448-256-102.162-155.444-264.804-256-448-256zM512 512c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.348 28.654-64 64-64s64 28.652 64 64zM728.066 696.662c-67.434 39.374-140.128 59.338-216.066 59.338s-148.632-19.964-216.066-59.338c-51.554-30.104-98.616-71.31-138.114-120.662 39.498-49.35 86.56-90.558 138.116-120.66 13.276-7.752 26.758-14.74 40.426-20.982-10.512 23.742-16.362 50.008-16.362 77.642 0 106.040 85.962 192 192 192 106.040 0 192-85.96 192-192 0-27.634-5.85-53.9-16.36-77.642 13.668 6.244 27.15 13.23 40.426 20.
 982 51.554 30.102 98.616 71.31 138.116 120.66-39.498 49.352-86.56 90.558-138.116 120.662z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57369,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 43,
+                               "order": 34,
+                               "prevSize": 32,
+                               "code": 57369,
+                               "name": "preview",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 33
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M651.168 283.834c-24.612-81.962-28.876-91.834-107.168-91.834h-64c-79.618 0-82.664 10.152-108.418 96 0 0.002 0 0.002-0.002 0.004l-143.998 479.996h113.636l57.6-192h226.366l57.6 192h113.63l-145.246-484.166zM437.218 448l38.4-136c10.086-33.618 36.38-30 36.38-30s26.294-3.618 36.38 30h0.004l38.4 136h-149.564z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57370,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 44,
+                               "order": 35,
+                               "prevSize": 32,
+                               "code": 57370,
+                               "name": "forecolor",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 34
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57384,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 45,
+                               "order": 36,
+                               "prevSize": 32,
+                               "code": 57384,
+                               "name": "restoredraft",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 35
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57346,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 46,
+                               "order": 37,
+                               "prevSize": 32,
+                               "code": 57346,
+                               "name": "fullpage",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 36
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57375,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 47,
+                               "order": 38,
+                               "prevSize": 32,
+                               "code": 57375,
+                               "name": "superscript",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 37
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57374,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 48,
+                               "order": 39,
+                               "prevSize": 32,
+                               "code": 57374,
+                               "name": "subscript",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 38
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M704 384v-160c0-17.6-14.4-32-32-32h-160v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-160c-17.602 0-32 14.4-32 32v512c0 17.6 14.398 32 32 32h224v192h576v-576h-192zM320 128.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 320v-64h384v64h-384zM832 896h-448v-448h448v448zM448 512v128h32l32-64h64v192h-48v64h160v-64h-48v-192h64l32 64h32v-128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "tags": [
+                                       "pastetext"
+                               ],
+                               "defaultCode": 57397,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 49,
+                               "order": 40,
+                               "prevSize": 32,
+                               "code": 57397,
+                               "name": "pastetext",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 39
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "tags": [
+                                       "resize",
+                                       "dots"
+                               ],
+                               "defaultCode": 57394,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 50,
+                               "order": 41,
+                               "prevSize": 32,
+                               "code": 57394,
+                               "name": "resize",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 40
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M928 128h-416l-32-64h-352l-64 128h896zM840.34 704h87.66l32-448h-896l64 640h356.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM874.996 849.75l-134.496-110.692c17.454-28.922 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l110.692 134.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM576 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "tags": [
+                                       "browse"
+                               ],
+                               "defaultCode": 57396,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 51,
+                               "order": 42,
+                               "prevSize": 32,
+                               "code": 57396,
+                               "name": "browse",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 41
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M864.408 670.132c-46.47-46.47-106.938-68.004-161.082-62.806l-63.326-63.326 192-192c0 0 128-128 0-256l-320 320-320-320c-128 128 0 256 0 256l192 192-63.326 63.326c-54.144-5.198-114.61 16.338-161.080 62.806-74.98 74.98-85.112 186.418-22.626 248.9 62.482 62.482 173.92 52.354 248.9-22.626 46.47-46.468 68.002-106.938 62.806-161.080l63.326-63.326 63.328 63.328c-5.196 54.144 16.336 114.61 62.806 161.078 74.978 74.98 186.418 85.112 248.898 22.626 62.488-62.482 52.356-173.918-22.624-248.9zM353.124 758.578c-2.212 24.332-15.020 49.826-35.14 69.946-22.212 22.214-51.080 35.476-77.218 35.476-10.524 0-25.298-2.228-35.916-12.848-21.406-21.404-17.376-73.132 22.626-113.136 22.212-22.214 51.080-35.476 77.218-35.476 10.524 0 25.298 2.228 35.916 12.848 13.112 13.11 13.47 32.688 12.514 43.19zM512 608c-35.346 0-64-28.654-64-64s28.654-64 64-64 64 28.654 64 64-28.654 64-64 64zM819.152 851.152c-10.62 10.62-25.392 12.848-35.916 12.848-26.138 0-55.006-13.262-77.218-35.476-20.122-20.12-32.928-45.614-3
 5.138-69.946-0.958-10.502-0.6-30.080 12.514-43.192 10.618-10.622 25.39-12.848 35.916-12.848 26.136 0 55.006 13.262 77.216 35.474 40.004 40.008 44.032 91.736 22.626 113.14z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57351,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 14,
+                               "order": 43,
+                               "prevSize": 32,
+                               "code": 57351,
+                               "name": "cut",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 42
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM64 576h896v128h-896zM64 384h896v128h-896zM64 768h896v128h-896z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57350,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 15,
+                               "order": 44,
+                               "prevSize": 32,
+                               "code": 57350,
+                               "name": "alignjustify",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 43
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM64 576h896v128h-896zM256 384h512v128h-512zM256 768h512v128h-512z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57348,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 16,
+                               "order": 45,
+                               "prevSize": 32,
+                               "code": 57348,
+                               "name": "aligncenter",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 44
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM64 576h896v128h-896zM384 384h576v128h-576zM384 768h576v128h-576z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57349,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 17,
+                               "order": 46,
+                               "prevSize": 32,
+                               "code": 57349,
+                               "name": "alignright",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 45
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M64 192h896v128h-896zM64 576h896v128h-896zM64 384h576v128h-576zM64 768h576v128h-576z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57347,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 18,
+                               "order": 47,
+                               "prevSize": 32,
+                               "code": 57347,
+                               "name": "alignleft",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 46
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M320 128c-123.712 0-224 100.288-224 224s100.288 224 224 224v320h128v-640h64v640h128v-640h128v-128h-448zM960 512l-224 192 224 192z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57392,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 33,
+                               "order": 48,
+                               "prevSize": 32,
+                               "code": 57392,
+                               "name": "rtl",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 47
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M512 384h128v64h-128zM512 768h128v64h-128zM576 576h128v64h-128zM768 576v192h-64v64h128v-256zM384 576h128v64h-128zM320 768h128v64h-128zM320 384h128v64h-128zM192 192v256h64v-192h64v-64zM704 448h128v-256h-64v192h-64zM64 64v896h896v-896h-896zM896 896h-768v-768h768v768zM192 576v256h64v-192h64v-64zM576 192h128v64h-128zM384 192h128v64h-128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57382,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 34,
+                               "order": 49,
+                               "prevSize": 32,
+                               "code": 57382,
+                               "name": "template",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 48
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M816 64l16 384h-640l16-384h32l16 320h512l16-320h32zM208 960l-16-320h640l-16 320h-32l-16-256h-512l-16 256h-32zM64 512h128v64h-128zM256 512h128v64h-128zM448 512h128v64h-128zM640 512h128v64h-128zM832 512h128v64h-128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57383,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 35,
+                               "order": 50,
+                               "prevSize": 32,
+                               "code": 57383,
+                               "name": "pagebreak",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 49
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M960 128v-64h-192c-35.202 0-64 28.8-64 64v320c0 15.856 5.858 30.402 15.496 41.614l-303.496 260.386-142-148-82 70 224 288 416-448h128v-64h-192v-320h192zM256 512h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192h128v192zM128 256v-128h128v128h-128zM640 448v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64zM448 128h128v128h-128v-128zM448 320h128v128h-128v-128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57380,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 36,
+                               "order": 51,
+                               "prevSize": 32,
+                               "code": 57380,
+                               "name": "spellcheck",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 50
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M448 512h-128v-128h128v-128h128v128h128v128h-128v128h-128v-128zM960 576v320h-896v-320h128v192h640v-192h128z"
+                               ],
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "defaultCode": 57381,
+                               "grid": 0
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "id": 37,
+                               "order": 52,
+                               "prevSize": 32,
+                               "code": 57381,
+                               "name": "nonbreaking",
+                               "ligatures": ""
+                       },
+                       "setIdx": 0,
+                       "setId": 2,
+                       "iconIdx": 51
+               },
+               {
+                       "icon": {
+                               "paths": [
+                                       "M256 352v-128c0-53.020 42.98-96 96-96h32v-128h-32c-123.712 0-224 100.288-224 224v128c0 53.020-42.98 96-96 96h-32v128h32c53.020 0 96 42.98 96 96v128c0 123.71 100.288 224 224 224h32v-128h-32c-53.020 0-96-42.98-96-96v-128c0-62.684-25.758-119.342-67.254-160 41.496-40.658 67.254-97.316 67.254-160z",
+                                       "M1024 352v-128c0-53.020-42.98-96-96-96h-32v-128h32c123.71 0 224 100.288 224 224v128c0 53.020 42.98 96 96 96h32v128h-32c-53.020 0-96 42.98-96 96v128c0 123.71-100.29 224-224 224h-32v-128h32c53.020 0 96-42.98 96-96v-128c0-62.684 25.758-119.342 67.254-160-41.496-40.658-67.254-97.316-67.254-160z",
+                                       "M768 320.882c0 70.692-57.308 128-128 128s-128-57.308-128-128c0-70.692 57.308-128 128-128s128 57.308 128 128z",
+                                       "M640 511.118c-70.692 0-128 57.308-128 128 0 68.732 32 123.216 130.156 127.852-29.19 41.126-73.156 57.366-130.156 62.7v76c0 0 256 22.332 256-266.55-0.25-70.694-57.306-128.002-128-128.002z"
+                               ],
+                               "width": 1280,
+                               "attrs": [],
+                               "isMulticolor": false,
+                               "tags": [
+                                       "code",
+                                       "semicolon",
+                                       "curly-braces"
+                               ],
+                               "grid": 16
+                       },
+                       "attrs": [],
+                       "properties": {
+                               "order": 1,
+                               "id": 0,
+                               "prevSize": 16,
+                               "code": 58883,
+                               "name": "codesample"
+                       },
+                       "setIdx": 1,
+                       "setId": 1,
+                       "iconIdx": 0
+               }
+       ],
+       "height": 1024,
+       "metadata": {
+               "name": "tinymce-small"
+       },
+       "preferences": {
+               "showGlyphs": true,
+               "showQuickUse": true,
+               "showQuickUse2": true,
+               "showSVGs": true,
+               "fontPref": {
+                       "prefix": "icon-",
+                       "metadata": {
+                               "fontFamily": "tinymce-small",
+                               "majorVersion": 1,
+                               "minorVersion": 0
+                       },
+                       "metrics": {
+                               "emSize": 1024,
+                               "baseline": 6.25,
+                               "whitespace": 50
+                       },
+                       "showMetrics": false,
+                       "showMetadata": false,
+                       "showVersion": false,
+                       "embed": false
+               },
+               "imagePref": {
+                       "prefix": "icon-",
+                       "png": true,
+                       "useClassSelector": true,
+                       "color": 4473924,
+                       "bgColor": 16777215
+               },
+               "historySize": 100,
+               "showCodes": true
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallsvg"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.svg</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.svg  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.svg    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,57 +6,58 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <font id="tinymce-small" horiz-adv-x="1024">
</span><span class="cx" style="display: block; padding: 0 10px"> <font-face units-per-em="1024" ascent="960" descent="-64" />
</span><span class="cx" style="display: block; padding: 0 10px"> <missing-glyph horiz-adv-x="1024" />
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe000;" d="M960 80v591.938l-223.938 224.062h-592.062c-44.182 0-80-35.816-80-80v-736c0-44.184 35.818-80 80-80h736c44.184 0 80 35.816 80 80zM576 768h64v-192h-64v192zM704 128h-384v255.882c0.034 0.042 0.076 0.082 0.116 0.118h383.77c0.040-0.036 0.082-0.076 0.116-0.118l-0.002-255.882zM832 128h-64v256c0 35.2-28.8 64-64 64h-384c-35.2 0-64-28.8-64-64v-256h-64v640h64v-192c0-35.2 28.8-64 64-64h320c35.2 0 64 28.8 64 64v171.010l128-128.072v-490.938z" />
-<glyph unicode="&#xe001;" d="M850.746 717.254l-133.492 133.49c-24.888 24.892-74.054 45.256-109.254 45.256h-416c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v544c0 35.2-20.366 84.364-45.254 109.254zM805.49 672.002c6.792-6.796 13.792-19.162 18.894-32.002h-184.384v184.386c12.84-5.1 25.204-12.1 32-18.896l133.49-133.488zM831.884 64h-639.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h383.886v-256h256v-511.884c-0.034-0.040-0.076-0.082-0.116-0.116z" />
-<glyph unicode="&#xe002;" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
-<glyph unicode="&#xe003;" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h576v-128h-576zM64 192h576v-128h-576z" />
-<glyph unicode="&#xe004;" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM256 576h512v-128h-512zM256 192h512v-128h-512z" />
-<glyph unicode="&#xe005;" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM384 576h576v-128h-576zM384 192h576v-128h-576z" />
-<glyph unicode="&#xe006;" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h896v-128h-896zM64 192h896v-128h-896z" />
-<glyph unicode="&#xe007;" d="M864.408 289.868c-46.47 46.47-106.938 68.004-161.082 62.806l-63.326 63.326 192 192c0 0 128 128 0 256l-320-320-320 320c-128-128 0-256 0-256l192-192-63.326-63.326c-54.144 5.198-114.61-16.338-161.080-62.806-74.98-74.98-85.112-186.418-22.626-248.9 62.482-62.482 173.92-52.354 248.9 22.626 46.47 46.468 68.002 106.938 62.806 161.080l63.326 63.326 63.328-63.328c-5.196-54.144 16.336-114.61 62.806-161.078 74.978-74.98 186.418-85.112 248.898-22.626 62.488 62.482 52.356 173.918-22.624 248.9zM353.124 201.422c-2.212-24.332-15.020-49.826-35.14-69.946-22.212-22.214-51.080-35.476-77.218-35.476-10.524 0-25.298 2.228-35.916 12.848-21.406 21.404-17.376 73.132 22.626 113.136 22.212 22.214 51.080 35.476 77.218 35.476 10.524 0 25.298-2.228 35.916-12.848 13.112-13.11 13.47-32.688 12.514-43.19zM512 352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM819.152 108.848c-10.62-10.62-25.392-12.848-35.916-12.848-26.138 0-55.006 13.262-77
 .218 35.476-20.122 20.12-32.928 45.614-35.138 69.946-0.958 10.502-0.6 30.080 12.514 43.192 10.618 10.622 25.39 12.848 35.916 12.848 26.136 0 55.006-13.262 77.216-35.474 40.004-40.008 44.032-91.736 22.626-113.14z" />
-<glyph unicode="&#xe008;" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h384l192 192v384h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM704 90.51v101.49h101.49l-101.49-101.49zM832 256h-192v-192h-256v448h448v-256z" />
-<glyph unicode="&#xe009;" d="M888 576h-56v256h64v64h-320v-64h64v-256h-256v256h64v64h-320v-64h64v-256h-56c-39.6 0-72-32.4-72-72v-432c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v312h128v-312c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v432c0 39.6-32.4 72-72 72zM348 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM860 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
-<glyph unicode="&#xe00a;" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM128 768c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 128c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" />
-<glyph unicode="&#xe00b;" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM320 430v146h-64v320h-128v-64h64v-256h-64v-64h128v-50l-128-60v-146h128v-64h-128v-64h128v-64h-128v-64h192v320h-128v50z" />
-<glyph unicode="&#xe00c;" d="M64 768h896v-128h-896zM384 384h576v-128h-576zM384 576h576v-128h-576zM64 192h896v-128h-896zM64 576l224-160-224-160z" />
-<glyph unicode="&#xe00d;" d="M64 768h896v-128h-896zM64 384h576v-128h-576zM64 576h576v-128h-576zM64 192h896v-128h-896zM960 576l-224-160 224-160z" />
-<glyph unicode="&#xe00e;" d="M256.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.954-10.578-19.034-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498zM768.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.956-10.578-19.036-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498z" />
-<glyph unicode="&#xe00f;" d="M704 0c59 199 134.906 455.266-256 446.096v-222.096l-336.002 336 336.002 336v-217.326c468.092 12.2 544-358.674 256-678.674z" />
-<glyph unicode="&#xe010;" d="M576 678.674v217.326l336.002-336-336.002-336v222.096c-390.906 9.17-315-247.096-256-446.096-288 320-212.092 690.874 256 678.674z" />
-<glyph unicode="&#xe011;" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.7
 42 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM352 250c-9.724 0-19.45 3.71-26.87 11.128-14.84 14.84-14.84 38.898 0 53.738l320 320c14.84 14.84 38.896 14.84 53.736 0 14.844-14.84 14.844-38.9 0-53.74l-320-320c-7.416-7.416-17.142-11.126-26.866-11.126z" />
-<glyph unicode="&#xe012;" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.304-0.6 11.314-4.612l2.746-2.7
 42 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM800 122c-9.724 0-19.45 3.708-26.87 11.13l-128 127.998c-14.844 14.84-14.844 38.898 0 53.738 14.84 14.844 38.896 14.844 53.736 0l128-128c14.844-14.84 14.844-38.896 0-53.736-7.416-7.422-17.142-11.13-26.866-11.13zM608 0c-17.674 0-32 14.326-32 32v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-128c0-17.674-14.326-32-32-32zM928 320h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32h128c17.674 0 32-14.326 32-32s-14.326-32-32-32zM224 774c9.724 0 19.45-3.708 26.87-11.13l128-128c14.842-14.84 14.842-38.898 0-53.738-14.84-14.844-38.898-14.844-53.738 0l-128 128c-14.842 14.84-14.842 38.898 0 53.738 7.418 7.422 17.144 11.13 26.868 11.13zM416
  896c17.674 0 32-14.326 32-32v-128c0-17.674-14.326-32-32-32s-32 14.326-32 32v128c0 17.674 14.326 32 32 32zM96 576h128c17.674 0 32-14.326 32-32s-14.326-32-32-32h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32z" />
-<glyph unicode="&#xe013;" d="M256 896v-896l256 256 256-256v896h-512zM704 170.51l-192 192-192-192v661.49h384v-661.49z" />
-<glyph unicode="&#xe014;" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 128.116c-0.012-0.014-0.030-0.028-0.042-0.042l-191.958 319.926-160-128-224 288-191.968-479.916c-0.010 0.010-0.022 0.022-0.032 0.032v639.77c0.034 0.040 0.076 0.082 0.114 0.114h767.77c0.040-0.034 0.082-0.076 0.116-0.116v-639.768zM640 608c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" />
-<glyph unicode="&#xe015;" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM256 128h-128v128h128v-128zM256 384h-128v128h128v-128zM256 640h-128v128h128v-128zM704 128h-384v640h384v-640zM896 128h-128v128h128v-128zM896 384h-128v128h128v-128zM896 640h-128v128h128v-128zM384 640v-384l288 192z" />
-<glyph unicode="&#xe016;" d="M448 256h128v-128h-128v128zM704 704c35.346 0 64-28.654 64-64v-166l-228-154h-92v64l192 128v64h-320v128h384zM512 896c-119.666 0-232.166-46.6-316.784-131.216-84.614-84.618-131.216-197.118-131.216-316.784 0-119.664 46.602-232.168 131.216-316.784 84.618-84.616 197.118-131.216 316.784-131.216 119.664 0 232.168 46.6 316.784 131.216s131.216 197.12 131.216 316.784c0 119.666-46.6 232.166-131.216 316.784-84.616 84.616-197.12 131.216-316.784 131.216z" />
-<glyph unicode="&#xe017;" d="M416 256l-192 192 192 192-64 64-256-256 256-256zM672 704l-64-64 192-192-192-192 64-64 256 256z" />
-<glyph unicode="&#xe018;" d="M77.798 655.376l81.414-50.882c50.802 81.114 128.788 143.454 221.208 174.246l-30.366 91.094c-113.748-37.898-209.728-114.626-272.256-214.458zM673.946 869.834l-30.366-91.094c92.422-30.792 170.404-93.132 221.208-174.248l81.412 50.882c-62.526 99.834-158.506 176.562-272.254 214.46zM607.974 255.992c-4.808 0-9.692 1.090-14.286 3.386l-145.688 72.844v211.778c0 17.672 14.328 32 32 32s32-14.328 32-32v-172.222l110.31-55.156c15.806-7.902 22.214-27.124 14.31-42.932-5.604-11.214-16.908-17.696-28.646-17.698zM512 768c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 96c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.058 0 288-128.942 288-288s-128.942-288-288-288z" />
-<glyph unicode="&#xe019;" d="M64 504.254c45.318 49.92 97.162 92.36 153.272 125.124 90.332 52.744 192.246 80.622 294.728 80.622 102.48 0 204.396-27.878 294.726-80.624 56.112-32.764 107.956-75.204 153.274-125.124v117.432c-33.010 28.118-68.124 53.14-104.868 74.594-105.006 61.314-223.658 93.722-343.132 93.722s-238.128-32.408-343.134-93.72c-36.742-21.454-71.856-46.478-104.866-74.596v-117.43zM512 640c-183.196 0-345.838-100.556-448-256 102.162-155.448 264.804-256 448-256s345.838 100.552 448 256c-102.162 155.444-264.804 256-448 256zM512 448c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.348 28.654 64 64 64s64-28.652 64-64zM728.066 263.338c-67.434-39.374-140.128-59.338-216.066-59.338s-148.632 19.964-216.066 59.338c-51.554 30.104-98.616 71.31-138.114 120.662 39.498 49.35 86.56 90.558 138.116 120.66 13.276 7.752 26.758 14.74 40.426 20.982-10.512-23.742-16.362-50.008-16.362-77.642 0-106.040 85.962-192 192-192 106.040 0 192 85.96 192 192 0 27.634-5.85 53.9-16.36 77.642 13.6
 68-6.244 27.15-13.23 40.426-20.982 51.554-30.102 98.616-71.31 138.116-120.66-39.498-49.352-86.56-90.558-138.116-120.662z" />
-<glyph unicode="&#xe01a;" d="M651.168 676.166c-24.612 81.962-28.876 91.834-107.168 91.834h-64c-79.618 0-82.664-10.152-108.418-96 0-0.002 0-0.002-0.002-0.004l-143.998-479.996h113.636l57.6 192h226.366l57.6-192h113.63l-145.246 484.166zM437.218 512l38.4 136c10.086 33.618 36.38 30 36.38 30s26.294 3.618 36.38-30h0.004l38.4-136h-149.564z" />
-<glyph unicode="&#xe01b;" d="M64 768v-704h896v704h-896zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-192v128h192zM128 448h192v-128h-192v128zM704 448h192v-128h-192v128zM704 512v128h192v-128h-192zM128 256h192v-128h-192v128zM704 128v128h192v-128h-192z" />
-<glyph unicode="&#xe01c;" d="M64 512h896v-128h-896z" />
-<glyph unicode="&#xe01d;" d="M64 192h512v-128h-512v128zM768 768h-220.558l-183.766-512h-132.288l183.762 512h-223.15v128h576v-128zM929.774 64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774-62.226-62.226z" />
-<glyph unicode="&#xe01e;" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
-<glyph unicode="&#xe01f;" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
-<glyph unicode="&#xe020;" d="M704 128v37.004c151.348 61.628 256 193.82 256 346.996 0 212.078-200.576 384-448 384s-448-171.922-448-384c0-153.176 104.654-285.368 256-346.996v-37.004h-192l-64 96v-224h320v222.812c-100.9 51.362-170.666 161.54-170.666 289.188 0 176.732 133.718 320 298.666 320s298.666-143.268 298.666-320c0-127.648-69.766-237.826-170.666-289.188v-222.812h320v224l-64-96h-192z" />
-<glyph unicode="&#xe021;" d="M512 820c99.366 0 192.782-38.694 263.042-108.956s108.958-163.678 108.958-263.044-38.696-192.782-108.958-263.042-163.676-108.958-263.042-108.958-192.782 38.696-263.044 108.958-108.956 163.676-108.956 263.042 38.694 192.782 108.956 263.044 163.678 108.956 263.044 108.956zM512 896c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448v0zM320 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM576 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM512 304c-101.84 0-192.56 36.874-251.166 94.328 23.126-117.608 126.778-206.328 251.166-206.328s228.040 88.72 251.168 206.328c-58.608-57.454-149.328-94.328-251.168-94.328z" />
-<glyph unicode="&#xe022;" d="M256 832h512v-128h-512v128zM896 640h-768c-35.2 0-64-28.8-64-64v-256c0-35.2 28.796-64 64-64h128v-192h512v192h128c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64zM704 128h-384v256h384v-256zM910.4 544c0-25.626-20.774-46.4-46.398-46.4s-46.402 20.774-46.402 46.4 20.778 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
-<glyph unicode="&#xe023;" d="M480 576l-192 192 128 128h-352v-352l128 128 192-192zM640 480l192 192 128-128v352h-352l128-128-192-192zM544 320l192-192-128-128h352v352l-128-128-192 192zM384 416l-192-192-128 128v-352h352l-128 128 192 192z" />
-<glyph unicode="&#xe024;" d="M960 832v64h-192c-35.202 0-64-28.8-64-64v-320c0-15.856 5.858-30.402 15.496-41.614l-303.496-260.386-142 148-82-70 224-288 416 448h128v64h-192v320h192zM256 448h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192h128v-192zM128 704v128h128v-128h-128zM640 512v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64zM448 832h128v-128h-128v128zM448 640h128v-128h-128v128z" />
-<glyph unicode="&#xe025;" d="M448 448h-128v128h128v128h128v-128h128v-128h-128v-128h-128v128zM960 384v-320h-896v320h128v-192h640v192h128z" />
-<glyph unicode="&#xe026;" d="M512 576h128v-64h-128zM512 192h128v-64h-128zM576 384h128v-64h-128zM768 384v-192h-64v-64h128v256zM384 384h128v-64h-128zM320 192h128v-64h-128zM320 576h128v-64h-128zM192 768v-256h64v192h64v64zM704 512h128v256h-64v-192h-64zM64 896v-896h896v896h-896zM896 64h-768v768h768v-768zM192 384v-256h64v192h64v64zM576 768h128v-64h-128zM384 768h128v-64h-128z" />
-<glyph unicode="&#xe027;" d="M816 896l16-384h-640l16 384h32l16-320h512l16 320h32zM208 0l-16 320h640l-16-320h-32l-16 256h-512l-16-256h-32zM64 448h128v-64h-128zM256 448h128v-64h-128zM448 448h128v-64h-128zM640 448h128v-64h-128zM832 448h128v-64h-128z" />
-<glyph unicode="&#xe028;" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
-<glyph unicode="&#xe02a;" d="M625.442 465.818c48.074 38.15 78.558 94.856 78.558 158.182 0 114.876-100.29 208-224 208h-224v-768h288c123.712 0 224 93.124 224 208 0 88.196-59.118 163.562-142.558 193.818zM384 656c0 26.51 21.49 48 48 48h67.204c42.414 0 76.796-42.98 76.796-96s-34.382-96-76.796-96h-115.204v144zM547.2 192h-115.2c-26.51 0-48 21.49-48 48v144h163.2c42.418 0 76.8-42.98 76.8-96s-34.382-96-76.8-96z" />
-<glyph unicode="&#xe02b;" d="M832 832v-64h-144l-256-640h144v-64h-448v64h144l256 640h-144v64h448z" />
-<glyph unicode="&#xe02c;" d="M192 128h576v-64h-576v64zM640 832v-384c0-31.312-14.7-61.624-41.39-85.352-30.942-27.502-73.068-42.648-118.61-42.648-45.544 0-87.668 15.146-118.608 42.648-26.692 23.728-41.392 54.040-41.392 85.352v384h-128v-384c0-141.382 128.942-256 288-256s288 114.618 288 256v384h-128z" />
-<glyph unicode="&#xe02d;" d="M960 448h-265.876c-50.078 35.42-114.43 54.86-182.124 54.86-89.206 0-164.572 50.242-164.572 109.712s75.366 109.714 164.572 109.714c75.058 0 140.308-35.576 159.12-82.286h113.016c-7.93 50.644-37.58 97.968-84.058 132.826-50.88 38.16-117.676 59.174-188.078 59.174-70.404 0-137.196-21.014-188.074-59.174-54.788-41.090-86.212-99.502-86.212-160.254s31.424-119.164 86.212-160.254c1.956-1.466 3.942-2.898 5.946-4.316h-265.872v-64h512.532c58.208-17.106 100.042-56.27 100.042-100.572 0-59.468-75.368-109.71-164.572-109.71-75.060 0-140.308 35.574-159.118 82.286h-113.016c7.93-50.64 37.582-97.968 84.060-132.826 50.876-38.164 117.668-59.18 188.072-59.18 70.402 0 137.198 21.016 188.074 59.174 54.79 41.090 86.208 99.502 86.208 160.254 0 35.298-10.654 69.792-30.294 100.572h204.012v64z" />
-<glyph unicode="&#xe02e;" d="M384 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448z" />
-<glyph unicode="&#xe02f;" d="M448 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM64 64l224 192-224 192z" />
-<glyph unicode="&#xe030;" d="M320 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM960 448l-224-192 224-192z" />
-<glyph unicode="&#xe031;" d="M832 640h-192v64l-192 192h-384v-704h384v-192h576v448l-192 192zM832 549.49l101.49-101.49h-101.49v101.49zM448 805.49l101.49-101.49h-101.49v101.49zM128 832h256v-192h192v-384h-448v576zM960 64h-448v128h128v384h128v-192h192v-320z" />
-<glyph unicode="&#xe032;" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
-<glyph unicode="&#xe034;" d="M928 832h-416l-32 64h-352l-64-128h896zM840.34 256h87.66l32 448h-896l64-640h356.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM874.996 110.25l-134.496 110.692c17.454 28.922 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l110.692-134.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM576 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
-<glyph unicode="&#xe035;" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h576v576h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM832 64h-448v448h448v-448zM448 448v-128h32l32 64h64v-192h-48v-64h160v64h-48v192h64l32-64h32v128z" />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe000;" glyph-name="save" d="M960 80v591.938l-223.938 224.062h-592.062c-44.182 0-80-35.816-80-80v-736c0-44.184 35.818-80 80-80h736c44.184 0 80 35.816 80 80zM576 768h64v-192h-64v192zM704 128h-384v255.882c0.034 0.042 0.076 0.082 0.116 0.118h383.77c0.040-0.036 0.082-0.076 0.116-0.118l-0.002-255.882zM832 128h-64v256c0 35.2-28.8 64-64 64h-384c-35.2 0-64-28.8-64-64v-256h-64v640h64v-192c0-35.2 28.8-64 64-64h320c35.2 0 64 28.8 64 64v171.010l128-128.072v-490.938z" />
+<glyph unicode="&#xe001;" glyph-name="newdocument" d="M850.746 717.254l-133.492 133.49c-24.888 24.892-74.054 45.256-109.254 45.256h-416c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h640c35.2 0 64 28.8 64 64v544c0 35.2-20.366 84.364-45.254 109.254zM805.49 672.002c6.792-6.796 13.792-19.162 18.894-32.002h-184.384v184.386c12.84-5.1 25.204-12.1 32-18.896l133.49-133.488zM831.884 64h-639.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.77c0.034 0.040 0.076 0.082 0.114 0.114h383.886v-256h256v-511.884c-0.034-0.040-0.076-0.082-0.116-0.116z" />
+<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
+<glyph unicode="&#xe003;" glyph-name="alignleft" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h576v-128h-576zM64 192h576v-128h-576z" />
+<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM256 576h512v-128h-512zM256 192h512v-128h-512z" />
+<glyph unicode="&#xe005;" glyph-name="alignright" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM384 576h576v-128h-576zM384 192h576v-128h-576z" />
+<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M64 768h896v-128h-896zM64 384h896v-128h-896zM64 576h896v-128h-896zM64 192h896v-128h-896z" />
+<glyph unicode="&#xe007;" glyph-name="cut" d="M864.408 289.868c-46.47 46.47-106.938 68.004-161.082 62.806l-63.326 63.326 192 192c0 0 128 128 0 256l-320-320-320 320c-128-128 0-256 0-256l192-192-63.326-63.326c-54.144 5.198-114.61-16.338-161.080-62.806-74.98-74.98-85.112-186.418-22.626-248.9 62.482-62.482 173.92-52.354 248.9 22.626 46.47 46.468 68.002 106.938 62.806 161.080l63.326 63.326 63.328-63.328c-5.196-54.144 16.336-114.61 62.806-161.078 74.978-74.98 186.418-85.112 248.898-22.626 62.488 62.482 52.356 173.918-22.624 248.9zM353.124 201.422c-2.212-24.332-15.020-49.826-35.14-69.946-22.212-22.214-51.080-35.476-77.218-35.476-10.524 0-25.298 2.228-35.916 12.848-21.406 21.404-17.376 73.132 22.626 113.136 22.212 22.214 51.080 35.476 77.218 35.476 10.524 0 25.298-2.228 35.916-12.848 13.112-13.11 13.47-32.688 12.514-43.19zM512 352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zM819.152 108.848c-10.62-10.62-25.392-12.848-35.916-12.84
 8-26.138 0-55.006 13.262-77.218 35.476-20.122 20.12-32.928 45.614-35.138 69.946-0.958 10.502-0.6 30.080 12.514 43.192 10.618 10.622 25.39 12.848 35.916 12.848 26.136 0 55.006-13.262 77.216-35.474 40.004-40.008 44.032-91.736 22.626-113.14z" />
+<glyph unicode="&#xe008;" glyph-name="paste" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h384l192 192v384h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM704 90.51v101.49h101.49l-101.49-101.49zM832 256h-192v-192h-256v448h448v-256z" />
+<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M888 576h-56v256h64v64h-320v-64h64v-256h-256v256h64v64h-320v-64h64v-256h-56c-39.6 0-72-32.4-72-72v-432c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v312h128v-312c0-39.6 32.4-72 72-72h240c39.6 0 72 32.4 72 72v432c0 39.6-32.4 72-72 72zM348 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM860 64h-184c-19.8 0-36 14.4-36 32s16.2 32 36 32h184c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
+<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM128 768c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 448c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM128 128c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z" />
+<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 832h576v-128h-576zM384 512h576v-128h-576zM384 192h576v-128h-576zM320 430v146h-64v320h-128v-64h64v-256h-64v-64h128v-50l-128-60v-146h128v-64h-128v-64h128v-64h-128v-64h192v320h-128v50z" />
+<glyph unicode="&#xe00c;" glyph-name="indent" d="M64 768h896v-128h-896zM384 384h576v-128h-576zM384 576h576v-128h-576zM64 192h896v-128h-896zM64 576l224-160-224-160z" />
+<glyph unicode="&#xe00d;" glyph-name="outdent" d="M64 768h896v-128h-896zM64 384h576v-128h-576zM64 576h576v-128h-576zM64 192h896v-128h-896zM960 576l-224-160 224-160z" />
+<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M256.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.954-10.578-19.034-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498zM768.428 535.274c105.8 0 191.572-91.17 191.572-203.638 0-112.464-85.772-203.636-191.572-203.636-105.802 0-191.572 91.17-191.572 203.636l-0.856 29.092c0 224.93 171.54 407.272 383.144 407.272v-116.364c-73.1 0-141.826-30.26-193.516-85.204-9.956-10.578-19.036-21.834-27.224-33.656 9.784 1.64 19.806 2.498 30.024 2.498z" />
+<glyph unicode="&#xe00f;" glyph-name="undo" d="M704 0c59 199 134.906 455.266-256 446.096v-222.096l-336.002 336 336.002 336v-217.326c468.092 12.2 544-358.674 256-678.674z" />
+<glyph unicode="&#xe010;" glyph-name="redo" d="M576 678.674v217.326l336.002-336-336.002-336v222.096c-390.906 9.17-315-247.096-256-446.096-288 320-212.092 690.874 256 678.674z" />
+<glyph unicode="&#xe011;" glyph-name="unlink" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.
 304-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM352 250c-9.724 0-19.45 3.71-26.87 11.128-14.84 14.84-14.84 38.898 0 53.738l320 320c14.84 14.84 38.896 14.84 53.736 0 14.844-14.84 14.844-38.9 0-53.74l-320-320c-7.416-7.416-17.142-11.126-26.866-11.126z" />
+<glyph unicode="&#xe012;" glyph-name="link" d="M927.274 729.784l-133.49 133.488c-21.104 21.104-49.232 32.728-79.198 32.728s-58.094-11.624-79.196-32.726l-165.492-165.49c-43.668-43.668-43.668-114.724 0-158.392l2.746-2.746 67.882 67.882-2.746 2.746c-6.132 6.132-6.132 16.494 0 22.626l165.492 165.492c4.010 4.008 8.808 4.608 11.312 4.608s7.302-0.598 11.312-4.61l133.49-133.488c6.132-6.134 6.132-16.498 0.002-22.628l-165.494-165.494c-4.008-4.008-8.806-4.608-11.31-4.608s-7.302 0.6-11.312 4.612l-2.746 2.746-67.88-67.884 2.742-2.742c21.106-21.108 49.23-32.728 79.2-32.728s58.094 11.624 79.196 32.726l165.494 165.492c43.662 43.666 43.662 114.72-0.004 158.39zM551.356 359.356l-67.882-67.882 2.746-2.746c4.008-4.008 4.61-8.806 4.61-11.31 0-2.506-0.598-7.302-4.606-11.314l-165.494-165.49c-4.010-4.010-8.81-4.61-11.314-4.61s-7.304 0.6-11.314 4.61l-133.492 133.486c-4.010 4.010-4.61 8.81-4.61 11.314s0.598 7.3 4.61 11.312l165.49 165.488c4.010 4.012 8.81 4.612 11.314 4.612s7.30
 4-0.6 11.314-4.612l2.746-2.742 67.882 67.88-2.746 2.746c-21.104 21.104-49.23 32.726-79.196 32.726s-58.092-11.624-79.196-32.726l-165.488-165.486c-21.106-21.104-32.73-49.234-32.73-79.198s11.624-58.094 32.726-79.198l133.49-133.49c21.106-21.102 49.232-32.726 79.198-32.726s58.092 11.624 79.196 32.726l165.494 165.492c21.104 21.104 32.722 49.23 32.722 79.196s-11.624 58.094-32.726 79.196l-2.744 2.746zM800 122c-9.724 0-19.45 3.708-26.87 11.13l-128 127.998c-14.844 14.84-14.844 38.898 0 53.738 14.84 14.844 38.896 14.844 53.736 0l128-128c14.844-14.84 14.844-38.896 0-53.736-7.416-7.422-17.142-11.13-26.866-11.13zM608 0c-17.674 0-32 14.326-32 32v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-128c0-17.674-14.326-32-32-32zM928 320h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32h128c17.674 0 32-14.326 32-32s-14.326-32-32-32zM224 774c9.724 0 19.45-3.708 26.87-11.13l128-128c14.842-14.84 14.842-38.898 0-53.738-14.84-14.844-38.898-14.844-53.738 0l-128 128c-14.842 14.84-14.842 38.898 0 53.738 7.418 7.422 17
 .144 11.13 26.868 11.13zM416 896c17.674 0 32-14.326 32-32v-128c0-17.674-14.326-32-32-32s-32 14.326-32 32v128c0 17.674 14.326 32 32 32zM96 576h128c17.674 0 32-14.326 32-32s-14.326-32-32-32h-128c-17.674 0-32 14.326-32 32s14.326 32 32 32z" />
+<glyph unicode="&#xe013;" glyph-name="bookmark" d="M256 896v-896l256 256 256-256v896h-512zM704 170.51l-192 192-192-192v661.49h384v-661.49z" />
+<glyph unicode="&#xe014;" glyph-name="image" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM896 128.116c-0.012-0.014-0.030-0.028-0.042-0.042l-191.958 319.926-160-128-224 288-191.968-479.916c-0.010 0.010-0.022 0.022-0.032 0.032v639.77c0.034 0.040 0.076 0.082 0.114 0.114h767.77c0.040-0.034 0.082-0.076 0.116-0.116v-639.768zM640 608c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96s-96-42.981-96-96z" />
+<glyph unicode="&#xe015;" glyph-name="media" d="M896 832h-768c-35.2 0-64-28.8-64-64v-640c0-35.2 28.8-64 64-64h768c35.2 0 64 28.8 64 64v640c0 35.2-28.8 64-64 64zM256 128h-128v128h128v-128zM256 384h-128v128h128v-128zM256 640h-128v128h128v-128zM704 128h-384v640h384v-640zM896 128h-128v128h128v-128zM896 384h-128v128h128v-128zM896 640h-128v128h128v-128zM384 640v-384l288 192z" />
+<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128v128zM704 704c35.346 0 64-28.654 64-64v-166l-228-154h-92v64l192 128v64h-320v128h384zM512 896c-119.666 0-232.166-46.6-316.784-131.216-84.614-84.618-131.216-197.118-131.216-316.784 0-119.664 46.602-232.168 131.216-316.784 84.618-84.616 197.118-131.216 316.784-131.216 119.664 0 232.168 46.6 316.784 131.216s131.216 197.12 131.216 316.784c0 119.666-46.6 232.166-131.216 316.784-84.616 84.616-197.12 131.216-316.784 131.216z" />
+<glyph unicode="&#xe017;" glyph-name="code" d="M416 256l-192 192 192 192-64 64-256-256 256-256zM672 704l-64-64 192-192-192-192 64-64 256 256z" />
+<glyph unicode="&#xe018;" glyph-name="insertdatetime" d="M77.798 655.376l81.414-50.882c50.802 81.114 128.788 143.454 221.208 174.246l-30.366 91.094c-113.748-37.898-209.728-114.626-272.256-214.458zM673.946 869.834l-30.366-91.094c92.422-30.792 170.404-93.132 221.208-174.248l81.412 50.882c-62.526 99.834-158.506 176.562-272.254 214.46zM607.974 255.992c-4.808 0-9.692 1.090-14.286 3.386l-145.688 72.844v211.778c0 17.672 14.328 32 32 32s32-14.328 32-32v-172.222l110.31-55.156c15.806-7.902 22.214-27.124 14.31-42.932-5.604-11.214-16.908-17.696-28.646-17.698zM512 768c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384zM512 96c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.058 0 288-128.942 288-288s-128.942-288-288-288z" />
+<glyph unicode="&#xe019;" glyph-name="preview" d="M64 504.254c45.318 49.92 97.162 92.36 153.272 125.124 90.332 52.744 192.246 80.622 294.728 80.622 102.48 0 204.396-27.878 294.726-80.624 56.112-32.764 107.956-75.204 153.274-125.124v117.432c-33.010 28.118-68.124 53.14-104.868 74.594-105.006 61.314-223.658 93.722-343.132 93.722s-238.128-32.408-343.134-93.72c-36.742-21.454-71.856-46.478-104.866-74.596v-117.43zM512 640c-183.196 0-345.838-100.556-448-256 102.162-155.448 264.804-256 448-256s345.838 100.552 448 256c-102.162 155.444-264.804 256-448 256zM512 448c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.348 28.654 64 64 64s64-28.652 64-64zM728.066 263.338c-67.434-39.374-140.128-59.338-216.066-59.338s-148.632 19.964-216.066 59.338c-51.554 30.104-98.616 71.31-138.114 120.662 39.498 49.35 86.56 90.558 138.116 120.66 13.276 7.752 26.758 14.74 40.426 20.982-10.512-23.742-16.362-50.008-16.362-77.642 0-106.040 85.962-192 192-192 106.040 0 192 85.96 192 192 0 27.
 634-5.85 53.9-16.36 77.642 13.668-6.244 27.15-13.23 40.426-20.982 51.554-30.102 98.616-71.31 138.116-120.66-39.498-49.352-86.56-90.558-138.116-120.662z" />
+<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M651.168 676.166c-24.612 81.962-28.876 91.834-107.168 91.834h-64c-79.618 0-82.664-10.152-108.418-96 0-0.002 0-0.002-0.002-0.004l-143.998-479.996h113.636l57.6 192h226.366l57.6-192h113.63l-145.246 484.166zM437.218 512l38.4 136c10.086 33.618 36.38 30 36.38 30s26.294 3.618 36.38-30h0.004l38.4-136h-149.564z" />
+<glyph unicode="&#xe01b;" glyph-name="table" d="M64 768v-704h896v704h-896zM384 320v128h256v-128h-256zM640 256v-128h-256v128h256zM640 640v-128h-256v128h256zM320 640v-128h-192v128h192zM128 448h192v-128h-192v128zM704 448h192v-128h-192v128zM704 512v128h192v-128h-192zM128 256h192v-128h-192v128zM704 128v128h192v-128h-192z" />
+<glyph unicode="&#xe01c;" glyph-name="hr" d="M64 512h896v-128h-896z" />
+<glyph unicode="&#xe01d;" glyph-name="removefromat" d="M64 192h512v-128h-512v128zM768 768h-220.558l-183.766-512h-132.288l183.762 512h-223.15v128h576v-128zM929.774 64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774-62.226-62.226z" />
+<glyph unicode="&#xe01e;" glyph-name="subscript" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe01f;" glyph-name="superscript" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 128v37.004c151.348 61.628 256 193.82 256 346.996 0 212.078-200.576 384-448 384s-448-171.922-448-384c0-153.176 104.654-285.368 256-346.996v-37.004h-192l-64 96v-224h320v222.812c-100.9 51.362-170.666 161.54-170.666 289.188 0 176.732 133.718 320 298.666 320s298.666-143.268 298.666-320c0-127.648-69.766-237.826-170.666-289.188v-222.812h320v224l-64-96h-192z" />
+<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 820c99.366 0 192.782-38.694 263.042-108.956s108.958-163.678 108.958-263.044-38.696-192.782-108.958-263.042-163.676-108.958-263.042-108.958-192.782 38.696-263.044 108.958-108.956 163.676-108.956 263.042 38.694 192.782 108.956 263.044 163.678 108.956 263.044 108.956zM512 896c-247.424 0-448-200.576-448-448s200.576-448 448-448 448 200.576 448 448-200.576 448-448 448v0zM320 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM576 576c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM512 304c-101.84 0-192.56 36.874-251.166 94.328 23.126-117.608 126.778-206.328 251.166-206.328s228.040 88.72 251.168 206.328c-58.608-57.454-149.328-94.328-251.168-94.328z" />
+<glyph unicode="&#xe022;" glyph-name="print" d="M256 832h512v-128h-512v128zM896 640h-768c-35.2 0-64-28.8-64-64v-256c0-35.2 28.796-64 64-64h128v-192h512v192h128c35.2 0 64 28.8 64 64v256c0 35.2-28.8 64-64 64zM704 128h-384v256h384v-256zM910.4 544c0-25.626-20.774-46.4-46.398-46.4s-46.402 20.774-46.402 46.4 20.778 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
+<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M480 576l-192 192 128 128h-352v-352l128 128 192-192zM640 480l192 192 128-128v352h-352l128-128-192-192zM544 320l192-192-128-128h352v352l-128-128-192 192zM384 416l-192-192-128 128v-352h352l-128 128 192 192z" />
+<glyph unicode="&#xe024;" glyph-name="spellcheck" d="M960 832v64h-192c-35.202 0-64-28.8-64-64v-320c0-15.856 5.858-30.402 15.496-41.614l-303.496-260.386-142 148-82-70 224-288 416 448h128v64h-192v320h192zM256 448h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192h128v-192zM128 704v128h128v-128h-128zM640 512v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64zM448 832h128v-128h-128v128zM448 640h128v-128h-128v128z" />
+<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 448h-128v128h128v128h128v-128h128v-128h-128v-128h-128v128zM960 384v-320h-896v320h128v-192h640v192h128z" />
+<glyph unicode="&#xe026;" glyph-name="template" d="M512 576h128v-64h-128zM512 192h128v-64h-128zM576 384h128v-64h-128zM768 384v-192h-64v-64h128v256zM384 384h128v-64h-128zM320 192h128v-64h-128zM320 576h128v-64h-128zM192 768v-256h64v192h64v64zM704 512h128v256h-64v-192h-64zM64 896v-896h896v896h-896zM896 64h-768v768h768v-768zM192 384v-256h64v192h64v64zM576 768h128v-64h-128zM384 768h128v-64h-128z" />
+<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M816 896l16-384h-640l16 384h32l16-320h512l16 320h32zM208 0l-16 320h640l-16-320h-32l-16 256h-512l-16-256h-32zM64 448h128v-64h-128zM256 448h128v-64h-128zM448 448h128v-64h-128zM640 448h128v-64h-128zM832 448h128v-64h-128z" />
+<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
+<glyph unicode="&#xe02a;" glyph-name="bold" d="M625.442 465.818c48.074 38.15 78.558 94.856 78.558 158.182 0 114.876-100.29 208-224 208h-224v-768h288c123.712 0 224 93.124 224 208 0 88.196-59.118 163.562-142.558 193.818zM384 656c0 26.51 21.49 48 48 48h67.204c42.414 0 76.796-42.98 76.796-96s-34.382-96-76.796-96h-115.204v144zM547.2 192h-115.2c-26.51 0-48 21.49-48 48v144h163.2c42.418 0 76.8-42.98 76.8-96s-34.382-96-76.8-96z" />
+<glyph unicode="&#xe02b;" glyph-name="italic" d="M832 832v-64h-144l-256-640h144v-64h-448v64h144l256 640h-144v64h448z" />
+<glyph unicode="&#xe02c;" glyph-name="underline" d="M192 128h576v-64h-576v64zM640 832v-384c0-31.312-14.7-61.624-41.39-85.352-30.942-27.502-73.068-42.648-118.61-42.648-45.544 0-87.668 15.146-118.608 42.648-26.692 23.728-41.392 54.040-41.392 85.352v384h-128v-384c0-141.382 128.942-256 288-256s288 114.618 288 256v384h-128z" />
+<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M960 448h-265.876c-50.078 35.42-114.43 54.86-182.124 54.86-89.206 0-164.572 50.242-164.572 109.712s75.366 109.714 164.572 109.714c75.058 0 140.308-35.576 159.12-82.286h113.016c-7.93 50.644-37.58 97.968-84.058 132.826-50.88 38.16-117.676 59.174-188.078 59.174-70.404 0-137.196-21.014-188.074-59.174-54.788-41.090-86.212-99.502-86.212-160.254s31.424-119.164 86.212-160.254c1.956-1.466 3.942-2.898 5.946-4.316h-265.872v-64h512.532c58.208-17.106 100.042-56.27 100.042-100.572 0-59.468-75.368-109.71-164.572-109.71-75.060 0-140.308 35.574-159.118 82.286h-113.016c7.93-50.64 37.582-97.968 84.060-132.826 50.876-38.164 117.668-59.18 188.072-59.18 70.402 0 137.198 21.016 188.074 59.174 54.79 41.090 86.208 99.502 86.208 160.254 0 35.298-10.654 69.792-30.294 100.572h204.012v64z" />
+<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448z" />
+<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM64 64l224 192-224 192z" />
+<glyph unicode="&#xe030;" glyph-name="rtl" d="M320 832c-123.712 0-224-100.288-224-224s100.288-224 224-224v-320h128v640h64v-640h128v640h128v128h-448zM960 448l-224-192 224-192z" />
+<glyph unicode="&#xe031;" glyph-name="copy" d="M832 640h-192v64l-192 192h-384v-704h384v-192h576v448l-192 192zM832 549.49l101.49-101.49h-101.49v101.49zM448 805.49l101.49-101.49h-101.49v101.49zM128 832h256v-192h192v-384h-448v576zM960 64h-448v128h128v384h128v-192h192v-320z" />
+<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
+<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM840.34 256h87.66l32 448h-896l64-640h356.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM874.996 110.25l-134.496 110.692c17.454 28.922 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l110.692-134.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM576 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
+<glyph unicode="&#xe035;" glyph-name="pastetext" d="M704 576v160c0 17.6-14.4 32-32 32h-160v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-160c-17.602 0-32-14.4-32-32v-512c0-17.6 14.398-32 32-32h224v-192h576v576h-192zM320 831.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 640v64h384v-64h-384zM832 64h-448v448h448v-448zM448 448v-128h32l32 64h64v-192h-48v-64h160v64h-48v192h64l32-64h32v128z" />
+<glyph unicode="&#xe603;" glyph-name="codesample" d="M200.015 577.994v103.994c0 43.077 34.919 77.997 77.997 77.997h26v103.994h-26c-100.51 0-181.991-81.481-181.991-181.991v-103.994c0-43.077-34.919-77.997-77.997-77.997h-26v-103.994h26c43.077 0 77.997-34.919 77.997-77.997v-103.994c0-100.509 81.481-181.991 181.991-181.991h26v103.994h-26c-43.077 0-77.997 34.919-77.997 77.997v103.994c0 50.927-20.928 96.961-54.642 129.994 33.714 33.032 54.642 79.065 54.642 129.994zM823.985 577.994v103.994c0 43.077-34.919 77.997-77.997 77.997h-26v103.994h26c100.509 0 181.991-81.481 181.991-181.991v-103.994c0-43.077 34.919-77.997 77.997-77.997h26v-103.994h-26c-43.077 0-77.997-34.919-77.997-77.997v-103.994c0-100.509-81.482-181.991-181.991-181.991h-26v103.994h26c43.077 0 77.997 34.919 77.997 77.997v103.994c0 50.927 20.928 96.961 54.642 129.994-33.714 33.032-54.642 79.065-54.642 129.994zM615.997 603.277c0-57.435-46.56-103.994-103.994-103.994s-103.994 46.56-103.994 103.994c0 57.43
 5 46.56 103.994 103.994 103.994s103.994-46.56 103.994-103.994zM512 448.717c-57.435 0-103.994-46.56-103.994-103.994 0-55.841 26-100.107 105.747-103.875-23.715-33.413-59.437-46.608-105.747-50.94v-61.747c0 0 207.991-18.144 207.991 216.561-0.202 57.437-46.56 103.996-103.994 103.996z" />
</ins><span class="cx" style="display: block; padding: 0 10px"> </font></defs></svg>
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallttf"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesmallwoff"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.woff</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymceeot"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcejson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.json                               (rev 0)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.json 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,1972 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "selection": [
+               {
+                       "order": 0,
+                       "id": 0,
+                       "prevSize": 32,
+                       "code": 58882,
+                       "name": "invert",
+                       "tempChar": ""
+               },
+               {
+                       "id": 0,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57396,
+                       "name": "browse",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57394,
+                       "name": "resize",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 2,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57393,
+                       "name": "copy",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 3,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57392,
+                       "name": "rtl",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 4,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57391,
+                       "name": "ltr",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 5,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57390,
+                       "name": "visualchars",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 6,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57389,
+                       "name": "strikethrough",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 7,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57388,
+                       "name": "underline",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 8,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57387,
+                       "name": "italic",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 9,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57386,
+                       "name": "bold",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 11,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57384,
+                       "name": "restoredraft",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 12,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57383,
+                       "name": "pagebreak",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 13,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57382,
+                       "name": "template",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 14,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57381,
+                       "name": "nonbreaking",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 15,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57380,
+                       "name": "spellchecker",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 19,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57376,
+                       "name": "charmap",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 20,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57375,
+                       "name": "sup",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 21,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57374,
+                       "name": "sub",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 22,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57373,
+                       "name": "removeformat",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 23,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57372,
+                       "name": "hr",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 24,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57371,
+                       "name": "table",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 25,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57370,
+                       "name": "forecolor",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 26,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57369,
+                       "name": "preview",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 27,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57368,
+                       "name": "inserttime",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 28,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57367,
+                       "name": "code",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 29,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57366,
+                       "name": "help",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 30,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57365,
+                       "name": "media",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 31,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57364,
+                       "name": "image",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 32,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57363,
+                       "name": "anchor",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 33,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57362,
+                       "name": "unlink",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 34,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57361,
+                       "name": "link",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 38,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57357,
+                       "name": "outdent",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 39,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57356,
+                       "name": "indent",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 40,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57355,
+                       "name": "numlist",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 41,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57354,
+                       "name": "bullist",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 42,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57353,
+                       "name": "searchreplace",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 43,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57352,
+                       "name": "paste",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 44,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57351,
+                       "name": "cut",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 45,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57350,
+                       "name": "alignjustify",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 46,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57349,
+                       "name": "alignright",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 47,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57348,
+                       "name": "aligncenter",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 48,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57347,
+                       "name": "alignleft",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 49,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57346,
+                       "name": "fullpage",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 50,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57345,
+                       "name": "newdocument",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 51,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57344,
+                       "name": "save",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 52,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57395,
+                       "name": "checkbox",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 53,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57397,
+                       "name": "pastetext",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 16,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57379,
+                       "name": "fullscreen",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 17,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57378,
+                       "name": "print",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 18,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57377,
+                       "name": "emoticons",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 37,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57358,
+                       "name": "blockquote",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 36,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57359,
+                       "name": "undo",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "id": 35,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 57360,
+                       "name": "redo",
+                       "ligatures": "",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1,
+                       "prevSize": 32,
+                       "code": 58883,
+                       "name": "codesample",
+                       "tempChar": ""
+               },
+               {
+                       "id": 87,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 59700,
+                       "ligatures": "droplet, color9",
+                       "name": "drop",
+                       "tempChar": ""
+               },
+               {
+                       "id": 635,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60327,
+                       "ligatures": "diamond2, gem2",
+                       "name": "sharpen",
+                       "tempChar": ""
+               },
+               {
+                       "id": 854,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60628,
+                       "ligatures": "contrast",
+                       "name": "contrast",
+                       "tempChar": ""
+               },
+               {
+                       "id": 24,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60778,
+                       "ligatures": "cross2, cancel3",
+                       "name": "cross2",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1097,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60921,
+                       "ligatures": "arrow-resize2, diagonal2",
+                       "name": "arrow-resize2",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1,
+                       "prevSize": 32,
+                       "code": 58880,
+                       "name": "gamma",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 0,
+                       "prevSize": 32,
+                       "code": 58881,
+                       "name": "orientation",
+                       "tempChar": ""
+               },
+               {
+                       "id": 68,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 59668,
+                       "ligatures": "pencil7, write7",
+                       "name": "editimage",
+                       "tempChar": ""
+               },
+               {
+                       "id": 22,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60072,
+                       "ligatures": "rotate-ccw3, ccw4",
+                       "name": "rotateleft",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1679,
+                       "prevSize": 32,
+                       "code": 60073,
+                       "ligatures": "rotate-cw3, cw4",
+                       "name": "rotateright",
+                       "tempChar": ""
+               },
+               {
+                       "id": 403,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60074,
+                       "ligatures": "flip-vertical, mirror",
+                       "name": "flipv",
+                       "tempChar": ""
+               },
+               {
+                       "id": 405,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60076,
+                       "ligatures": "flip-horizontal, mirror3",
+                       "name": "fliph",
+                       "tempChar": ""
+               },
+               {
+                       "id": 534,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60213,
+                       "ligatures": "zoom-in3, magnifier9",
+                       "name": "zoomin",
+                       "tempChar": ""
+               },
+               {
+                       "id": 535,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60214,
+                       "ligatures": "zoom-out3, magnifier10",
+                       "name": "zoomout",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1448,
+                       "prevSize": 32,
+                       "code": 60522,
+                       "ligatures": "menu3, list4",
+                       "name": "options",
+                       "tempChar": ""
+               },
+               {
+                       "id": 844,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60620,
+                       "ligatures": "sun2, weather21",
+                       "name": "sun",
+                       "tempChar": ""
+               },
+               {
+                       "id": 855,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60621,
+                       "ligatures": "moon, night",
+                       "name": "moon",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1056,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 60864,
+                       "ligatures": "arrow-left, left4",
+                       "name": "arrowleft",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1201,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 61048,
+                       "ligatures": "crop, resize",
+                       "name": "crop",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1680,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58884,
+                       "name": "tablerowprops",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1681,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58885,
+                       "name": "tablecellprops",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1682,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58886,
+                       "name": "table2",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1683,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58887,
+                       "name": "tablemergecells",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1684,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58888,
+                       "name": "tableinsertcolbefore",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1685,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58889,
+                       "name": "tableinsertcolafter",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1686,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58890,
+                       "name": "tableinsertrowbefore",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1687,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58891,
+                       "name": "tableinsertrowafter",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1688,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58893,
+                       "name": "tablesplitcells",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1689,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58894,
+                       "name": "tabledelete",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1690,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58922,
+                       "name": "tableleftheader",
+                       "tempChar": ""
+               },
+               {
+                       "id": 1691,
+                       "order": 0,
+                       "prevSize": 32,
+                       "code": 58923,
+                       "name": "tabletopheader",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1693,
+                       "prevSize": 32,
+                       "code": 59392,
+                       "name": "tabledeleterow",
+                       "tempChar": ""
+               },
+               {
+                       "order": 0,
+                       "id": 1692,
+                       "prevSize": 32,
+                       "code": 59393,
+                       "name": "tabledeletecol",
+                       "tempChar": ""
+               }
+       ],
+       "metadata": {
+               "name": "tinymce",
+               "iconsHash": 757772004
+       },
+       "height": 1024,
+       "prevSize": 32,
+       "icons": [
+               {
+                       "paths": [
+                               "M892.8 982.4l-89.6-89.6c-70.4 80-172.8 131.2-288 131.2-208 0-380.8-166.4-384-377.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s0-3.2 0-6.4v0c0 0 0 0 0-3.2 0 0 0-3.2 0-3.2 3.2-105.6 48-211.2 105.6-304l-192-192 44.8-44.8 182.4 182.4c0 0 0 0 0 0l569.6 569.6c0 0 0 0 0 0l99.2 99.2-48 44.8zM896 633.6c0 0 0 0 0 0 0-3.2 0-6.4 0-6.4-9.6-316.8-384-627.2-384-627.2s-108.8 89.6-208 220.8l70.4 70.4c6.4-9.6 16-22.4 22.4-32 41.6-51.2 83.2-96 115.2-128v0c32 32 73.6 76.8 115.2 128 108.8 137.6 169.6 265.6 172.8 371.2 0 0 0 3.2 0 3.2v0 0c0 3.2 0 3.2 0 6.4s0 3.2 0 3.2v0 0c0 22.4-3.2 41.6-9.6 64l76.8 76.8c16-41.6 28.8-89.6 28.8-137.6 0 0 0 0 0 0 0-3.2 0-3.2 0-6.4s-0-3.2-0-6.4z"
+                       ],
+                       "attrs": [
+                               {}
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "invert"
+                       ],
+                       "grid": 16,
+                       "defaultCode": 58882
+               },
+               {
+                       "paths": [
+                               "M928 128h-416l-32-64h-352l-64 128h896zM904.34 704h74.86l44.8-448h-1024l64 640h484.080c-104.882-37.776-180.080-138.266-180.080-256 0-149.982 122.018-272 272-272 149.98 0 272 122.018 272 272 0 21.678-2.622 43.15-7.66 64zM1002.996 913.75l-198.496-174.692c17.454-28.92 27.5-62.814 27.5-99.058 0-106.040-85.96-192-192-192s-192 85.96-192 192 85.96 192 192 192c36.244 0 70.138-10.046 99.058-27.5l174.692 198.496c22.962 26.678 62.118 28.14 87.006 3.252l5.492-5.492c24.888-24.888 23.426-64.044-3.252-87.006zM640 764c-68.484 0-124-55.516-124-124s55.516-124 124-124 124 55.516 124 124-55.516 124-124 124z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "defaultCode": 57396,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M768 256h64v64h-64zM640 384h64v64h-64zM640 512h64v64h-64zM640 640h64v64h-64zM512 512h64v64h-64zM512 640h64v64h-64zM384 640h64v64h-64zM768 384h64v64h-64zM768 512h64v64h-64zM768 640h64v64h-64zM768 768h64v64h-64zM640 768h64v64h-64zM512 768h64v64h-64zM384 768h64v64h-64zM256 768h64v64h-64z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "resize",
+                               "dots"
+                       ],
+                       "defaultCode": 57394,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M832 256h-192v-64l-192-192h-448v768h384v256h640v-576l-192-192zM832 346.51l101.49 101.49h-101.49v-101.49zM448 90.51l101.49 101.49h-101.49v-101.49zM64 64h320v192h192v448h-512v-640zM960 960h-512v-192h192v-448h128v192h192v448z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "copy"
+                       ],
+                       "defaultCode": 57393,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M256 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM960 896l-256-224 256-224z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "rtl"
+                       ],
+                       "defaultCode": 57392,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M448 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224zM64 448l256 224-256 224z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "ltr"
+                       ],
+                       "defaultCode": 57391,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M384 64h512v128h-128v768h-128v-768h-128v768h-128v-448c-123.712 0-224-100.288-224-224s100.288-224 224-224z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "visualchars"
+                       ],
+                       "defaultCode": 57390,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M731.42 517.036c63.92 47.938 100.58 116.086 100.58 186.964s-36.66 139.026-100.58 186.964c-59.358 44.518-137.284 69.036-219.42 69.036-82.138 0-160.062-24.518-219.42-69.036-63.92-47.938-100.58-116.086-100.58-186.964h128c0 69.382 87.926 128 192 128 104.074 0 192-58.618 192-128 0-69.382-87.926-128-192-128-82.138 0-160.062-24.518-219.42-69.036-63.92-47.94-100.58-116.086-100.58-186.964 0-70.878 36.66-139.024 100.58-186.964 59.358-44.518 137.282-69.036 219.42-69.036 82.136 0 160.062 24.518 219.42 69.036 63.92 47.94 100.58 116.086 100.58 186.964h-128c0-69.382-87.926-128-192-128-104.074 0-192 58.618-192 128 0 69.382 87.926 128 192 128 82.136 0 160.062 24.518 219.42 69.036zM0 512h1024v64h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "strikethrough"
+                       ],
+                       "defaultCode": 57389,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494 53.8 0 103.75-18.29 140.646-51.494 33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "underline"
+                       ],
+                       "defaultCode": 57388,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "italic"
+                       ],
+                       "defaultCode": 57387,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "bold0"
+                       ],
+                       "defaultCode": 57386,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M576 64c247.424 0 448 200.576 448 448s-200.576 448-448 448v-96c94.024 0 182.418-36.614 248.902-103.098 66.484-66.484 103.098-154.878 103.098-248.902 0-94.022-36.614-182.418-103.098-248.902-66.484-66.484-154.878-103.098-248.902-103.098-94.022 0-182.418 36.614-248.902 103.098-51.14 51.138-84.582 115.246-97.306 184.902h186.208l-224 256-224-256h164.57c31.060-217.102 217.738-384 443.43-384zM768 448v128h-256v-320h128v192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "restoredraft"
+                       ],
+                       "defaultCode": 57384,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "pagebreak"
+                       ],
+                       "defaultCode": 57383,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M384 192h128v64h-128zM576 192h128v64h-128zM896 192v256h-192v-64h128v-128h-64v-64zM320 384h128v64h-128zM512 384h128v64h-128zM192 256v128h64v64h-128v-256h192v64zM384 576h128v64h-128zM576 576h128v64h-128zM896 576v256h-192v-64h128v-128h-64v-64zM320 768h128v64h-128zM512 768h128v64h-128zM192 640v128h64v64h-128v-256h192v64zM960 64h-896v896h896v-896zM1024 0v0 1024h-1024v-1024h1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "template"
+                       ],
+                       "defaultCode": 57382,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M448 576h-192v-128h192v-192h128v192h192v128h-192v192h-128zM1024 640v384h-1024v-384h128v256h768v-256z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "nonbreaking"
+                       ],
+                       "defaultCode": 57381,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M128 256h128v192h64v-384c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v384h64v-192zM128 64h128v128h-128v-128zM960 64v-64h-192c-35.202 0-64 28.8-64 64v320c0 35.2 28.798 64 64 64h192v-64h-192v-320h192zM640 160v-96c0-35.2-28.8-64-64-64h-192v448h192c35.2 0 64-28.8 64-64v-96c0-35.2-8.8-64-44-64 35.2 0 44-28.8 44-64zM576 384h-128v-128h128v128zM576 192h-128v-128h128v128zM832 576l-416 448-224-288 82-70 142 148 352-302z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "spellchecker"
+                       ],
+                       "defaultCode": 57380,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M704 896h256l64-128v256h-384v-214.214c131.112-56.484 224-197.162 224-361.786 0-214.432-157.598-382.266-352-382.266-194.406 0-352 167.832-352 382.266 0 164.624 92.886 305.302 224 361.786v214.214h-384v-256l64 128h256v-32.59c-187.63-66.46-320-227.402-320-415.41 0-247.424 229.23-448 512-448 282.77 0 512 200.576 512 448 0 188.008-132.37 348.95-320 415.41v32.59z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "charmap"
+                       ],
+                       "defaultCode": 57376,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M768 206v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "sup"
+                       ],
+                       "defaultCode": 57375,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M768 910v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM676 256h-136l-188 188-188-188h-136l256 256-256 256h136l188-188 188 188h136l-256-256z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "sub"
+                       ],
+                       "defaultCode": 57374,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 896h576v128h-576zM192 0h704v128h-704zM277.388 832l204.688-784.164 123.85 32.328-196.25 751.836zM929.774 1024l-129.774-129.774-129.774 129.774-62.226-62.226 129.774-129.774-129.774-129.774 62.226-62.226 129.774 129.774 129.774-129.774 62.226 62.226-129.774 129.774 129.774 129.774z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "removeformat"
+                       ],
+                       "defaultCode": 57373,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 448h1024v128h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "hr"
+                       ],
+                       "defaultCode": 57372,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v896h1024v-896h-1024zM384 640v-192h256v192h-256zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "table"
+                       ],
+                       "defaultCode": 57371,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M322.018 832l57.6-192h264.764l57.6 192h113.632l-191.996-640h-223.236l-192 640h113.636zM475.618 320h72.764l57.6 192h-187.964l57.6-192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "forecolor"
+                       ],
+                       "defaultCode": 57370,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 320c-209.368 0-395.244 100.556-512 256 116.756 155.446 302.632 256 512 256 209.368 0 395.244-100.554 512-256-116.756-155.444-302.632-256-512-256zM448 448c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64 28.654-64 64-64zM773.616 705.296c-39.648 20.258-81.652 35.862-124.846 46.376-44.488 10.836-90.502 16.328-136.77 16.328-46.266 0-92.282-5.492-136.768-16.324-43.194-10.518-85.198-26.122-124.846-46.376-63.020-32.202-120.222-76.41-167.64-129.298 47.418-52.888 104.62-97.1 167.64-129.298 32.336-16.522 66.242-29.946 101.082-40.040-19.888 30.242-31.468 66.434-31.468 105.336 0 106.040 85.962 192 192 192 106.038 0 192-85.96 192-192 0-38.902-11.582-75.094-31.466-105.34 34.838 10.096 68.744 23.52 101.082 40.042 63.022 32.198 120.218 76.408 167.638 129.298-47.42 52.886-104.618 97.1-167.638 129.296zM860.918 243.722c-108.72-55.554-226.112-83.722-348.918-83.722-122.806 0-240.198 28.168-348.918 83.722-58.772 30.032-113.732 67.904-163.082 112.076v109.206c55.338-58.566 120.694-1
 07.754 192.194-144.29 99.62-50.904 207.218-76.714 319.806-76.714s220.186 25.81 319.804 76.716c71.502 36.536 136.858 85.724 192.196 144.29v-109.206c-49.35-44.174-104.308-82.046-163.082-112.078z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "preview"
+                       ],
+                       "defaultCode": 57369,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 192c-212.076 0-384 171.922-384 384s171.922 384 384 384c212.074 0 384-171.922 384-384s-171.926-384-384-384zM715.644 779.646c-54.392 54.396-126.716 84.354-203.644 84.354s-149.25-29.958-203.646-84.354c-54.396-54.394-84.354-126.718-84.354-203.646s29.958-149.25 84.354-203.646c54.396-54.396 126.718-84.354 203.646-84.354s149.252 29.958 203.642 84.354c54.402 54.396 84.358 126.718 84.358 203.646s-29.958 149.252-84.356 203.646zM325.93 203.862l-42.94-85.878c-98.874 49.536-179.47 130.132-229.006 229.008l85.876 42.94c40.248-80.336 105.732-145.822 186.070-186.070zM884.134 389.93l85.878-42.938c-49.532-98.876-130.126-179.472-229.004-229.008l-42.944 85.878c80.338 40.248 145.824 105.732 186.070 186.068zM512 384h-64v192c0 10.11 4.7 19.11 12.022 24.972l-0.012 0.016 160 128 39.976-49.976-147.986-118.39v-176.622z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "inserttime"
+                       ],
+                       "defaultCode": 57368,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M320 256l-256 256 256 256h128l-256-256 256-256zM704 256h-128l256 256-256 256h128l256-256z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "code"
+                       ],
+                       "defaultCode": 57367,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M448 704h128v128h-128zM704 256c35.346 0 64 28.654 64 64v192l-192 128h-128v-64l192-128v-64h-320v-128h384zM512 96c-111.118 0-215.584 43.272-294.156 121.844s-121.844 183.038-121.844 294.156c0 111.118 43.272 215.584 121.844 294.156 78.572 78.572 183.038 121.844 294.156 121.844 111.118 0 215.584-43.272 294.156-121.844 78.572-78.572 121.844-183.038 121.844-294.156 0-111.118-43.272-215.584-121.844-294.156-78.572-78.572-183.038-121.844-294.156-121.844zM512 0v0c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512 0-282.77 229.23-512 512-512z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "help"
+                       ],
+                       "defaultCode": 57366,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 128v768h1024v-768h-1024zM192 832h-128v-128h128v128zM192 576h-128v-128h128v128zM192 320h-128v-128h128v128zM768 832h-512v-640h512v640zM960 832h-128v-128h128v128zM960 576h-128v-128h128v128zM960 320h-128v-128h128v128zM384 320v384l256-192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "media"
+                       ],
+                       "defaultCode": 57365,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 128v832h1024v-832h-1024zM960 896h-896v-704h896v704zM704 352c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96-53.019 0-96-42.981-96-96zM896 832h-768l192-512 256 320 128-96z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "image"
+                       ],
+                       "defaultCode": 57364,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M192 0v1024l320-320 320 320v-1024h-640zM768 869.49l-256-256-256 256v-805.49h512v805.49z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "anchor"
+                       ],
+                       "defaultCode": 57363,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M476.888 675.114c4.56 9.048 6.99 19.158 6.99 29.696 0 17.616-6.744 34.058-18.992 46.308l-163.38 163.38c-12.248 12.248-28.696 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.38-99.38c-12.248-12.25-18.992-28.696-18.992-46.308s6.744-34.060 18.992-46.308l163.38-163.382c12.248-12.246 28.696-18.992 46.308-18.992 10.538 0 20.644 2.43 29.696 6.988l65.338-65.336c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.38 163.382c-60.67 60.67-60.67 159.95 0 220.618l99.38 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.38-163.38c55.82-55.82 60.238-144.298 13.344-205.346l-65.34 65.338zM978.496 144.884l-99.38-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.97 15.166-110.306 45.502l-163.382 163.382c-55.82 55.82-60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.246-12.248 28.694-18.994 46.306-18.994 17.616 0 34.060 6.746 4
 6.308 18.994l99.38 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.38 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.504l163.38-163.38c60.672-60.666 60.672-159.944 0-220.614zM233.368 278.624l-191.994-191.994 45.256-45.256 191.994 191.994zM384 0h64v192h-64zM0 384h192v64h-192zM790.632 745.376l191.996 191.996-45.256 45.256-191.996-191.996zM576 832h64v192h-64zM832 576h192v64h-192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "unlink"
+                       ],
+                       "defaultCode": 57362,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M320 704c17.6 17.6 47.274 16.726 65.942-1.942l316.118-316.116c18.668-18.668 19.54-48.342 1.94-65.942s-47.274-16.726-65.942 1.942l-316.116 316.116c-18.668 18.668-19.542 48.342-1.942 65.942zM476.888 675.112c4.56 9.050 6.99 19.16 6.99 29.696 0 17.616-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992s-34.060-6.744-46.308-18.992l-99.382-99.382c-12.248-12.248-18.992-28.694-18.992-46.308s6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994 10.536 0 20.644 2.43 29.696 6.99l65.338-65.338c-27.87-21.41-61.44-32.16-95.034-32.16-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-60.67 60.67-60.67 159.948 0 220.618l99.382 99.382c30.334 30.332 70.32 45.5 110.306 45.5 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c55.82-55.82 60.238-144.298 13.344-205.344l-65.34 65.34zM978.498 144.884l-99.382-99.382c-30.334-30.336-70.32-45.502-110.308-45.502-39.986 0-79.972 15.166-110.308 45.502l-163.382 163.382c-55.82 55.82-
 60.238 144.298-13.342 205.342l65.338-65.34c-4.558-9.050-6.988-19.16-6.988-29.694 0-17.616 6.744-34.060 18.992-46.308l163.382-163.382c12.248-12.248 28.694-18.994 46.308-18.994s34.060 6.746 46.308 18.994l99.382 99.382c12.248 12.248 18.992 28.694 18.992 46.308s-6.744 34.060-18.992 46.308l-163.382 163.382c-12.248 12.248-28.694 18.992-46.308 18.992-10.536 0-20.644-2.43-29.696-6.99l-65.338 65.338c27.872 21.41 61.44 32.16 95.034 32.16 39.988 0 79.974-15.168 110.308-45.502l163.382-163.382c60.67-60.666 60.67-159.944 0-220.614z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "link"
+                       ],
+                       "defaultCode": 57361,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM256 320v384l-256-192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "outdent"
+                       ],
+                       "defaultCode": 57357,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 448h640v128h-640zM384 640h640v128h-640zM0 832h1024v128h-1024zM0 704v-384l256 192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "indent"
+                       ],
+                       "defaultCode": 57356,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "numlist"
+                       ],
+                       "defaultCode": 57355,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "bullist"
+                       ],
+                       "defaultCode": 57354,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M64 0h384v64h-384zM576 0h384v64h-384zM952 320h-56v-256h-256v256h-256v-256h-256v256h-56c-39.6 0-72 32.4-72 72v560c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-376h128v376c0 39.6 32.4 72 72 72h304c39.6 0 72-32.4 72-72v-560c0-39.6-32.4-72-72-72zM348 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32zM544 512h-64c-17.6 0-32-14.4-32-32s14.4-32 32-32h64c17.6 0 32 14.4 32 32s-14.4 32-32 32zM924 960h-248c-19.8 0-36-14.4-36-32s16.2-32 36-32h248c19.8 0 36 14.4 36 32s-16.2 32-36 32z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "searchreplace"
+                       ],
+                       "defaultCode": 57353,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h448l192-192v-512h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM832 933.49v-101.49h101.49l-101.49 101.49zM960 768h-192v192h-320v-576h512v384z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "paste"
+                       ],
+                       "defaultCode": 57352,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M890.774 709.154c-45.654-45.556-103.728-69.072-157.946-69.072h-29.112l-63.904-64.008 255.62-256.038c63.904-64.010 63.904-192.028 0-256.038l-383.43 384.056-383.432-384.054c-63.904 64.008-63.904 192.028 0 256.038l255.622 256.034-63.906 64.008h-29.114c-54.22 0-112.292 23.518-157.948 69.076-81.622 81.442-92.65 202.484-24.63 270.35 29.97 29.902 70.288 44.494 112.996 44.494 54.216 0 112.29-23.514 157.946-69.072 53.584-53.464 76.742-124 67.084-185.348l65.384-65.488 65.376 65.488c-9.656 61.348 13.506 131.882 67.084 185.348 45.662 45.558 103.732 69.072 157.948 69.072 42.708 0 83.024-14.592 112.994-44.496 68.020-67.866 56.988-188.908-24.632-270.35zM353.024 845.538c-7.698 17.882-19.010 34.346-33.626 48.926-14.636 14.604-31.172 25.918-49.148 33.624-16.132 6.916-32.96 10.568-48.662 10.568-15.146 0-36.612-3.402-52.862-19.612-16.136-16.104-19.52-37.318-19.52-52.288 0-15.542 3.642-32.21 10.526-48.212 7.7-17.884 19.014-34.346 33.626-48.926 14.634-14.606 31.172-25.914 49.15-33.624 16.134-6.
 914 32.96-10.568 48.664-10.568 15.146 0 36.612 3.4 52.858 19.614 16.134 16.098 19.522 37.316 19.522 52.284 0.002 15.542-3.638 32.216-10.528 48.214zM512.004 666.596c-49.914 0-90.376-40.532-90.376-90.526 0-49.992 40.462-90.52 90.376-90.52s90.372 40.528 90.372 90.52c0 49.998-40.46 90.526-90.372 90.526zM855.272 919.042c-16.248 16.208-37.712 19.612-52.86 19.612-15.704 0-32.53-3.652-48.666-10.568-17.972-7.706-34.508-19.020-49.142-33.624-14.614-14.58-25.926-31.042-33.626-48.926-6.886-15.998-10.526-32.672-10.526-48.212 0-14.966 3.384-36.188 19.52-52.286 16.246-16.208 37.712-19.614 52.86-19.614 15.7 0 32.53 3.654 48.66 10.568 17.978 7.708 34.516 19.018 49.15 33.624 14.61 14.58 25.924 31.042 33.626 48.926 6.884 15.998 10.526 32.67 10.526 48.212-0.002 14.97-3.39 36.186-19.522 52.288z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "cut"
+                       ],
+                       "defaultCode": 57351,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM0 256h1024v128h-1024zM0 448h1024v128h-1024zM0 640h1024v128h-1024zM0 832h1024v128h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "alignjustify"
+                       ],
+                       "defaultCode": 57350,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "alignright"
+                       ],
+                       "defaultCode": 57349,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "aligncenter"
+                       ],
+                       "defaultCode": 57348,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "alignleft"
+                       ],
+                       "defaultCode": 57347,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M1024 592.458v-160.916l-159.144-15.914c-8.186-30.042-20.088-58.548-35.21-84.98l104.596-127.838-113.052-113.050-127.836 104.596c-26.434-15.124-54.942-27.026-84.982-35.208l-15.914-159.148h-160.916l-15.914 159.146c-30.042 8.186-58.548 20.086-84.98 35.208l-127.838-104.594-113.050 113.050 104.596 127.836c-15.124 26.432-27.026 54.94-35.21 84.98l-159.146 15.916v160.916l159.146 15.914c8.186 30.042 20.086 58.548 35.21 84.982l-104.596 127.836 113.048 113.048 127.838-104.596c26.432 15.124 54.94 27.028 84.98 35.21l15.916 159.148h160.916l15.914-159.144c30.042-8.186 58.548-20.088 84.982-35.21l127.836 104.596 113.048-113.048-104.596-127.836c15.124-26.434 27.028-54.942 35.21-84.98l159.148-15.92zM704 576l-128 128h-128l-128-128v-128l128-128h128l128 128v128z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "fullpage"
+                       ],
+                       "defaultCode": 57346,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M903.432 199.43l-142.864-142.862c-31.112-31.112-92.568-56.568-136.568-56.568h-480c-44 0-80 36-80 80v864c0 44 36 80 80 80h736c44 0 80-36 80-80v-608c0-44-25.456-105.458-56.568-136.57zM858.178 244.686c3.13 3.13 6.25 6.974 9.28 11.314h-163.458v-163.456c4.34 3.030 8.184 6.15 11.314 9.28l142.864 142.862zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16h480c4.832 0 10.254 0.61 16 1.704v254.296h254.296c1.094 5.746 1.704 11.166 1.704 16v608z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "newdocument"
+                       ],
+                       "defaultCode": 57345,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h74.978l53.022 53.018v714.982z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "save"
+                       ],
+                       "defaultCode": 57344,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M128 544l288 288 480-480-128-128-352 352-160-160z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "defaultCode": 57395,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 512v128h32l32-64h64v256h-48v64h224v-64h-48v-256h64l32 64h32v-128zM832 320v-160c0-17.6-14.4-32-32-32h-224v-64c0-35.2-28.8-64-64-64h-128c-35.204 0-64 28.8-64 64v64h-224c-17.602 0-32 14.4-32 32v640c0 17.6 14.398 32 32 32h288v192h640v-704h-192zM384 64.114c0.034-0.038 0.072-0.078 0.114-0.114h127.768c0.042 0.036 0.082 0.076 0.118 0.114l0 63.886h-128v-63.886zM192 256v-64h512v64h-512zM960 960h-512v-576h512v576z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "pastetext"
+                       ],
+                       "defaultCode": 57397,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M1024 0v384l-138.26-138.26-212 212-107.48-107.48 212-212-138.26-138.26zM245.74 138.26l212 212-107.48 107.48-212-212-138.26 138.26v-384h384zM885.74 778.26l138.26-138.26v384h-384l138.26-138.26-212-212 107.48-107.48zM457.74 673.74l-212 212 138.26 138.26h-384v-384l138.26 138.26 212-212z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "fullscreen"
+                       ],
+                       "defaultCode": 57379,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M256 64h512v128h-512zM960 256h-896c-35.2 0-64 28.8-64 64v320c0 35.2 28.796 64 64 64h192v256h512v-256h192c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64zM704 896h-384v-320h384v320zM974.4 352c0 25.626-20.774 46.4-46.398 46.4-25.626 0-46.402-20.774-46.402-46.4s20.776-46.4 46.402-46.4c25.626 0 46.398 20.774 46.398 46.4z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "print"
+                       ],
+                       "defaultCode": 57378,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 0c-282.77 0-512 229.228-512 512 0 282.77 229.228 512 512 512 282.77 0 512-229.23 512-512 0-282.772-229.23-512-512-512zM512 944c-238.586 0-432-193.412-432-432 0-238.586 193.414-432 432-432 238.59 0 432 193.414 432 432 0 238.588-193.41 432-432 432zM384 320c0 35.346-28.654 64-64 64s-64-28.654-64-64 28.654-64 64-64 64 28.654 64 64zM768 320c0 35.346-28.652 64-64 64s-64-28.654-64-64 28.652-64 64-64 64 28.654 64 64zM512 652c141.074 0 262.688-57.532 318.462-123.192-20.872 171.22-156.288 303.192-318.462 303.192-162.118 0-297.498-132.026-318.444-303.168 55.786 65.646 177.386 123.168 318.444 123.168z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "emoticons"
+                       ],
+                       "defaultCode": 57377,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M225 448c123.712 0 224 100.29 224 224 0 123.712-100.288 224-224 224-123.712 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.634 11.636-22.252 24.016-31.83 37.020 11.438-1.8 23.16-2.746 35.104-2.746zM801 448c123.71 0 224 100.29 224 224 0 123.712-100.29 224-224 224-123.71 0-224-100.288-224-224l-1-32c0-247.424 200.576-448 448-448v128c-85.474 0-165.834 33.286-226.274 93.726-11.636 11.636-22.254 24.016-31.832 37.020 11.44-1.8 23.16-2.746 35.106-2.746z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "blockquote"
+                       ],
+                       "defaultCode": 57358,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M761.862 1024c113.726-206.032 132.888-520.306-313.862-509.824v253.824l-384-384 384-384v248.372c534.962-13.942 594.57 472.214 313.862 775.628z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "undo"
+                       ],
+                       "defaultCode": 57359,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M576 248.372v-248.372l384 384-384 384v-253.824c-446.75-10.482-427.588 303.792-313.86 509.824-280.712-303.414-221.1-789.57 313.86-775.628z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "redo"
+                       ],
+                       "defaultCode": 57360,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M199.995 381.998v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-100.518 0-182.003 81.485-182.003 182.003v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 100.515 81.485 182.003 182.003 182.003h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-50.931-20.928-96.966-54.646-130.002 33.716-33.036 54.646-79.072 54.646-130.002z",
+                               "M824.005 381.998v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c100.515 0 182.003 81.485 182.003 182.003v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 100.515-81.488 182.003-182.003 182.003h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-50.931 20.928-96.966 54.646-130.002-33.716-33.036-54.646-79.072-54.646-130.002z",
+                               "M616.002 356.715c0 57.439-46.562 104.002-104.002 104.002s-104.002-46.562-104.002-104.002c0-57.439 46.562-104.002 104.002-104.002s104.002 46.562 104.002 104.002z",
+                               "M512 511.283c-57.439 0-104.002 46.562-104.002 104.002 0 55.845 26 100.115 105.752 103.88-23.719 33.417-59.441 46.612-105.752 50.944v61.751c0 0 208.003 18.144 208.003-216.577-0.202-57.441-46.56-104.004-104.002-104.004z"
+                       ],
+                       "width": 1024,
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "code",
+                               "semicolon",
+                               "curly-braces"
+                       ],
+                       "grid": 16,
+                       "defaultCode": 58883
+               },
+               {
+                       "paths": [
+                               "M864.626 473.162c-65.754-183.44-205.11-348.15-352.626-473.162-147.516 125.012-286.87 289.722-352.626 473.162-40.664 113.436-44.682 236.562 12.584 345.4 65.846 125.14 198.632 205.438 340.042 205.438s274.196-80.298 340.040-205.44c57.27-108.838 53.25-231.962 12.586-345.398zM738.764 758.956c-43.802 83.252-132.812 137.044-226.764 137.044-55.12 0-108.524-18.536-152.112-50.652 13.242 1.724 26.632 2.652 40.112 2.652 117.426 0 228.668-67.214 283.402-171.242 44.878-85.292 40.978-173.848 23.882-244.338 14.558 28.15 26.906 56.198 36.848 83.932 22.606 63.062 40.024 156.34-5.368 242.604z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "drop"
+                       ],
+                       "defaultCode": 57381,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M768 128h-512l-256 256 512 576 512-576-256-256zM512 778.666v-2.666h-2.37l-14.222-16h16.592v-16h-30.814l-14.222-16h45.036v-16h-59.258l-14.222-16h73.48v-16h-87.704l-14.222-16h101.926v-16h-116.148l-14.222-16h130.37v-16h-144.592l-14.222-16h158.814v-16h-173.038l-14.222-16h187.26v-16h-201.482l-14.222-16h215.704v-16h-229.926l-14.222-16h244.148v-16h-258.372l-14.222-16h272.594v-16h-286.816l-14.222-16h301.038v-16h-315.26l-14.222-16h329.482v-16h-343.706l-7.344-8.262 139.072-139.072h211.978v3.334h215.314l16 16h-231.314v16h247.314l16 16h-263.314v16h279.314l16 16h-295.314v16h311.314l16 16h-327.314v16h343.312l7.738 7.738-351.050 394.928z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "diamond",
+                               "gem",
+                               "jewelry",
+                               "dualtone"
+                       ],
+                       "defaultCode": 57889,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM128 512c0-212.078 171.922-384 384-384v768c-212.078 0-384-171.922-384-384z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "contrast"
+                       ],
+                       "defaultCode": 58104,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M893.254 221.254l-90.508-90.508-290.746 290.744-290.746-290.744-90.508 90.506 290.746 290.748-290.746 290.746 90.508 90.508 290.746-290.746 290.746 290.746 90.508-90.51-290.744-290.744z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "cross",
+                               "cancel",
+                               "close",
+                               "quit",
+                               "remove"
+                       ],
+                       "defaultCode": 60778,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v384c0 35.346 28.654 64 64 64s64-28.654 64-64v-229.488l677.488 677.488h-229.488c-35.346 0-64 28.652-64 64 0 35.346 28.654 64 64 64h384c35.346 0 64-28.654 64-64v-384c0-35.348-28.654-64-64-64s-64 28.652-64 64v229.488l-677.488-677.488h229.488c35.346 0 64-28.654 64-64s-28.652-64-64-64h-384c-35.346 0-64 28.654-64 64z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "arrow-resize",
+                               "diagonal"
+                       ],
+                       "defaultCode": 58329,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M483.2 640l-147.2-336c-9.6-25.6-19.2-44.8-25.6-54.4s-16-12.8-25.6-12.8c-16 0-25.6 3.2-28.8 3.2v-70.4c9.6-6.4 25.6-6.4 38.4-9.6 32 0 57.6 6.4 73.6 22.4 6.4 6.4 12.8 16 19.2 25.6 6.4 12.8 12.8 25.6 16 41.6l121.6 291.2 150.4-371.2h92.8l-198.4 470.4v224h-86.4v-224z",
+                               "M0 0v1024h1024v-1024h-1024zM960 960h-896v-896h896v896z"
+                       ],
+                       "attrs": [
+                               {},
+                               {}
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "gamma2"
+                       ],
+                       "grid": 16,
+                       "defaultCode": 58880
+               },
+               {
+                       "paths": [
+                               "M627.2 880h-579.2v-396.8h579.2v396.8zM553.6 553.6h-435.2v256h435.2v-256z",
+                               "M259.2 227.2c176-176 457.6-176 633.6 0s176 457.6 0 633.6c-121.6 121.6-297.6 160-454.4 108.8 121.6 28.8 262.4-9.6 361.6-108.8 150.4-150.4 160-384 22.4-521.6-121.6-121.6-320-128-470.4-19.2l86.4 86.4-294.4 22.4 22.4-294.4 92.8 92.8z"
+                       ],
+                       "attrs": [
+                               {},
+                               {}
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "orientation"
+                       ],
+                       "grid": 16,
+                       "defaultCode": 58881
+               },
+               {
+                       "paths": [
+                               "M768 544v352h-640v-640h352l128-128h-512c-52.8 0-96 43.2-96 96v704c0 52.8 43.2 96 96 96h704c52.798 0 96-43.2 96-96v-512l-128 128z",
+                               "M864 0l-608 608v160h160l608-608c0-96-64-160-160-160zM416 640l-48-48 480-480 48 48-480 480z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "pencil",
+                               "write",
+                               "edit"
+                       ],
+                       "defaultCode": 57361,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M607.998 128.014c-212.070 0-383.986 171.916-383.986 383.986h-191.994l246.848 246.848 246.848-246.848h-191.994c0-151.478 122.798-274.276 274.276-274.276 151.48 0 274.276 122.798 274.276 274.276 0 151.48-122.796 274.276-274.276 274.276v109.71c212.070 0 383.986-171.916 383.986-383.986s-171.916-383.986-383.986-383.986z"
+                       ],
+                       "width": 1024,
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "rotate-ccw",
+                               "ccw",
+                               "arrow"
+                       ],
+                       "defaultCode": 60072,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M416.002 128.014c212.070 0 383.986 171.916 383.986 383.986h191.994l-246.848 246.848-246.848-246.848h191.994c0-151.478-122.798-274.276-274.276-274.276-151.48 0-274.276 122.798-274.276 274.276 0 151.48 122.796 274.276 274.276 274.276v109.71c-212.070 0-383.986-171.916-383.986-383.986s171.916-383.986 383.986-383.986z"
+                       ],
+                       "width": 1024,
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "rotate-cw",
+                               "cw",
+                               "arrow"
+                       ],
+                       "defaultCode": 60073,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 384h1024v-384zM1024 960v-384h-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "flip-vertical",
+                               "mirror"
+                       ],
+                       "defaultCode": 57663,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M576 0v1024h384zM0 1024h384v-1024z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "flip-horizontal",
+                               "mirror"
+                       ],
+                       "defaultCode": 57664,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM448 192h-128v128h-128v128h128v128h128v-128h128v-128h-128z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "zoom-in",
+                               "magnifier",
+                               "magnifier-plus",
+                               "enlarge"
+                       ],
+                       "defaultCode": 57788,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M992.262 871.396l-242.552-206.294c-25.074-22.566-51.89-32.926-73.552-31.926 57.256-67.068 91.842-154.078 91.842-249.176 0-212.078-171.922-384-384-384-212.076 0-384 171.922-384 384 0 212.078 171.922 384 384 384 95.098 0 182.108-34.586 249.176-91.844-1 21.662 9.36 48.478 31.926 73.552l206.294 242.552c35.322 39.246 93.022 42.554 128.22 7.356s31.892-92.898-7.354-128.22zM384 640c-141.384 0-256-114.616-256-256s114.616-256 256-256 256 114.616 256 256-114.614 256-256 256zM192 320h384v128h-384z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "zoom-out",
+                               "magnifier",
+                               "magnifier-minus",
+                               "reduce"
+                       ],
+                       "defaultCode": 57789,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "menu",
+                               "list",
+                               "options",
+                               "lines",
+                               "hamburger"
+                       ],
+                       "defaultCode": 58031,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M512 832c35.346 0 64 28.654 64 64v64c0 35.346-28.654 64-64 64s-64-28.654-64-64v-64c0-35.346 28.654-64 64-64zM512 192c-35.346 0-64-28.654-64-64v-64c0-35.346 28.654-64 64-64s64 28.654 64 64v64c0 35.346-28.654 64-64 64zM960 448c35.346 0 64 28.654 64 64s-28.654 64-64 64h-64c-35.348 0-64-28.654-64-64s28.652-64 64-64h64zM192 512c0 35.346-28.654 64-64 64h-64c-35.346 0-64-28.654-64-64s28.654-64 64-64h64c35.346 0 64 28.654 64 64zM828.784 738.274l45.256 45.258c24.992 24.99 24.992 65.516 0 90.508-24.994 24.992-65.518 24.992-90.51 0l-45.256-45.256c-24.992-24.99-24.992-65.516 0-90.51 24.994-24.992 65.518-24.992 90.51-0zM195.216 285.726l-45.256-45.256c-24.994-24.994-24.994-65.516 0-90.51s65.516-24.994 90.51 0l45.256 45.256c24.994 24.994 24.994 65.516 0 90.51s-65.516 24.994-90.51 0zM828.784 285.726c-24.992 24.992-65.516 24.992-90.51 0-24.992-24.994-24.992-65.516 0-90.51l45.256-45.254c24.992-24.994 65.516-24.994 90.51 0 24.992 24.994 24.992 65.516 0 90.51l-45.256 45.254zM195.216 738.274c2
 4.992-24.992 65.518-24.992 90.508 0 24.994 24.994 24.994 65.52 0 90.51l-45.254 45.256c-24.994 24.992-65.516 24.992-90.51 0s-24.994-65.518 0-90.508l45.256-45.258z",
+                               "M512 256c-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256 141.382 0 256-114.618 256-256 0-141.384-114.616-256-256-256zM512 672c-88.366 0-160-71.634-160-160s71.634-160 160-160 160 71.634 160 160-71.634 160-160 160z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "sun",
+                               "weather"
+                       ],
+                       "defaultCode": 58094,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M715.812 64.48c-60.25-34.784-124.618-55.904-189.572-64.48 122.936 160.082 144.768 384.762 37.574 570.42-107.2 185.67-312.688 279.112-512.788 252.68 39.898 51.958 90.376 97.146 150.628 131.934 245.908 141.974 560.37 57.72 702.344-188.198 141.988-245.924 57.732-560.372-188.186-702.356z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "moon",
+                               "night",
+                               "sleep"
+                       ],
+                       "defaultCode": 58105,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M672 1024l192-192-320-320 320-320-192-192-512 512z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "arrow-left",
+                               "left",
+                               "previous"
+                       ],
+                       "defaultCode": 58291,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M832 256l192-192-64-64-192 192h-448v-192h-128v192h-192v128h192v512h512v192h128v-192h192v-128h-192v-448zM320 320h320l-320 320v-320zM384 704l320-320v320h-320z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "tags": [
+                               "crop",
+                               "resize",
+                               "cut"
+                       ],
+                       "defaultCode": 58428,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tablerowprops"
+                       ],
+                       "defaultCode": 58880,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v896h1024v-896h-1024zM640 704v192h-256v-192h256zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192zM704 896v-192h256v192h-256z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tablecellprops"
+                       ],
+                       "defaultCode": 58881,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-896v-192h896v192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "table2"
+                       ],
+                       "defaultCode": 58882,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v896h1024v-896h-1024zM384 896v-448h576v448h-576zM640 192v192h-256v-192h256zM320 192v192h-256v-192h256zM64 448h256v192h-256v-192zM704 384v-192h256v192h-256zM64 704h256v192h-256v-192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tablemergecells"
+                       ],
+                       "defaultCode": 58884,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M320 771.2v-182.4h-182.4v-89.6h182.4v-182.4h86.4v182.4h185.6v89.6h-185.6v182.4zM0 64v896h1024v-896h-1024zM640 896h-576v-704h576v704zM960 896h-256v-192h256v192zM960 640h-256v-192h256v192zM960 384h-256v-192h256v192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tableinsertcolbefore"
+                       ],
+                       "defaultCode": 58885,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M704 316.8v182.4h182.4v89.6h-182.4v182.4h-86.4v-182.4h-185.6v-89.6h185.6v-182.4zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-704h576v704z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tableinsertcolafter"
+                       ],
+                       "defaultCode": 58886,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M691.2 451.2h-144v144h-70.4v-144h-144v-67.2h144v-144h70.4v144h144zM0 64v896h1024v-896h-1024zM320 896h-256v-192h256v192zM640 896h-256v-192h256v192zM960 896h-256v-192h256v192zM960 643.2h-896v-451.2h896v451.2z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tableinsertrowbefore"
+                       ],
+                       "defaultCode": 58887,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M332.8 636.8h144v-144h70.4v144h144v67.2h-144v144h-70.4v-144h-144zM0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM64 192h256v192h-256v-192zM960 896h-896v-451.2h896v451.2zM960 384h-256v-192h256v192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tableinsertrowafter"
+                       ],
+                       "defaultCode": 58888,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v896h1024v-896h-1024zM384 192h256v192h-256v-192zM320 896h-256v-192h256v192zM320 640h-256v-192h256v192zM320 384h-256v-192h256v192zM960 896h-576v-448h576v448zM960 384h-256v-192h256v192zM864 803.2l-60.8 60.8-131.2-131.2-131.2 131.2-60.8-60.8 131.2-131.2-131.2-131.2 60.8-60.8 131.2 131.2 131.2-131.2 60.8 60.8-131.2 131.2z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tablesplitcells"
+                       ],
+                       "defaultCode": 58890,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64h1024v896h-1024v-896zM60.8 192v704h899.2v-704h-899.2zM809.6 748.8l-96 96-204.8-204.8-204.8 204.8-96-96 204.8-204.8-204.8-204.8 96-96 204.8 204.8 204.8-204.8 96 96-204.8 204.8z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tabledelete"
+                       ],
+                       "defaultCode": 58891,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v832h1024v-832h-1024zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM640 320h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192zM960 320h-256v-192h256v192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tableleftheader"
+                       ],
+                       "defaultCode": 58922,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M0 64v832h1024v-832h-1024zM320 832h-256v-192h256v192zM320 576h-256v-192h256v192zM640 832h-256v-192h256v192zM640 576h-256v-192h256v192zM960 832h-256v-192h256v192zM960 576h-256v-192h256v192z"
+                       ],
+                       "attrs": [
+                               {
+                                       "fill": "rgb(0, 0, 0)"
+                               }
+                       ],
+                       "isMulticolor": false,
+                       "tags": [
+                               "tabletopheader"
+                       ],
+                       "defaultCode": 58923,
+                       "grid": 16
+               },
+               {
+                       "paths": [
+                               "M886.4 387.2l-156.8 156.8 160 160-76.8 76.8-160-160-156.8 156.8-76.8-73.6 160-160-163.2-163.2 76.8-76.8 163.2 163.2 156.8-156.8 73.6 76.8zM0 64v896h1024v-896h-1024zM960 384h-22.4l-64 64h86.4v192h-89.6l64 64h25.6v192h-896v-192h310.4l64-64h-374.4v-192h371.2l-64-64h-307.2v-192h896v192z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "grid": 16,
+                       "tags": [
+                               "tabledeleterow"
+                       ],
+                       "defaultCode": 59392
+               },
+               {
+                       "paths": [
+                               "M320 460.8l64 64v12.8l-64 64v-140.8zM640 537.6l64 64v-137.6l-64 64v9.6zM1024 64v896h-1024v-896h1024zM960 192h-256v51.2l-12.8-12.8-51.2 51.2v-89.6h-256v89.6l-51.2-51.2-12.8 12.8v-51.2h-256v704h256v-118.4l35.2 35.2 28.8-28.8v115.2h256v-115.2l48 48 16-16v83.2h256v-707.2zM672 297.6l-156.8 156.8-163.2-163.2-76.8 76.8 163.2 163.2-156.8 156.8 76.8 76.8 156.8-156.8 160 160 76.8-76.8-160-160 156.8-156.8-76.8-76.8z"
+                       ],
+                       "attrs": [],
+                       "isMulticolor": false,
+                       "grid": 16,
+                       "tags": [
+                               "tabledeletecol"
+                       ],
+                       "defaultCode": 59393
+               }
+       ],
+       "preferences": {
+               "showGlyphs": true,
+               "showQuickUse": true,
+               "showQuickUse2": true,
+               "showSVGs": true,
+               "fontPref": {
+                       "prefix": "icon-",
+                       "metadata": {
+                               "fontFamily": "tinymce",
+                               "majorVersion": 1,
+                               "minorVersion": 0
+                       },
+                       "metrics": {
+                               "emSize": 1024,
+                               "baseline": 6.25,
+                               "whitespace": 50
+                       },
+                       "resetPoint": 58880,
+                       "embed": false
+               },
+               "imagePref": {
+                       "prefix": "icon-",
+                       "png": true,
+                       "useClassSelector": true,
+                       "color": 4473924,
+                       "bgColor": 16777215
+               },
+               "historySize": 100,
+               "gridSize": 16,
+               "showGrid": true,
+               "showCodes": true,
+               "showLiga": false
+       },
+       "IcoMoonType": "icon-set"
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcesvg"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,78 +6,93 @@
</span><span class="cx" style="display: block; padding: 0 10px"> <font id="tinymce" horiz-adv-x="1024">
</span><span class="cx" style="display: block; padding: 0 10px"> <font-face units-per-em="1024" ascent="960" descent="-64" />
</span><span class="cx" style="display: block; padding: 0 10px"> <missing-glyph horiz-adv-x="1024" />
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe000;" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
-<glyph unicode="&#xe001;" d="M903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" />
-<glyph unicode="&#xe002;" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
-<glyph unicode="&#xe003;" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
-<glyph unicode="&#xe004;" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
-<glyph unicode="&#xe005;" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
-<glyph unicode="&#xe006;" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
-<glyph unicode="&#xe007;" d="M890.774 250.846c-45.654 45.556-103.728 69.072-157.946 69.072h-29.112l-63.904 64.008 255.62 256.038c63.904 64.010 63.904 192.028 0 256.038l-383.43-384.056-383.432 384.054c-63.904-64.008-63.904-192.028 0-256.038l255.622-256.034-63.906-64.008h-29.114c-54.22 0-112.292-23.518-157.948-69.076-81.622-81.442-92.65-202.484-24.63-270.35 29.97-29.902 70.288-44.494 112.996-44.494 54.216 0 112.29 23.514 157.946 69.072 53.584 53.464 76.742 124 67.084 185.348l65.384 65.488 65.376-65.488c-9.656-61.348 13.506-131.882 67.084-185.348 45.662-45.558 103.732-69.072 157.948-69.072 42.708 0 83.024 14.592 112.994 44.496 68.020 67.866 56.988 188.908-24.632 270.35zM353.024 114.462c-7.698-17.882-19.010-34.346-33.626-48.926-14.636-14.604-31.172-25.918-49.148-33.624-16.132-6.916-32.96-10.568-48.662-10.568-15.146 0-36.612 3.402-52.862 19.612-16.136 16.104-19.52 37.318-19.52 52.288 0 15.542 3.642 32.21 10.526 48.212 7.7 17.884 19.014 34.346 33.626 48.926 14.634 14
 .606 31.172 25.914 49.15 33.624 16.134 6.914 32.96 10.568 48.664 10.568 15.146 0 36.612-3.4 52.858-19.614 16.134-16.098 19.522-37.316 19.522-52.284 0.002-15.542-3.638-32.216-10.528-48.214zM512.004 293.404c-49.914 0-90.376 40.532-90.376 90.526 0 49.992 40.462 90.52 90.376 90.52s90.372-40.528 90.372-90.52c0-49.998-40.46-90.526-90.372-90.526zM855.272 40.958c-16.248-16.208-37.712-19.612-52.86-19.612-15.704 0-32.53 3.652-48.666 10.568-17.972 7.706-34.508 19.020-49.142 33.624-14.614 14.58-25.926 31.042-33.626 48.926-6.886 15.998-10.526 32.672-10.526 48.212 0 14.966 3.384 36.188 19.52 52.286 16.246 16.208 37.712 19.614 52.86 19.614 15.7 0 32.53-3.654 48.66-10.568 17.978-7.708 34.516-19.018 49.15-33.624 14.61-14.58 25.924-31.042 33.626-48.926 6.884-15.998 10.526-32.67 10.526-48.212-0.002-14.97-3.39-36.186-19.522-52.288z" />
-<glyph unicode="&#xe008;" d="M832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h448l192 192v512h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM832 26.51v101.49h101.49l-101.49-101.49zM960 192h-192v-192h-320v576h512v-384z" />
-<glyph unicode="&#xe009;" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
-<glyph unicode="&#xe00a;" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
-<glyph unicode="&#xe00b;" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
-<glyph unicode="&#xe00c;" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
-<glyph unicode="&#xe00d;" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
-<glyph unicode="&#xe00e;" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
-<glyph unicode="&#xe00f;" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
-<glyph unicode="&#xe010;" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
-<glyph unicode="&#xe011;" d="M320 256c17.6-17.6 47.274-16.726 65.942 1.942l316.118 316.116c18.668 18.668 19.54 48.342 1.94 65.942s-47.274 16.726-65.942-1.942l-316.116-316.116c-18.668-18.668-19.542-48.342-1.942-65.942zM476.888 284.888c4.56-9.050 6.99-19.16 6.99-29.696 0-17.616-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.382 99.382c-12.248 12.248-18.992 28.694-18.992 46.308s6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994 10.536 0 20.644-2.43 29.696-6.99l65.338 65.338c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-60.67-60.67-60.67-159.948 0-220.618l99.382-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c55.82 55.82 60.238 144.298 13.344 205.344l-65.34-65.34zM978.498 815.116l-99.382 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.972-15.166-110.
 308-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994s34.060-6.746 46.308-18.994l99.382-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c60.67 60.666 60.67 159.944 0 220.614z" />
-<glyph unicode="&#xe012;" d="M476.888 284.886c4.56-9.048 6.99-19.158 6.99-29.696 0-17.616-6.744-34.058-18.992-46.308l-163.38-163.38c-12.248-12.248-28.696-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.38 99.38c-12.248 12.25-18.992 28.696-18.992 46.308s6.744 34.060 18.992 46.308l163.38 163.382c12.248 12.246 28.696 18.992 46.308 18.992 10.538 0 20.644-2.43 29.696-6.988l65.338 65.336c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.38-163.382c-60.67-60.67-60.67-159.95 0-220.618l99.38-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.38 163.38c55.82 55.82 60.238 144.298 13.344 205.346l-65.34-65.338zM978.496 815.116l-99.38 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.97-15.166-110.306-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.246 12.248 28.694 18.
 994 46.306 18.994 17.616 0 34.060-6.746 46.308-18.994l99.38-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.38-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.504l163.38 163.38c60.672 60.666 60.672 159.944 0 220.614zM233.368 681.376l-191.994 191.994 45.256 45.256 191.994-191.994zM384 960h64v-192h-64zM0 576h192v-64h-192zM790.632 214.624l191.996-191.996-45.256-45.256-191.996 191.996zM576 128h64v-192h-64zM832 384h192v-64h-192z" />
-<glyph unicode="&#xe013;" d="M192 960v-1024l320 320 320-320v1024h-640zM768 90.51l-256 256-256-256v805.49h512v-805.49z" />
-<glyph unicode="&#xe014;" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z" />
-<glyph unicode="&#xe015;" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
-<glyph unicode="&#xe016;" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
-<glyph unicode="&#xe017;" d="M320 704l-256-256 256-256h128l-256 256 256 256zM704 704h-128l256-256-256-256h128l256 256z" />
-<glyph unicode="&#xe018;" d="M512 768c-212.076 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384zM715.644 180.354c-54.392-54.396-126.716-84.354-203.644-84.354s-149.25 29.958-203.646 84.354c-54.396 54.394-84.354 126.718-84.354 203.646s29.958 149.25 84.354 203.646c54.396 54.396 126.718 84.354 203.646 84.354s149.252-29.958 203.642-84.354c54.402-54.396 84.358-126.718 84.358-203.646s-29.958-149.252-84.356-203.646zM325.93 756.138l-42.94 85.878c-98.874-49.536-179.47-130.132-229.006-229.008l85.876-42.94c40.248 80.336 105.732 145.822 186.070 186.070zM884.134 570.070l85.878 42.938c-49.532 98.876-130.126 179.472-229.004 229.008l-42.944-85.878c80.338-40.248 145.824-105.732 186.070-186.068zM512 576h-64v-192c0-10.11 4.7-19.11 12.022-24.972l-0.012-0.016 160-128 39.976 49.976-147.986 118.39v176.622z" />
-<glyph unicode="&#xe019;" d="M512 640c-209.368 0-395.244-100.556-512-256 116.756-155.446 302.632-256 512-256s395.244 100.554 512 256c-116.756 155.444-302.632 256-512 256zM448 512c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM773.616 254.704c-39.648-20.258-81.652-35.862-124.846-46.376-44.488-10.836-90.502-16.328-136.77-16.328-46.266 0-92.282 5.492-136.768 16.324-43.194 10.518-85.198 26.122-124.846 46.376-63.020 32.202-120.222 76.41-167.64 129.298 47.418 52.888 104.62 97.1 167.64 129.298 32.336 16.522 66.242 29.946 101.082 40.040-19.888-30.242-31.468-66.434-31.468-105.336 0-106.040 85.962-192 192-192s192 85.96 192 192c0 38.902-11.582 75.094-31.466 105.34 34.838-10.096 68.744-23.52 101.082-40.042 63.022-32.198 120.218-76.408 167.638-129.298-47.42-52.886-104.618-97.1-167.638-129.296zM860.918 716.278c-108.72 55.554-226.112 83.722-348.918 83.722s-240.198-28.168-348.918-83.722c-58.772-30.032-113.732-67.904-163.082-112.076v-109.206c55.338 5
 8.566 120.694 107.754 192.194 144.29 99.62 50.904 207.218 76.714 319.806 76.714s220.186-25.81 319.804-76.716c71.502-36.536 136.858-85.724 192.196-144.29v109.206c-49.35 44.174-104.308 82.046-163.082 112.078z" />
-<glyph unicode="&#xe01a;" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
-<glyph unicode="&#xe01b;" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
-<glyph unicode="&#xe01c;" d="M0 512h1024v-128h-1024z" />
-<glyph unicode="&#xe01d;" d="M0 64h576v-128h-576zM192 960h704v-128h-704zM277.388 128l204.688 784.164 123.85-32.328-196.25-751.836zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
-<glyph unicode="&#xe01e;" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
-<glyph unicode="&#xe01f;" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
-<glyph unicode="&#xe020;" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
-<glyph unicode="&#xe021;" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM512 16c-238.586 0-432 193.412-432 432 0 238.586 193.414 432 432 432 238.59 0 432-193.414 432-432 0-238.588-193.41-432-432-432zM384 640c0-35.346-28.654-64-64-64s-64 28.654-64 64 28.654 64 64 64 64-28.654 64-64zM768 640c0-35.346-28.652-64-64-64s-64 28.654-64 64 28.652 64 64 64 64-28.654 64-64zM512 308c141.074 0 262.688 57.532 318.462 123.192-20.872-171.22-156.288-303.192-318.462-303.192-162.118 0-297.498 132.026-318.444 303.168 55.786-65.646 177.386-123.168 318.444-123.168z" />
-<glyph unicode="&#xe022;" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
-<glyph unicode="&#xe023;" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
-<glyph unicode="&#xe024;" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
-<glyph unicode="&#xe025;" d="M448 384h-192v128h192v192h128v-192h192v-128h-192v-192h-128zM1024 320v-384h-1024v384h128v-256h768v256z" />
-<glyph unicode="&#xe026;" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
-<glyph unicode="&#xe027;" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
-<glyph unicode="&#xe028;" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
-<glyph unicode="&#xe02a;" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
-<glyph unicode="&#xe02b;" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
-<glyph unicode="&#xe02c;" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
-<glyph unicode="&#xe02d;" d="M731.42 442.964c63.92-47.938 100.58-116.086 100.58-186.964s-36.66-139.026-100.58-186.964c-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128-82.138 0-160.062 24.518-219.42 69.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 82.136 0 160.062-24.518 219.42-69.036zM0 448h1024v-64h-1024z" />
-<glyph unicode="&#xe02e;" d="M384 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224z" />
-<glyph unicode="&#xe02f;" d="M448 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM64 512l256-224-256-224z" />
-<glyph unicode="&#xe030;" d="M256 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM960 64l-256 224 256 224z" />
-<glyph unicode="&#xe031;" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
-<glyph unicode="&#xe032;" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
-<glyph unicode="&#xe033;" d="M128 416l288-288 480 480-128 128-352-352-160 160z" />
-<glyph unicode="&#xe034;" d="M928 832h-416l-32 64h-352l-64-128h896zM904.34 256h74.86l44.8 448h-1024l64-640h484.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM1002.996 46.25l-198.496 174.692c17.454 28.92 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l174.692-198.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM640 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
-<glyph unicode="&#xe035;" d="M512 448v-128h32l32 64h64v-256h-48v-64h224v64h-48v256h64l32-64h32v128zM832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM960 0h-512v576h512v-576z" />
-<glyph unicode="&#xe600;" d="M483.2 320l-147.2 336c-9.6 25.6-19.2 44.8-25.6 54.4s-16 12.8-25.6 12.8c-16 0-25.6-3.2-28.8-3.2v70.4c9.6 6.4 25.6 6.4 38.4 9.6 32 0 57.6-6.4 73.6-22.4 6.4-6.4 12.8-16 19.2-25.6 6.4-12.8 12.8-25.6 16-41.6l121.6-291.2 150.4 371.2h92.8l-198.4-470.4v-224h-86.4v224zM0 960v-1024h1024v1024h-1024zM960 0h-896v896h896v-896z" />
-<glyph unicode="&#xe601;" d="M627.2 80h-579.2v396.8h579.2v-396.8zM553.6 406.4h-435.2v-256h435.2v256zM259.2 732.8c176 176 457.6 176 633.6 0s176-457.6 0-633.6c-121.6-121.6-297.6-160-454.4-108.8 121.6-28.8 262.4 9.6 361.6 108.8 150.4 150.4 160 384 22.4 521.6-121.6 121.6-320 128-470.4 19.2l86.4-86.4-294.4-22.4 22.4 294.4 92.8-92.8z" />
-<glyph unicode="&#xe602;" d="M892.8-22.4l-89.6 89.6c-70.4-80-172.8-131.2-288-131.2-208 0-380.8 166.4-384 377.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4v0c0 0 0 0 0 3.2 0 0 0 3.2 0 3.2 3.2 105.6 48 211.2 105.6 304l-192 192 44.8 44.8 182.4-182.4c0 0 0 0 0 0l569.6-569.6c0 0 0 0 0 0l99.2-99.2-48-44.8zM896 326.4c0 0 0 0 0 0 0 3.2 0 6.4 0 6.4-9.6 316.8-384 627.2-384 627.2s-108.8-89.6-208-220.8l70.4-70.4c6.4 9.6 16 22.4 22.4 32 41.6 51.2 83.2 96 115.2 128v0c32-32 73.6-76.8 115.2-128 108.8-137.6 169.6-265.6 172.8-371.2 0 0 0-3.2 0-3.2v0 0c0-3.2 0-3.2 0-6.4s0-3.2 0-3.2v0 0c0-22.4-3.2-41.6-9.6-64l76.8-76.8c16 41.6 28.8 89.6 28.8 137.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4z" />
-<glyph unicode="&#xe914;" d="M768 416v-352h-640v640h352l128 128h-512c-52.8 0-96-43.2-96-96v-704c0-52.8 43.2-96 96-96h704c52.798 0 96 43.2 96 96v512l-128-128zM864 960l-608-608v-160h160l608 608c0 96-64 160-160 160zM416 320l-48 48 480 480 48-48-480-480z" />
-<glyph unicode="&#xe934;" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
-<glyph unicode="&#xeaa8;" d="M704 896c-247.424 0-448-200.576-448-448h-224l288-288 288 288h-224c0 176.73 143.27 320 320 320 176.732 0 320-143.27 320-320 0-176.732-143.268-320-320-320v-128c247.424 0 448 200.576 448 448s-200.576 448-448 448z" horiz-adv-x="1152" />
-<glyph unicode="&#xeaa9;" d="M448 896c247.424 0 448-200.576 448-448h224l-288-288-288 288h224c0 176.73-143.27 320-320 320-176.732 0-320-143.27-320-320 0-176.732 143.268-320 320-320v-128c-247.424 0-448 200.576-448 448s200.576 448 448 448z" horiz-adv-x="1152" />
-<glyph unicode="&#xeaaa;" d="M0 576h1024v384zM1024 0v384h-1024z" />
-<glyph unicode="&#xeaac;" d="M576 960v-1024h384zM0-64h384v1024z" />
-<glyph unicode="&#xeb35;" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
-<glyph unicode="&#xeb36;" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
-<glyph unicode="&#xeba7;" d="M768 832h-512l-256-256 512-576 512 576-256 256zM512 181.334v2.666h-2.37l-14.222 16h16.592v16h-30.814l-14.222 16h45.036v16h-59.258l-14.222 16h73.48v16h-87.704l-14.222 16h101.926v16h-116.148l-14.222 16h130.37v16h-144.592l-14.222 16h158.814v16h-173.038l-14.222 16h187.26v16h-201.482l-14.222 16h215.704v16h-229.926l-14.222 16h244.148v16h-258.372l-14.222 16h272.594v16h-286.816l-14.222 16h301.038v16h-315.26l-14.222 16h329.482v16h-343.706l-7.344 8.262 139.072 139.072h211.978v-3.334h215.314l16-16h-231.314v-16h247.314l16-16h-263.314v-16h279.314l16-16h-295.314v-16h311.314l16-16h-327.314v-16h343.312l7.738-7.738-351.050-394.928z" />
-<glyph unicode="&#xec6a;" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
-<glyph unicode="&#xeccc;" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 24.992-24.994 24.992-65.516 
 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
-<glyph unicode="&#xeccd;" d="M715.812 895.52c-60.25 34.784-124.618 55.904-189.572 64.48 122.936-160.082 144.768-384.762 37.574-570.42-107.2-185.67-312.688-279.112-512.788-252.68 39.898-51.958 90.376-97.146 150.628-131.934 245.908-141.974 560.37-57.72 702.344 188.198 141.988 245.924 57.732 560.372-188.186 702.356z" />
-<glyph unicode="&#xecd4;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
-<glyph unicode="&#xed6a;" d="M893.254 738.746l-90.508 90.508-290.746-290.744-290.746 290.744-90.508-90.506 290.746-290.748-290.746-290.746 90.508-90.508 290.746 290.746 290.746-290.746 90.508 90.51-290.744 290.744z" />
-<glyph unicode="&#xedc0;" d="M672-64l192 192-320 320 320 320-192 192-512-512z" />
-<glyph unicode="&#xedf9;" d="M0 896v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.488l677.488-677.488h-229.488c-35.346 0-64-28.652-64-64 0-35.346 28.654-64 64-64h384c35.346 0 64 28.654 64 64v384c0 35.348-28.654 64-64 64s-64-28.652-64-64v-229.488l-677.488 677.488h229.488c35.346 0 64 28.654 64 64s-28.652 64-64 64h-384c-35.346 0-64-28.654-64-64z" />
-<glyph unicode="&#xee78;" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe000;" glyph-name="save" d="M896 960h-896v-1024h1024v896l-128 128zM512 832h128v-256h-128v256zM896 64h-768v768h64v-320h576v320h74.978l53.022-53.018v-714.982z" />
+<glyph unicode="&#xe001;" glyph-name="newdocument" d="M903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608z" />
+<glyph unicode="&#xe002;" glyph-name="fullpage" d="M1024 367.542v160.916l-159.144 15.914c-8.186 30.042-20.088 58.548-35.21 84.98l104.596 127.838-113.052 113.050-127.836-104.596c-26.434 15.124-54.942 27.026-84.982 35.208l-15.914 159.148h-160.916l-15.914-159.146c-30.042-8.186-58.548-20.086-84.98-35.208l-127.838 104.594-113.050-113.050 104.596-127.836c-15.124-26.432-27.026-54.94-35.21-84.98l-159.146-15.916v-160.916l159.146-15.914c8.186-30.042 20.086-58.548 35.21-84.982l-104.596-127.836 113.048-113.048 127.838 104.596c26.432-15.124 54.94-27.028 84.98-35.21l15.916-159.148h160.916l15.914 159.144c30.042 8.186 58.548 20.088 84.982 35.21l127.836-104.596 113.048 113.048-104.596 127.836c15.124 26.434 27.028 54.942 35.21 84.98l159.148 15.92zM704 384l-128-128h-128l-128 128v128l128 128h128l128-128v-128z" />
+<glyph unicode="&#xe003;" glyph-name="alignleft" d="M0 896h1024v-128h-1024zM0 704h640v-128h-640zM0 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe004;" glyph-name="aligncenter" d="M0 896h1024v-128h-1024zM192 704h640v-128h-640zM192 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe005;" glyph-name="alignright" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 320h640v-128h-640zM0 512h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe006;" glyph-name="alignjustify" d="M0 896h1024v-128h-1024zM0 704h1024v-128h-1024zM0 512h1024v-128h-1024zM0 320h1024v-128h-1024zM0 128h1024v-128h-1024z" />
+<glyph unicode="&#xe007;" glyph-name="cut" d="M890.774 250.846c-45.654 45.556-103.728 69.072-157.946 69.072h-29.112l-63.904 64.008 255.62 256.038c63.904 64.010 63.904 192.028 0 256.038l-383.43-384.056-383.432 384.054c-63.904-64.008-63.904-192.028 0-256.038l255.622-256.034-63.906-64.008h-29.114c-54.22 0-112.292-23.518-157.948-69.076-81.622-81.442-92.65-202.484-24.63-270.35 29.97-29.902 70.288-44.494 112.996-44.494 54.216 0 112.29 23.514 157.946 69.072 53.584 53.464 76.742 124 67.084 185.348l65.384 65.488 65.376-65.488c-9.656-61.348 13.506-131.882 67.084-185.348 45.662-45.558 103.732-69.072 157.948-69.072 42.708 0 83.024 14.592 112.994 44.496 68.020 67.866 56.988 188.908-24.632 270.35zM353.024 114.462c-7.698-17.882-19.010-34.346-33.626-48.926-14.636-14.604-31.172-25.918-49.148-33.624-16.132-6.916-32.96-10.568-48.662-10.568-15.146 0-36.612 3.402-52.862 19.612-16.136 16.104-19.52 37.318-19.52 52.288 0 15.542 3.642 32.21 10.526 48.212 7.7 17.884 19.014 34.
 346 33.626 48.926 14.634 14.606 31.172 25.914 49.15 33.624 16.134 6.914 32.96 10.568 48.664 10.568 15.146 0 36.612-3.4 52.858-19.614 16.134-16.098 19.522-37.316 19.522-52.284 0.002-15.542-3.638-32.216-10.528-48.214zM512.004 293.404c-49.914 0-90.376 40.532-90.376 90.526 0 49.992 40.462 90.52 90.376 90.52s90.372-40.528 90.372-90.52c0-49.998-40.46-90.526-90.372-90.526zM855.272 40.958c-16.248-16.208-37.712-19.612-52.86-19.612-15.704 0-32.53 3.652-48.666 10.568-17.972 7.706-34.508 19.020-49.142 33.624-14.614 14.58-25.926 31.042-33.626 48.926-6.886 15.998-10.526 32.672-10.526 48.212 0 14.966 3.384 36.188 19.52 52.286 16.246 16.208 37.712 19.614 52.86 19.614 15.7 0 32.53-3.654 48.66-10.568 17.978-7.708 34.516-19.018 49.15-33.624 14.61-14.58 25.924-31.042 33.626-48.926 6.884-15.998 10.526-32.67 10.526-48.212-0.002-14.97-3.39-36.186-19.522-52.288z" />
+<glyph unicode="&#xe008;" glyph-name="paste" d="M832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h448l192 192v512h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM832 26.51v101.49h101.49l-101.49-101.49zM960 192h-192v-192h-320v576h512v-384z" />
+<glyph unicode="&#xe009;" glyph-name="searchreplace" d="M64 960h384v-64h-384zM576 960h384v-64h-384zM952 640h-56v256h-256v-256h-256v256h-256v-256h-56c-39.6 0-72-32.4-72-72v-560c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v376h128v-376c0-39.6 32.4-72 72-72h304c39.6 0 72 32.4 72 72v560c0 39.6-32.4 72-72 72zM348 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32zM544 448h-64c-17.6 0-32 14.4-32 32s14.4 32 32 32h64c17.6 0 32-14.4 32-32s-14.4-32-32-32zM924 0h-248c-19.8 0-36 14.4-36 32s16.2 32 36 32h248c19.8 0 36-14.4 36-32s-16.2-32-36-32z" />
+<glyph unicode="&#xe00a;" glyph-name="bullist" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128z" />
+<glyph unicode="&#xe00b;" glyph-name="numlist" d="M384 128h640v-128h-640zM384 512h640v-128h-640zM384 896h640v-128h-640zM192 960v-256h-64v192h-64v64zM128 434v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM256 256v-320h-192v64h128v64h-128v64h128v64h-128v64z" />
+<glyph unicode="&#xe00c;" glyph-name="indent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM0 256v384l256-192z" />
+<glyph unicode="&#xe00d;" glyph-name="outdent" d="M0 896h1024v-128h-1024zM384 704h640v-128h-640zM384 512h640v-128h-640zM384 320h640v-128h-640zM0 128h1024v-128h-1024zM256 640v-384l-256 192z" />
+<glyph unicode="&#xe00e;" glyph-name="blockquote" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224s-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z" />
+<glyph unicode="&#xe00f;" glyph-name="undo" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z" />
+<glyph unicode="&#xe010;" glyph-name="redo" d="M576 711.628v248.372l384-384-384-384v253.824c-446.75 10.482-427.588-303.792-313.86-509.824-280.712 303.414-221.1 789.57 313.86 775.628z" />
+<glyph unicode="&#xe011;" glyph-name="link" d="M320 256c17.6-17.6 47.274-16.726 65.942 1.942l316.118 316.116c18.668 18.668 19.54 48.342 1.94 65.942s-47.274 16.726-65.942-1.942l-316.116-316.116c-18.668-18.668-19.542-48.342-1.942-65.942zM476.888 284.888c4.56-9.050 6.99-19.16 6.99-29.696 0-17.616-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.382 99.382c-12.248 12.248-18.992 28.694-18.992 46.308s6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994 10.536 0 20.644-2.43 29.696-6.99l65.338 65.338c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-60.67-60.67-60.67-159.948 0-220.618l99.382-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c55.82 55.82 60.238 144.298 13.344 205.344l-65.34-65.34zM978.498 815.116l-99.382 99.382c-30.334 30.336-70.32 45.502-110.308 45.502
 -39.986 0-79.972-15.166-110.308-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 163.382c12.248 12.248 28.694 18.994 46.308 18.994s34.060-6.746 46.308-18.994l99.382-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.382-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.502l163.382 163.382c60.67 60.666 60.67 159.944 0 220.614z" />
+<glyph unicode="&#xe012;" glyph-name="unlink" d="M476.888 284.886c4.56-9.048 6.99-19.158 6.99-29.696 0-17.616-6.744-34.058-18.992-46.308l-163.38-163.38c-12.248-12.248-28.696-18.992-46.308-18.992s-34.060 6.744-46.308 18.992l-99.38 99.38c-12.248 12.25-18.992 28.696-18.992 46.308s6.744 34.060 18.992 46.308l163.38 163.382c12.248 12.246 28.696 18.992 46.308 18.992 10.538 0 20.644-2.43 29.696-6.988l65.338 65.336c-27.87 21.41-61.44 32.16-95.034 32.16-39.986 0-79.972-15.166-110.308-45.502l-163.38-163.382c-60.67-60.67-60.67-159.95 0-220.618l99.38-99.382c30.334-30.332 70.32-45.5 110.306-45.5 39.988 0 79.974 15.168 110.308 45.502l163.38 163.38c55.82 55.82 60.238 144.298 13.344 205.346l-65.34-65.338zM978.496 815.116l-99.38 99.382c-30.334 30.336-70.32 45.502-110.308 45.502-39.986 0-79.97-15.166-110.306-45.502l-163.382-163.382c-55.82-55.82-60.238-144.298-13.342-205.342l65.338 65.34c-4.558 9.050-6.988 19.16-6.988 29.694 0 17.616 6.744 34.060 18.992 46.308l163.382 16
 3.382c12.246 12.248 28.694 18.994 46.306 18.994 17.616 0 34.060-6.746 46.308-18.994l99.38-99.382c12.248-12.248 18.992-28.694 18.992-46.308s-6.744-34.060-18.992-46.308l-163.38-163.382c-12.248-12.248-28.694-18.992-46.308-18.992-10.536 0-20.644 2.43-29.696 6.99l-65.338-65.338c27.872-21.41 61.44-32.16 95.034-32.16 39.988 0 79.974 15.168 110.308 45.504l163.38 163.38c60.672 60.666 60.672 159.944 0 220.614zM233.368 681.376l-191.994 191.994 45.256 45.256 191.994-191.994zM384 960h64v-192h-64zM0 576h192v-64h-192zM790.632 214.624l191.996-191.996-45.256-45.256-191.996 191.996zM576 128h64v-192h-64zM832 384h192v-64h-192z" />
+<glyph unicode="&#xe013;" glyph-name="anchor" d="M192 960v-1024l320 320 320-320v1024h-640zM768 90.51l-256 256-256-256v805.49h512v-805.49z" />
+<glyph unicode="&#xe014;" glyph-name="image" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96s-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z" />
+<glyph unicode="&#xe015;" glyph-name="media" d="M0 832v-768h1024v768h-1024zM192 128h-128v128h128v-128zM192 384h-128v128h128v-128zM192 640h-128v128h128v-128zM768 128h-512v640h512v-640zM960 128h-128v128h128v-128zM960 384h-128v128h128v-128zM960 640h-128v128h128v-128zM384 640v-384l256 192z" />
+<glyph unicode="&#xe016;" glyph-name="help" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" />
+<glyph unicode="&#xe017;" glyph-name="code" d="M320 704l-256-256 256-256h128l-256 256 256 256zM704 704h-128l256-256-256-256h128l256 256z" />
+<glyph unicode="&#xe018;" glyph-name="inserttime" d="M512 768c-212.076 0-384-171.922-384-384s171.922-384 384-384c212.074 0 384 171.922 384 384s-171.926 384-384 384zM715.644 180.354c-54.392-54.396-126.716-84.354-203.644-84.354s-149.25 29.958-203.646 84.354c-54.396 54.394-84.354 126.718-84.354 203.646s29.958 149.25 84.354 203.646c54.396 54.396 126.718 84.354 203.646 84.354s149.252-29.958 203.642-84.354c54.402-54.396 84.358-126.718 84.358-203.646s-29.958-149.252-84.356-203.646zM325.93 756.138l-42.94 85.878c-98.874-49.536-179.47-130.132-229.006-229.008l85.876-42.94c40.248 80.336 105.732 145.822 186.070 186.070zM884.134 570.070l85.878 42.938c-49.532 98.876-130.126 179.472-229.004 229.008l-42.944-85.878c80.338-40.248 145.824-105.732 186.070-186.068zM512 576h-64v-192c0-10.11 4.7-19.11 12.022-24.972l-0.012-0.016 160-128 39.976 49.976-147.986 118.39v176.622z" />
+<glyph unicode="&#xe019;" glyph-name="preview" d="M512 640c-209.368 0-395.244-100.556-512-256 116.756-155.446 302.632-256 512-256s395.244 100.554 512 256c-116.756 155.444-302.632 256-512 256zM448 512c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM773.616 254.704c-39.648-20.258-81.652-35.862-124.846-46.376-44.488-10.836-90.502-16.328-136.77-16.328-46.266 0-92.282 5.492-136.768 16.324-43.194 10.518-85.198 26.122-124.846 46.376-63.020 32.202-120.222 76.41-167.64 129.298 47.418 52.888 104.62 97.1 167.64 129.298 32.336 16.522 66.242 29.946 101.082 40.040-19.888-30.242-31.468-66.434-31.468-105.336 0-106.040 85.962-192 192-192s192 85.96 192 192c0 38.902-11.582 75.094-31.466 105.34 34.838-10.096 68.744-23.52 101.082-40.042 63.022-32.198 120.218-76.408 167.638-129.298-47.42-52.886-104.618-97.1-167.638-129.296zM860.918 716.278c-108.72 55.554-226.112 83.722-348.918 83.722s-240.198-28.168-348.918-83.722c-58.772-30.032-113.732-67.904-16
 3.082-112.076v-109.206c55.338 58.566 120.694 107.754 192.194 144.29 99.62 50.904 207.218 76.714 319.806 76.714s220.186-25.81 319.804-76.716c71.502-36.536 136.858-85.724 192.196-144.29v109.206c-49.35 44.174-104.308 82.046-163.082 112.078z" />
+<glyph unicode="&#xe01a;" glyph-name="forecolor" d="M322.018 128l57.6 192h264.764l57.6-192h113.632l-191.996 640h-223.236l-192-640h113.636zM475.618 640h72.764l57.6-192h-187.964l57.6 192z" />
+<glyph unicode="&#xe01b;" glyph-name="table" d="M0 896v-896h1024v896h-1024zM384 320v192h256v-192h-256zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe01c;" glyph-name="hr" d="M0 512h1024v-128h-1024z" />
+<glyph unicode="&#xe01d;" glyph-name="removeformat" d="M0 64h576v-128h-576zM192 960h704v-128h-704zM277.388 128l204.688 784.164 123.85-32.328-196.25-751.836zM929.774-64l-129.774 129.774-129.774-129.774-62.226 62.226 129.774 129.774-129.774 129.774 62.226 62.226 129.774-129.774 129.774 129.774 62.226-62.226-129.774-129.774 129.774-129.774z" />
+<glyph unicode="&#xe01e;" glyph-name="sub" d="M768 50v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe01f;" glyph-name="sup" d="M768 754v-50h128v-64h-192v146l128 60v50h-128v64h192v-146zM676 704h-136l-188-188-188 188h-136l256-256-256-256h136l188 188 188-188h136l-256 256z" />
+<glyph unicode="&#xe020;" glyph-name="charmap" d="M704 64h256l64 128v-256h-384v214.214c131.112 56.484 224 197.162 224 361.786 0 214.432-157.598 382.266-352 382.266-194.406 0-352-167.832-352-382.266 0-164.624 92.886-305.302 224-361.786v-214.214h-384v256l64-128h256v32.59c-187.63 66.46-320 227.402-320 415.41 0 247.424 229.23 448 512 448s512-200.576 512-448c0-188.008-132.37-348.95-320-415.41v-32.59z" />
+<glyph unicode="&#xe021;" glyph-name="emoticons" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM512 16c-238.586 0-432 193.412-432 432 0 238.586 193.414 432 432 432 238.59 0 432-193.414 432-432 0-238.588-193.41-432-432-432zM384 640c0-35.346-28.654-64-64-64s-64 28.654-64 64 28.654 64 64 64 64-28.654 64-64zM768 640c0-35.346-28.652-64-64-64s-64 28.654-64 64 28.652 64 64 64 64-28.654 64-64zM512 308c141.074 0 262.688 57.532 318.462 123.192-20.872-171.22-156.288-303.192-318.462-303.192-162.118 0-297.498 132.026-318.444 303.168 55.786-65.646 177.386-123.168 318.444-123.168z" />
+<glyph unicode="&#xe022;" glyph-name="print" d="M256 896h512v-128h-512zM960 704h-896c-35.2 0-64-28.8-64-64v-320c0-35.2 28.796-64 64-64h192v-256h512v256h192c35.2 0 64 28.8 64 64v320c0 35.2-28.8 64-64 64zM704 64h-384v320h384v-320zM974.4 608c0-25.626-20.774-46.4-46.398-46.4-25.626 0-46.402 20.774-46.402 46.4s20.776 46.4 46.402 46.4c25.626 0 46.398-20.774 46.398-46.4z" />
+<glyph unicode="&#xe023;" glyph-name="fullscreen" d="M1024 960v-384l-138.26 138.26-212-212-107.48 107.48 212 212-138.26 138.26zM245.74 821.74l212-212-107.48-107.48-212 212-138.26-138.26v384h384zM885.74 181.74l138.26 138.26v-384h-384l138.26 138.26-212 212 107.48 107.48zM457.74 286.26l-212-212 138.26-138.26h-384v384l138.26-138.26 212 212z" />
+<glyph unicode="&#xe024;" glyph-name="spellchecker" d="M128 704h128v-192h64v384c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-384h64v192zM128 896h128v-128h-128v128zM960 896v64h-192c-35.202 0-64-28.8-64-64v-320c0-35.2 28.798-64 64-64h192v64h-192v320h192zM640 800v96c0 35.2-28.8 64-64 64h-192v-448h192c35.2 0 64 28.8 64 64v96c0 35.2-8.8 64-44 64 35.2 0 44 28.8 44 64zM576 576h-128v128h128v-128zM576 768h-128v128h128v-128zM832 384l-416-448-224 288 82 70 142-148 352 302z" />
+<glyph unicode="&#xe025;" glyph-name="nonbreaking" d="M448 384h-192v128h192v192h128v-192h192v-128h-192v-192h-128zM1024 320v-384h-1024v384h128v-256h768v256z" />
+<glyph unicode="&#xe026;" glyph-name="template" d="M384 768h128v-64h-128zM576 768h128v-64h-128zM896 768v-256h-192v64h128v128h-64v64zM320 576h128v-64h-128zM512 576h128v-64h-128zM192 704v-128h64v-64h-128v256h192v-64zM384 384h128v-64h-128zM576 384h128v-64h-128zM896 384v-256h-192v64h128v128h-64v64zM320 192h128v-64h-128zM512 192h128v-64h-128zM192 320v-128h64v-64h-128v256h192v-64zM960 896h-896v-896h896v896zM1024 960v0-1024h-1024v1024h1024z" />
+<glyph unicode="&#xe027;" glyph-name="pagebreak" d="M0 448h128v-64h-128zM192 448h192v-64h-192zM448 448h128v-64h-128zM640 448h192v-64h-192zM896 448h128v-64h-128zM880 960l16-448h-768l16 448h32l16-384h640l16 384zM144-64l-16 384h768l-16-384h-32l-16 320h-640l-16-320z" />
+<glyph unicode="&#xe028;" glyph-name="restoredraft" d="M576 896c247.424 0 448-200.576 448-448s-200.576-448-448-448v96c94.024 0 182.418 36.614 248.902 103.098s103.098 154.878 103.098 248.902c0 94.022-36.614 182.418-103.098 248.902s-154.878 103.098-248.902 103.098c-94.022 0-182.418-36.614-248.902-103.098-51.14-51.138-84.582-115.246-97.306-184.902h186.208l-224-256-224 256h164.57c31.060 217.102 217.738 384 443.43 384zM768 512v-128h-256v320h128v-192z" />
+<glyph unicode="&#xe02a;" glyph-name="bold" d="M707.88 475.348c37.498 44.542 60.12 102.008 60.12 164.652 0 141.16-114.842 256-256 256h-320v-896h384c141.158 0 256 114.842 256 256 0 92.956-49.798 174.496-124.12 219.348zM384 768h101.5c55.968 0 101.5-57.42 101.5-128s-45.532-128-101.5-128h-101.5v256zM543 128h-159v256h159c58.45 0 106-57.42 106-128s-47.55-128-106-128z" />
+<glyph unicode="&#xe02b;" glyph-name="italic" d="M896 896v-64h-128l-320-768h128v-64h-448v64h128l320 768h-128v64z" />
+<glyph unicode="&#xe02c;" glyph-name="underline" d="M704 896h128v-416c0-159.058-143.268-288-320-288-176.73 0-320 128.942-320 288v416h128v-416c0-40.166 18.238-78.704 51.354-108.506 36.896-33.204 86.846-51.494 140.646-51.494s103.75 18.29 140.646 51.494c33.116 29.802 51.354 68.34 51.354 108.506v416zM192 128h640v-128h-640z" />
+<glyph unicode="&#xe02d;" glyph-name="strikethrough" d="M731.42 442.964c63.92-47.938 100.58-116.086 100.58-186.964s-36.66-139.026-100.58-186.964c-59.358-44.518-137.284-69.036-219.42-69.036-82.138 0-160.062 24.518-219.42 69.036-63.92 47.938-100.58 116.086-100.58 186.964h128c0-69.382 87.926-128 192-128s192 58.618 192 128c0 69.382-87.926 128-192 128-82.138 0-160.062 24.518-219.42 69.036-63.92 47.94-100.58 116.086-100.58 186.964s36.66 139.024 100.58 186.964c59.358 44.518 137.282 69.036 219.42 69.036 82.136 0 160.062-24.518 219.42-69.036 63.92-47.94 100.58-116.086 100.58-186.964h-128c0 69.382-87.926 128-192 128s-192-58.618-192-128c0-69.382 87.926-128 192-128 82.136 0 160.062-24.518 219.42-69.036zM0 448h1024v-64h-1024z" />
+<glyph unicode="&#xe02e;" glyph-name="visualchars" d="M384 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224z" />
+<glyph unicode="&#xe02f;" glyph-name="ltr" d="M448 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM64 512l256-224-256-224z" />
+<glyph unicode="&#xe030;" glyph-name="rtl" d="M256 896h512v-128h-128v-768h-128v768h-128v-768h-128v448c-123.712 0-224 100.288-224 224s100.288 224 224 224zM960 64l-256 224 256 224z" />
+<glyph unicode="&#xe031;" glyph-name="copy" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
+<glyph unicode="&#xe032;" glyph-name="resize" d="M768 704h64v-64h-64zM640 576h64v-64h-64zM640 448h64v-64h-64zM640 320h64v-64h-64zM512 448h64v-64h-64zM512 320h64v-64h-64zM384 320h64v-64h-64zM768 576h64v-64h-64zM768 448h64v-64h-64zM768 320h64v-64h-64zM768 192h64v-64h-64zM640 192h64v-64h-64zM512 192h64v-64h-64zM384 192h64v-64h-64zM256 192h64v-64h-64z" />
+<glyph unicode="&#xe033;" glyph-name="checkbox" d="M128 416l288-288 480 480-128 128-352-352-160 160z" />
+<glyph unicode="&#xe034;" glyph-name="browse" d="M928 832h-416l-32 64h-352l-64-128h896zM904.34 256h74.86l44.8 448h-1024l64-640h484.080c-104.882 37.776-180.080 138.266-180.080 256 0 149.982 122.018 272 272 272 149.98 0 272-122.018 272-272 0-21.678-2.622-43.15-7.66-64zM1002.996 46.25l-198.496 174.692c17.454 28.92 27.5 62.814 27.5 99.058 0 106.040-85.96 192-192 192s-192-85.96-192-192 85.96-192 192-192c36.244 0 70.138 10.046 99.058 27.5l174.692-198.496c22.962-26.678 62.118-28.14 87.006-3.252l5.492 5.492c24.888 24.888 23.426 64.044-3.252 87.006zM640 196c-68.484 0-124 55.516-124 124s55.516 124 124 124 124-55.516 124-124-55.516-124-124-124z" />
+<glyph unicode="&#xe035;" glyph-name="pastetext" d="M512 448v-128h32l32 64h64v-256h-48v-64h224v64h-48v256h64l32-64h32v128zM832 640v160c0 17.6-14.4 32-32 32h-224v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-224c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM384 895.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886h-128v63.886zM192 704v64h512v-64h-512zM960 0h-512v576h512v-576z" />
+<glyph unicode="&#xe600;" glyph-name="gamma" d="M483.2 320l-147.2 336c-9.6 25.6-19.2 44.8-25.6 54.4s-16 12.8-25.6 12.8c-16 0-25.6-3.2-28.8-3.2v70.4c9.6 6.4 25.6 6.4 38.4 9.6 32 0 57.6-6.4 73.6-22.4 6.4-6.4 12.8-16 19.2-25.6 6.4-12.8 12.8-25.6 16-41.6l121.6-291.2 150.4 371.2h92.8l-198.4-470.4v-224h-86.4v224zM0 960v-1024h1024v1024h-1024zM960 0h-896v896h896v-896z" />
+<glyph unicode="&#xe601;" glyph-name="orientation" d="M627.2 80h-579.2v396.8h579.2v-396.8zM553.6 406.4h-435.2v-256h435.2v256zM259.2 732.8c176 176 457.6 176 633.6 0s176-457.6 0-633.6c-121.6-121.6-297.6-160-454.4-108.8 121.6-28.8 262.4 9.6 361.6 108.8 150.4 150.4 160 384 22.4 521.6-121.6 121.6-320 128-470.4 19.2l86.4-86.4-294.4-22.4 22.4 294.4 92.8-92.8z" />
+<glyph unicode="&#xe602;" glyph-name="invert" d="M892.8-22.4l-89.6 89.6c-70.4-80-172.8-131.2-288-131.2-208 0-380.8 166.4-384 377.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4v0c0 0 0 0 0 3.2 0 0 0 3.2 0 3.2 3.2 105.6 48 211.2 105.6 304l-192 192 44.8 44.8 182.4-182.4c0 0 0 0 0 0l569.6-569.6c0 0 0 0 0 0l99.2-99.2-48-44.8zM896 326.4c0 0 0 0 0 0 0 3.2 0 6.4 0 6.4-9.6 316.8-384 627.2-384 627.2s-108.8-89.6-208-220.8l70.4-70.4c6.4 9.6 16 22.4 22.4 32 41.6 51.2 83.2 96 115.2 128v0c32-32 73.6-76.8 115.2-128 108.8-137.6 169.6-265.6 172.8-371.2 0 0 0-3.2 0-3.2v0 0c0-3.2 0-3.2 0-6.4s0-3.2 0-3.2v0 0c0-22.4-3.2-41.6-9.6-64l76.8-76.8c16 41.6 28.8 89.6 28.8 137.6 0 0 0 0 0 0 0 3.2 0 3.2 0 6.4s0 3.2 0 6.4z" />
+<glyph unicode="&#xe603;" glyph-name="codesample" d="M199.995 578.002v104.002c0 43.078 34.923 78.001 78.001 78.001h26v104.002h-26c-100.518 0-182.003-81.485-182.003-182.003v-104.002c0-43.078-34.923-78.001-78.001-78.001h-26v-104.002h26c43.078 0 78.001-34.923 78.001-78.001v-104.002c0-100.515 81.485-182.003 182.003-182.003h26v104.002h-26c-43.078 0-78.001 34.923-78.001 78.001v104.002c0 50.931-20.928 96.966-54.646 130.002 33.716 33.036 54.646 79.072 54.646 130.002zM824.005 578.002v104.002c0 43.078-34.923 78.001-78.001 78.001h-26v104.002h26c100.515 0 182.003-81.485 182.003-182.003v-104.002c0-43.078 34.923-78.001 78.001-78.001h26v-104.002h-26c-43.078 0-78.001-34.923-78.001-78.001v-104.002c0-100.515-81.488-182.003-182.003-182.003h-26v104.002h26c43.078 0 78.001 34.923 78.001 78.001v104.002c0 50.931 20.928 96.966 54.646 130.002-33.716 33.036-54.646 79.072-54.646 130.002zM616.002 603.285c0-57.439-46.562-104.002-104.002-104.002s-104.002 46.562-104.002 104.002c0 57
 .439 46.562 104.002 104.002 104.002s104.002-46.562 104.002-104.002zM512 448.717c-57.439 0-104.002-46.562-104.002-104.002 0-55.845 26-100.115 105.752-103.88-23.719-33.417-59.441-46.612-105.752-50.944v-61.751c0 0 208.003-18.144 208.003 216.577-0.202 57.441-46.56 104.004-104.002 104.004z" />
+<glyph unicode="&#xe604;" glyph-name="tablerowprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe605;" glyph-name="tablecellprops" d="M0 896v-896h1024v896h-1024zM640 256v-192h-256v192h256zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192zM704 64v192h256v-192h-256z" />
+<glyph unicode="&#xe606;" glyph-name="table2" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-896v192h896v-192z" />
+<glyph unicode="&#xe607;" glyph-name="tablemergecells" d="M0 896v-896h1024v896h-1024zM384 64v448h576v-448h-576zM640 768v-192h-256v192h256zM320 768v-192h-256v192h256zM64 512h256v-192h-256v192zM704 576v192h256v-192h-256zM64 256h256v-192h-256v192z" />
+<glyph unicode="&#xe608;" glyph-name="tableinsertcolbefore" d="M320 188.8v182.4h-182.4v89.6h182.4v182.4h86.4v-182.4h185.6v-89.6h-185.6v-182.4zM0 896v-896h1024v896h-1024zM640 64h-576v704h576v-704zM960 64h-256v192h256v-192zM960 320h-256v192h256v-192zM960 576h-256v192h256v-192z" />
+<glyph unicode="&#xe609;" glyph-name="tableinsertcolafter" d="M704 643.2v-182.4h182.4v-89.6h-182.4v-182.4h-86.4v182.4h-185.6v89.6h185.6v182.4zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v704h576v-704z" />
+<glyph unicode="&#xe60a;" glyph-name="tableinsertrowbefore" d="M691.2 508.8h-144v-144h-70.4v144h-144v67.2h144v144h70.4v-144h144zM0 896v-896h1024v896h-1024zM320 64h-256v192h256v-192zM640 64h-256v192h256v-192zM960 64h-256v192h256v-192zM960 316.8h-896v451.2h896v-451.2z" />
+<glyph unicode="&#xe60b;" glyph-name="tableinsertrowafter" d="M332.8 323.2h144v144h70.4v-144h144v-67.2h-144v-144h-70.4v144h-144zM0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM64 768h256v-192h-256v192zM960 64h-896v451.2h896v-451.2zM960 576h-256v192h256v-192z" />
+<glyph unicode="&#xe60d;" glyph-name="tablesplitcells" d="M0 896v-896h1024v896h-1024zM384 768h256v-192h-256v192zM320 64h-256v192h256v-192zM320 320h-256v192h256v-192zM320 576h-256v192h256v-192zM960 64h-576v448h576v-448zM960 576h-256v192h256v-192zM864 156.8l-60.8-60.8-131.2 131.2-131.2-131.2-60.8 60.8 131.2 131.2-131.2 131.2 60.8 60.8 131.2-131.2 131.2 131.2 60.8-60.8-131.2-131.2z" />
+<glyph unicode="&#xe60e;" glyph-name="tabledelete" d="M0 896h1024v-896h-1024v896zM60.8 768v-704h899.2v704h-899.2zM809.6 211.2l-96-96-204.8 204.8-204.8-204.8-96 96 204.8 204.8-204.8 204.8 96 96 204.8-204.8 204.8 204.8 96-96-204.8-204.8z" />
+<glyph unicode="&#xe62a;" glyph-name="tableleftheader" d="M0 896v-832h1024v832h-1024zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM640 640h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192zM960 640h-256v192h256v-192z" />
+<glyph unicode="&#xe62b;" glyph-name="tabletopheader" d="M0 896v-832h1024v832h-1024zM320 128h-256v192h256v-192zM320 384h-256v192h256v-192zM640 128h-256v192h256v-192zM640 384h-256v192h256v-192zM960 128h-256v192h256v-192zM960 384h-256v192h256v-192z" />
+<glyph unicode="&#xe800;" glyph-name="tabledeleterow" d="M886.4 572.8l-156.8-156.8 160-160-76.8-76.8-160 160-156.8-156.8-76.8 73.6 160 160-163.2 163.2 76.8 76.8 163.2-163.2 156.8 156.8 73.6-76.8zM0 896v-896h1024v896h-1024zM960 576h-22.4l-64-64h86.4v-192h-89.6l64-64h25.6v-192h-896v192h310.4l64 64h-374.4v192h371.2l-64 64h-307.2v192h896v-192z" />
+<glyph unicode="&#xe801;" glyph-name="tabledeletecol" d="M320 499.2l64-64v-12.8l-64-64v140.8zM640 422.4l64-64v137.6l-64-64v-9.6zM1024 896v-896h-1024v896h1024zM960 768h-256v-51.2l-12.8 12.8-51.2-51.2v89.6h-256v-89.6l-51.2 51.2-12.8-12.8v51.2h-256v-704h256v118.4l35.2-35.2 28.8 28.8v-115.2h256v115.2l48-48 16 16v-83.2h256v707.2zM672 662.4l-156.8-156.8-163.2 163.2-76.8-76.8 163.2-163.2-156.8-156.8 76.8-76.8 156.8 156.8 160-160 76.8 76.8-160 160 156.8 156.8-76.8 76.8z" />
+<glyph unicode="&#xe914;" glyph-name="editimage" d="M768 416v-352h-640v640h352l128 128h-512c-52.8 0-96-43.2-96-96v-704c0-52.8 43.2-96 96-96h704c52.798 0 96 43.2 96 96v512l-128-128zM864 960l-608-608v-160h160l608 608c0 96-64 160-160 160zM416 320l-48 48 480 480 48-48-480-480z" />
+<glyph unicode="&#xe934;" glyph-name="drop" d="M864.626 486.838c-65.754 183.44-205.11 348.15-352.626 473.162-147.516-125.012-286.87-289.722-352.626-473.162-40.664-113.436-44.682-236.562 12.584-345.4 65.846-125.14 198.632-205.438 340.042-205.438s274.196 80.298 340.040 205.44c57.27 108.838 53.25 231.962 12.586 345.398zM738.764 201.044c-43.802-83.252-132.812-137.044-226.764-137.044-55.12 0-108.524 18.536-152.112 50.652 13.242-1.724 26.632-2.652 40.112-2.652 117.426 0 228.668 67.214 283.402 171.242 44.878 85.292 40.978 173.848 23.882 244.338 14.558-28.15 26.906-56.198 36.848-83.932 22.606-63.062 40.024-156.34-5.368-242.604z" />
+<glyph unicode="&#xeaa8;" glyph-name="rotateleft" d="M607.998 831.986c-212.070 0-383.986-171.916-383.986-383.986h-191.994l246.848-246.848 246.848 246.848h-191.994c0 151.478 122.798 274.276 274.276 274.276 151.48 0 274.276-122.798 274.276-274.276 0-151.48-122.796-274.276-274.276-274.276v-109.71c212.070 0 383.986 171.916 383.986 383.986s-171.916 383.986-383.986 383.986z" />
+<glyph unicode="&#xeaa9;" glyph-name="rotateright" d="M416.002 831.986c212.070 0 383.986-171.916 383.986-383.986h191.994l-246.848-246.848-246.848 246.848h191.994c0 151.478-122.798 274.276-274.276 274.276-151.48 0-274.276-122.798-274.276-274.276 0-151.48 122.796-274.276 274.276-274.276v-109.71c-212.070 0-383.986 171.916-383.986 383.986s171.916 383.986 383.986 383.986z" />
+<glyph unicode="&#xeaaa;" glyph-name="flipv" d="M0 576h1024v384zM1024 0v384h-1024z" />
+<glyph unicode="&#xeaac;" glyph-name="fliph" d="M576 960v-1024h384zM0-64h384v1024z" />
+<glyph unicode="&#xeb35;" glyph-name="zoomin" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z" />
+<glyph unicode="&#xeb36;" glyph-name="zoomout" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z" />
+<glyph unicode="&#xeba7;" glyph-name="sharpen" d="M768 832h-512l-256-256 512-576 512 576-256 256zM512 181.334v2.666h-2.37l-14.222 16h16.592v16h-30.814l-14.222 16h45.036v16h-59.258l-14.222 16h73.48v16h-87.704l-14.222 16h101.926v16h-116.148l-14.222 16h130.37v16h-144.592l-14.222 16h158.814v16h-173.038l-14.222 16h187.26v16h-201.482l-14.222 16h215.704v16h-229.926l-14.222 16h244.148v16h-258.372l-14.222 16h272.594v16h-286.816l-14.222 16h301.038v16h-315.26l-14.222 16h329.482v16h-343.706l-7.344 8.262 139.072 139.072h211.978v-3.334h215.314l16-16h-231.314v-16h247.314l16-16h-263.314v-16h279.314l16-16h-295.314v-16h311.314l16-16h-327.314v-16h343.312l7.738-7.738-351.050-394.928z" />
+<glyph unicode="&#xec6a;" glyph-name="options" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
+<glyph unicode="&#xeccc;" glyph-name="sun" d="M512 128c35.346 0 64-28.654 64-64v-64c0-35.346-28.654-64-64-64s-64 28.654-64 64v64c0 35.346 28.654 64 64 64zM512 768c-35.346 0-64 28.654-64 64v64c0 35.346 28.654 64 64 64s64-28.654 64-64v-64c0-35.346-28.654-64-64-64zM960 512c35.346 0 64-28.654 64-64s-28.654-64-64-64h-64c-35.348 0-64 28.654-64 64s28.652 64 64 64h64zM192 448c0-35.346-28.654-64-64-64h-64c-35.346 0-64 28.654-64 64s28.654 64 64 64h64c35.346 0 64-28.654 64-64zM828.784 221.726l45.256-45.258c24.992-24.99 24.992-65.516 0-90.508-24.994-24.992-65.518-24.992-90.51 0l-45.256 45.256c-24.992 24.99-24.992 65.516 0 90.51 24.994 24.992 65.518 24.992 90.51 0zM195.216 674.274l-45.256 45.256c-24.994 24.994-24.994 65.516 0 90.51s65.516 24.994 90.51 0l45.256-45.256c24.994-24.994 24.994-65.516 0-90.51s-65.516-24.994-90.51 0zM828.784 674.274c-24.992-24.992-65.516-24.992-90.51 0-24.992 24.994-24.992 65.516 0 90.51l45.256 45.254c24.992 24.994 65.516 24.994 90.51 0 2
 4.992-24.994 24.992-65.516 0-90.51l-45.256-45.254zM195.216 221.726c24.992 24.992 65.518 24.992 90.508 0 24.994-24.994 24.994-65.52 0-90.51l-45.254-45.256c-24.994-24.992-65.516-24.992-90.51 0s-24.994 65.518 0 90.508l45.256 45.258zM512 704c-141.384 0-256-114.616-256-256 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 141.384-114.616 256-256 256zM512 288c-88.366 0-160 71.634-160 160s71.634 160 160 160 160-71.634 160-160-71.634-160-160-160z" />
+<glyph unicode="&#xeccd;" glyph-name="moon" d="M715.812 895.52c-60.25 34.784-124.618 55.904-189.572 64.48 122.936-160.082 144.768-384.762 37.574-570.42-107.2-185.67-312.688-279.112-512.788-252.68 39.898-51.958 90.376-97.146 150.628-131.934 245.908-141.974 560.37-57.72 702.344 188.198 141.988 245.924 57.732 560.372-188.186 702.356z" />
+<glyph unicode="&#xecd4;" glyph-name="contrast" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM128 448c0 212.078 171.922 384 384 384v-768c-212.078 0-384 171.922-384 384z" />
+<glyph unicode="&#xed6a;" glyph-name="cross2" d="M893.254 738.746l-90.508 90.508-290.746-290.744-290.746 290.744-90.508-90.506 290.746-290.748-290.746-290.746 90.508-90.508 290.746 290.746 290.746-290.746 90.508 90.51-290.744 290.744z" />
+<glyph unicode="&#xedc0;" glyph-name="arrowleft" d="M672-64l192 192-320 320 320 320-192 192-512-512z" />
+<glyph unicode="&#xedf9;" glyph-name="arrow-resize2" d="M0 896v-384c0-35.346 28.654-64 64-64s64 28.654 64 64v229.488l677.488-677.488h-229.488c-35.346 0-64-28.652-64-64 0-35.346 28.654-64 64-64h384c35.346 0 64 28.654 64 64v384c0 35.348-28.654 64-64 64s-64-28.652-64-64v-229.488l-677.488 677.488h229.488c35.346 0 64 28.654 64 64s-28.652 64-64 64h-384c-35.346 0-64-28.654-64-64z" />
+<glyph unicode="&#xee78;" glyph-name="crop" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" />
</ins><span class="cx" style="display: block; padding: 0 10px"> </font></defs></svg>
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcettf"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayfontstinymcewoff"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayskinie7mincss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.m
 ce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacin
 g:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;curs
 or:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;bord
 er-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover
 .mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);backgrou
 nd:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mc
 e-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-to
 oltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:
 0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;co
 lor:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid t
 ransparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 
 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mc
 e-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-col
 orpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mc
 e-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl
 }.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a0
 0}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-le
 ft:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:ho
 ver .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#fff}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-me
 nu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-me
 nu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn but
 ton{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{b
 ackground:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:nor
 mal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"
 }.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-
 i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-ico
 n:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9&quot
 ;}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB}
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.m
 ce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#fff;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:
 2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-cro
 prect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb
 {position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#aaa;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.m
 ce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:p
 rogid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{p
 osition:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transp
 arent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom
 -color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;border-width:1px;border-style:solid;border-color:#ccc}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notificatio
 n .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notific
 ation-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:tra
 nsparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mc
 e-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#
 aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-inden
 t:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce
 -colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:
 90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:
 1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-tit
 le{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;backg
 round:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-m
 enu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align
  .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-sh
 ortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:rela
 tive}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-
 splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;disp
 lay:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face
 {font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:&q
 uot;\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01
 a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-
 ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:&
 quot;\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#bbb}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayskinmincss"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:0 0;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:400;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container [unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{v
 isibility:inherit!important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-col
 lapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:700;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid #fff}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:1
 00px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:#000}.mce-imagepanel{overflow:auto;background:#000}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,
 85,.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background:0 0;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,.2);border:1px solid rgba(0,0,0,.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:
 -11px;border-top-width:0;border-bottom-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background:0 0;background:#fff;position:fixed;top:0;left:0;
 opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:700;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:700;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-titl
 e{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style
 :solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:
 none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,.75);display:inline-block;;;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:ho
 ver,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;}.mce-btn-small i{line-height:20px;vertical-align:top;}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;;;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;b
 order-top:0}.mce-btn-flat{border:0;background:0 0;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;;;;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-in
 dent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;;;}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px
 ;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1
 ,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom,rgba(0,0,0,0),#000)}.mce-colorpicker-selector1{background:0 0;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid #000;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid #fff;border-radius:50%
 }.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;;;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;;;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;;}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;;}.mce-flow-layout-item{ma
 rgin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,.2);width:100%;height:100%}.mce-label{display:inline-block;;;text-shadow:0 1px 1px rgba(255,255,255,.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:0 0;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menu
 bar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:400;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce
 -menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;;;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#fff}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#ff
 f}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:0 0;border-bottom:1px solid rgba(0,0,0,.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXIma
 geTransform.Microsoft.gradient(enabled=false);background:0 0;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-slider{b
 order:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{b
 ackground:#fff}.mce-tab{display:inline-block;;;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6
 ;filter:alpha(opacity=60);zoom:1;background:#fff url(img/loader.gif) no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:tinymce;src:url(fonts/tinymce.eot);src:url(fonts/tinymce.eot?#iefix) format('embedded-opentype'),url(fonts/tinymce.woff) format('woff'),url(fonts/tinymce.ttf) format('truetype'),url(fonts/tinymce.svg#tinymce) format('svg');font-weight:400;font-style:normal}@font-face{font-family:tinymce-small;src:url(fonts/tinymce-small.eot);src:url(fonts/tinymce-small.eot?#iefix) format('embedded-opentype'),url(fonts/tinymce-small.woff) format('woff'),url(fonts/tinymce-small.ttf) format('truetype'),url(fonts/tinymce-small.svg#tinymce) format('svg');font-weight:400;font-style:normal}.mce-ico{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:tr
 ansparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:&
 quot;\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellcheck
 er:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:
 "\ee78"}.mce-i-editimage:before{content:"\e914"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\edb8"}.mce-i-drop:before{content:"\e934"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-palette:before{content:"\e92a"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.m
 ce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.m
 ce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#fff;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:
 2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-cro
 prect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb
 {position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#aaa;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.m
 ce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:p
 rogid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{p
 osition:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transp
 arent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom
 -color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#f0f0f0;padding:5px;margin-top:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;border-width:1px;border-style:solid;border-color:#ccc}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ecb}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notificatio
 n .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333}.mce-notification .mce-progress .mce-bar-container{border-color:#ccc}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ecb}.mce-notific
 ation-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:tra
 nsparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary{min-width:50px;color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mc
 e-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#
 aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-inden
 t:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce
 -colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:
 90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:
 1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9e9e9e}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-tit
 le{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;backg
 round:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-m
 enu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align
  .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-sh
 ortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:rela
 tive}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bbb;background:#ddd;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-
 splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;disp
 lay:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face
 {font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{c
 ontent:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:be
 fore{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{conte
 nt:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e914"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:b
 efore{content:"\edc0"}.mce-i-arrowright:before{content:"\edb8"}.mce-i-drop:before{content:"\e934"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-palette:before{content:"\e92a"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{
 content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcethemesmodernthemejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/themes/modern/theme.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/themes/modern/theme.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/themes/modern/theme.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,7 +12,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> tinymce.ThemeManager.add('modern', function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">        var self = this, settings = editor.settings, Factory = tinymce.ui.Factory,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                each = tinymce.each, DOM = tinymce.DOM, Rect = tinymce.ui.Rect, FloatPanel = tinymce.ui.FloatPanel;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         each = tinymce.each, DOM = tinymce.DOM, Rect = tinymce.geom.Rect, FloatPanel = tinymce.ui.FloatPanel;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Default menus
</span><span class="cx" style="display: block; padding: 0 10px">        var defaultMenus = {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -416,13 +416,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        panelRect = tinymce.DOM.getRect(panel.getEl());
</span><span class="cx" style="display: block; padding: 0 10px">                        contentAreaRect = tinymce.DOM.getRect(editor.getContentAreaContainer() || editor.getBody());
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        // We need to use these instead of the rect values since the style
+                       // size properites might not be the same as the real size for a table
+                       elementRect.w = match.element.clientWidth;
+                       elementRect.h = match.element.clientHeight;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (!editor.inline) {
</span><span class="cx" style="display: block; padding: 0 10px">                                contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Inflate the elementRect so it doesn't get placed above resize handles
</span><span class="cx" style="display: block; padding: 0 10px">                        if (editor.selection.controlSelection.isResizable(match.element)) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                elementRect = Rect.inflate(elementRect, 0, 7);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         elementRect = Rect.inflate(elementRect, 0, 8);
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        relPos = Rect.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -471,11 +476,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (window.requestAnimationFrame) {
-                               window.requestAnimationFrame(execute);
-                       } else {
-                               execute();
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 tinymce.util.Delay.requestAnimationFrame(execute);
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function bindScrollEvent() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -545,22 +546,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        return null;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.on('click keyup', function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.on('click keyup setContent', function(e) {
+                       // Only act on partial inserts
+                       if (e.type == 'setcontent' && !e.selection) {
+                               return;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Needs to be delayed to avoid Chrome img focus out bug
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 tinymce.util.Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 var match;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (editor.removed) {
-                                       return;
-                               }
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 match = findFrontMostMatch(editor.selection.getNode());
</span><span class="cx" style="display: block; padding: 0 10px">                                if (match) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        hideAllContextToolbars();
</ins><span class="cx" style="display: block; padding: 0 10px">                                         showContextToolbar(match);
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        hideAllContextToolbars();
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 });
</ins><span class="cx" style="display: block; padding: 0 10px">                 });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.on('blur hide', hideAllContextToolbars);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -721,6 +724,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">        function renderIframeUI(args) {
</span><span class="cx" style="display: block; padding: 0 10px">                var panel, resizeHandleCtrl, startSize;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function switchMode() {
+                       return function(e) {
+                               if (e.mode == 'readonly') {
+                                       panel.find('*').disabled(true);
+                               } else {
+                                       panel.find('*').disabled(false);
+                               }
+                       };
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (args.skinUiCss) {
</span><span class="cx" style="display: block; padding: 0 10px">                        tinymce.DOM.loadCSS(args.skinUiCss);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -777,6 +790,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.fire('BeforeRenderUI');
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                editor.on('SwitchMode', switchMode());
</ins><span class="cx" style="display: block; padding: 0 10px">                 panel.renderBefore(args.targetNode).reflow();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if (settings.width) {
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcethemesmodernthememinjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.ThemeManager.add("modern",function(a){function b(b,c){var d,e=[];if(b)return n(b.split(/[ ,]/),function(b){function f(){function c(a){return function(c,d){for(var e,f=d.parents.length;f--&&(e=d.parents[f].nodeName,"OL"!=e&&"UL"!=e););b.active(c&&e==a)}}var d=a.selection;"bullist"==g&&d.selectorChanged("ul > li",c("UL")),"numlist"==g&&d.selectorChanged("ol > li",c("OL")),b.settings.stateSelector&&d.selectorChanged(b.settings.stateSelector,function(a){b.active(a)},!0),b.settings.disabledStateSelector&&d.selectorChanged(b.settings.disabledStateSelector,function(a){b.disabled(a)})}var g;"|"==b?d=null:m.has(b)?(b={type:b,size:c},e.push(b),d=null):(d||(d={type:"buttongroup",items:[]},e.push(d)),a.buttons[b]&&
 (g=b,b=a.buttons[g],"function"==typeof b&&(b=b()),b.type=b.type||"button",b.size=c,b=m.create(b),d.items.push(b),a.initialized?f():a.on("init",f)))}),{type:"toolbar",layout:"flow",items:e}}function c(a){function c(c){return c?(d.push(b(c,a)),!0):void 0}var d=[];if(tinymce.isArray(l.toolbar)){if(0===l.toolbar.length)return;tinymce.each(l.toolbar,function(a,b){l["toolbar"+(b+1)]=a}),delete l.toolbar}for(var e=1;10>e&&c(l["toolbar"+e]);e++);return d.length||l.toolbar===!1||c(l.toolbar||s),d.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:d}:void 0}function d(){function b(b){var c;return"|"==b?{text:"|"}:c=a.menuItems[b]}function c(c){var d,e,f,g,h;if(h=tinymce.makeMap((l.removed_menuitems||"").split(/[ ,]/)),l.menu?(e=l.menu[c],g=!0):e=r[c],e){d={text:e.title},f=[],n((e.items||"").split
 (/[ ,]/),function(a){var c=b(a);c&&!h[a]&&f.push(b(a))}),g||n(a.menuItems,function(a){a.context==c&&("before"==a.separator&&f.push({text:"|"}),a.prependToContext?f.unshift(a):f.push(a),"after"==a.separator&&f.push({text:"|"}))});for(var i=0;i<f.length;i++)"|"==f[i].text&&(0===i||i==f.length-1)&&f.splice(i,1);if(d.menu=f,!d.menu.length)return null}return d}var d,e=[],f=[];if(l.menu)for(d in l.menu)f.push(d);else for(d in r)f.push(d);for(var g="string"==typeof l.menubar?l.menubar.split(/[ ,]/):f,h=0;h<g.length;h++){var i=g[h];i=c(i),i&&e.push(i)}return e}function e(b){function c(a){var c=b.find(a)[0];c&&c.focus(!0)}a.shortcuts.add("Alt+F9","",function(){c("menubar")}),a.shortcuts.add("Alt+F10","",function(){c("toolbar")}),a.shortcuts.add("Alt+F11","",function(){c("e
 lementpath")}),b.on("cancel",function(){a.focus()})}function f(b,c){function d(a){return{width:a.clientWidth,height:a.clientHeight}}var e,f,g,h;e=a.getContainer(),f=a.getContentAreaContainer().firstChild,g=d(e),h=d(f),null!==b&&(b=Math.max(l.min_width||100,b),b=Math.min(l.max_width||65535,b),o.setStyle(e,"width",b+(g.width-h.width)),o.setStyle(f,"width",b)),c=Math.max(l.min_height||100,c),c=Math.min(l.max_height||65535,c),o.setStyle(f,"height",c),a.fire("ResizeEditor")}function g(b,c){var d=a.getContentAreaContainer();k.resizeTo(d.clientWidth+b,d.clientHeight+c)}function h(){function c(){return a.contextToolbars||[]}function d(b){var c,d,e;return c=tinymce.DOM.getPos(a.getContentAreaContainer()),d=a.dom.getRect(b),e=a.dom.getRoot(),"BODY"==e.nodeName&&(d.x-=e.ownerDocument.documentElement.scrollLeft||e.scrollLeft,d.y-=e.ownerDocument.documentElement.scrollTop||e.scrollTop),d.x+=c.x,d.y+=c.y,d}function e
 (){n(a.contextToolbars,function(a){a.panel&&a.panel.hide()})}function f(b){var c,f,g,h,i,j,k;if(!a.removed){if(!b||!b.toolbar.panel)return void e();k=["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],i=b.toolbar.panel,i.show(),g=d(b.element),f=tinymce.DOM.getRect(i.getEl()),h=tinymce.DOM.getRect(a.getContentAreaContainer()||a.getBody()),a.inline||(h.w=a.getDoc().documentElement.offsetWidth),a.selection.controlSelection.isResizable(b.element)&&(g=p.inflate(g,0,7)),c=p.findBestRelativePosition(f,g,h,k),c?(n(k.concat("inside"),function(a){i.classes.toggle("tinymce-inline-"+a,a==c)}),j=p.relativePosition(f,g,c),i.moveTo(j.x,j.y)):(n(k,function(a){i.classes.toggle("tinymce-inline-"+a,!1)}),i.classes.toggle("tinymce-inline-inside",!0),g=p.intersect(h,g),g?(c=p.findBestRelativePosition(f,g,h,["tc-tc","tl-tl","tr-tr"]),c?(j=p.relativePosition(f,g,
 c),i.moveTo(j.x,j.y)):i.moveTo(g.x,g.y)):i.hide())}}function g(){function b(){a.selection&&f(k(a.selection.getNode()))}window.requestAnimationFrame?window.requestAnimationFrame(b):b()}function h(){l||(l=a.selection.getScrollContainer()||a.getWin(),tinymce.$(l).on("scroll",g),a.on("remove",function(){tinymce.$(l).off("scroll")}))}function i(a){var c;return a.toolbar.panel?(a.toolbar.panel.show(),void f(a)):(h(),c=m.create({type:"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:b(a.toolbar.items)}),a.toolbar.panel=c,c.renderTo(document.body).reflow(),void f(a))}function j(){tinymce.each(c(),function(a){a.panel&&a.panel.hide()})}function k(b){var d,e,f,g=c();for(f=a.$(b).parents().add(b),d=f.length-1;d>=0;d--)for(e=g.length-1;e>=0;e--)if(g[e].predicate(f[d]))return{t
 oolbar:g[e],element:f[d]};return null}var l;a.on("click keyup",function(){window.setTimeout(function(){var b;a.removed||(b=k(a.selection.getNode()),b?i(b):j())},0)}),a.on("blur hide",j),a.on("ObjectResizeStart",function(){var b=k(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on("nodeChange ResizeEditor ResizeWindow",g),a.on("remove",function(){tinymce.each(c(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}})}function i(b){function f(){if(n&&n.moveRel&&n.visible()&&!n._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=o.getPos(c),g=o.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}n.fixed(!1).moveRel(c,a.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(d,e)}}function g(){n&&(n.show(),f(),o.addClass(a.getBody(),"mce-edit-focus"))}function i()
 {n&&(n.hide(),q.hideAll(),o.removeClass(a.getBody(),"mce-edit-focus"))}function j(){return n?void(n.visible()||g()):(n=k.panel=m.create({type:p?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!p,border:1,items:[l.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:d()},c(l.toolbar_items_size)]}),a.fire("BeforeRenderUI"),n.renderTo(p||document.body).reflow(),e(n),g(),h(),a.on("nodeChange",f),a.on("activate",g),a.on("deactivate",i),void a.nodeChanged())}var n,p;return l.fixed_toolbar_container&&(p=o.select(l.fixed_toolbar_container)[0]),l.content_editable=!0,a.on("focus",function(){b.skinUiCss?tinymce.DOM.styleSheetLoader.load(b.skinUiCss,j,j):j()}),a.on("blur hide",i),a.on("remove",function(){n
 &&(n.remove(),n=null)}),b.skinUiCss&&tinymce.DOM.styleSheetLoader.load(b.skinUiCss),{}}function j(b){var g,i,j;return b.skinUiCss&&tinymce.DOM.loadCSS(b.skinUiCss),g=k.panel=m.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[l.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:d()},c(l.toolbar_items_size),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),l.resize!==!1&&(i={type:"resizehandle",direction:l.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;j={width:b.clientWidth,height:b.clientHeight}},onResize:function(a){"both"==l.resize?f(j.width+a.deltaX,j.height+a.deltaY):f(null,j.height+a.deltaY)}}),l.statusbar!==!1&&g.add({type:"panel",name:&q
 uot;statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},i]}),l.readonly&&g.find("*").disabled(!0),a.fire("BeforeRenderUI"),g.renderBefore(b.targetNode).reflow(),l.width&&tinymce.DOM.setStyle(g.getEl(),"width",l.width),a.on("remove",function(){g.remove(),g=null}),e(g),h(),{iframeContainer:g.find("#iframe")[0].getEl(),editorContainer:g.getEl()}}var k=this,l=a.settings,m=tinymce.ui.Factory,n=tinymce.each,o=tinymce.DOM,p=tinymce.ui.Rect,q=tinymce.ui.FloatPanel,r={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscrip
 t | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},s="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";k.renderUI=function(b){var c=l.skin!==!1?l.skin||"lightgray":!1;if(c){var d=l.skin_url;d=d?a.documentBaseURI.toAbsolute(d):tinymce.baseURL+"/skins/"+c,tinymce.Env.documentMode<=7?b.skinUiCss=d+"/skin.ie7.min.css":b.skinUiCss=d+"/skin.min.css",a.contentCSS.push(d+"/content"+(a.inline?".inline":"")+".min.css")}return a.on("ProgressState",function(a){k.throbber=k.throbber||new tinymce.ui.Throbber(k.panel.getEl("body")),a.state?k.throbber.show(a.time):k.throbber.hide()}),l.inline?i(b):j(b)},k.resizeTo=f,k.resizeBy=g});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.ThemeManager.add("modern",function(e){function t(t,n){var r,i=[];if(t)return h(t.split(/[ ,]/),function(t){function o(){function n(e){return function(n,r){for(var i,o=r.parents.length;o--&&(i=r.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(n&&i==e)}}var r=e.selection;"bullist"==a&&r.selectorChanged("ul > li",n("UL")),"numlist"==a&&r.selectorChanged("ol > li",n("OL")),t.settings.stateSelector&&r.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&r.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var a;"|"==t?r=null:f.has(t)?(t={type:t,size:n},i.push(t),r=null):(r||(r={type:"buttongroup",items:[]},i.push(r)),e.buttons[t]&&
 (a=t,t=e.buttons[a],"function"==typeof t&&(t=t()),t.type=t.type||"button",t.size=n,t=f.create(t),r.items.push(t),e.initialized?o():e.on("init",o)))}),{type:"toolbar",layout:"flow",items:i}}function n(e){function n(n){return n?(r.push(t(n,e)),!0):void 0}var r=[];if(tinymce.isArray(d.toolbar)){if(0===d.toolbar.length)return;tinymce.each(d.toolbar,function(e,t){d["toolbar"+(t+1)]=e}),delete d.toolbar}for(var i=1;10>i&&n(d["toolbar"+i]);i++);return r.length||d.toolbar===!1||n(d.toolbar||y),r.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:r}:void 0}function r(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var r,i,o,a,s;if(s=tinymce.makeMap((d.removed_menuitems||"").split(/[ ,]/)),d.menu?(i=d.menu[n],a=!0):i=v[n],i){r={text:i.title},o=[],h((i.items||"").split
 (/[ ,]/),function(e){var n=t(e);n&&!s[e]&&o.push(t(e))}),a||h(e.menuItems,function(e){e.context==n&&("before"==e.separator&&o.push({text:"|"}),e.prependToContext?o.unshift(e):o.push(e),"after"==e.separator&&o.push({text:"|"}))});for(var l=0;l<o.length;l++)"|"==o[l].text&&(0===l||l==o.length-1)&&o.splice(l,1);if(r.menu=o,!r.menu.length)return null}return r}var r,i=[],o=[];if(d.menu)for(r in d.menu)o.push(r);else for(r in v)o.push(r);for(var a="string"==typeof d.menubar?d.menubar.split(/[ ,]/):o,s=0;s<a.length;s++){var l=a[s];l=n(l),l&&i.push(l)}return i}function i(t){function n(e){var n=t.find(e)[0];n&&n.focus(!0)}e.shortcuts.add("Alt+F9","",function(){n("menubar")}),e.shortcuts.add("Alt+F10","",function(){n("toolbar")}),e.shortcuts.add("Alt+F11","",function(){n("e
 lementpath")}),t.on("cancel",function(){e.focus()})}function o(t,n){function r(e){return{width:e.clientWidth,height:e.clientHeight}}var i,o,a,s;i=e.getContainer(),o=e.getContentAreaContainer().firstChild,a=r(i),s=r(o),null!==t&&(t=Math.max(d.min_width||100,t),t=Math.min(d.max_width||65535,t),m.setStyle(i,"width",t+(a.width-s.width)),m.setStyle(o,"width",t)),n=Math.max(d.min_height||100,n),n=Math.min(d.max_height||65535,n),m.setStyle(o,"height",n),e.fire("ResizeEditor")}function a(t,n){var r=e.getContentAreaContainer();u.resizeTo(r.clientWidth+t,r.clientHeight+n)}function s(){function n(){return e.contextToolbars||[]}function r(t){var n,r,i;return n=tinymce.DOM.getPos(e.getContentAreaContainer()),r=e.dom.getRect(t),i=e.dom.getRoot(),"BODY"==i.nodeName&&(r.x-=i.ownerDocument.documentElement.scrollLeft||i.scrollLeft,r.y-=i.ownerDocument.documentElement.scrollTop||i.scrollTop),r.x+=n.x,r.y+=n.y,r}function i
 (){h(e.contextToolbars,function(e){e.panel&&e.panel.hide()})}function o(t){var n,o,a,s,l,c,u;if(!e.removed){if(!t||!t.toolbar.panel)return void i();u=["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],l=t.toolbar.panel,l.show(),a=r(t.element),o=tinymce.DOM.getRect(l.getEl()),s=tinymce.DOM.getRect(e.getContentAreaContainer()||e.getBody()),a.w=t.element.clientWidth,a.h=t.element.clientHeight,e.inline||(s.w=e.getDoc().documentElement.offsetWidth),e.selection.controlSelection.isResizable(t.element)&&(a=p.inflate(a,0,8)),n=p.findBestRelativePosition(o,a,s,u),n?(h(u.concat("inside"),function(e){l.classes.toggle("tinymce-inline-"+e,e==n)}),c=p.relativePosition(o,a,n),l.moveTo(c.x,c.y)):(h(u,function(e){l.classes.toggle("tinymce-inline-"+e,!1)}),l.classes.toggle("tinymce-inline-inside",!0),a=p.intersect(s,a),a?(n=p.findBestRelativePosition(o,a,s,["tc-tc","tl-tl&q
 uot;,"tr-tr"]),n?(c=p.relativePosition(o,a,n),l.moveTo(c.x,c.y)):l.moveTo(a.x,a.y)):l.hide())}}function a(){function t(){e.selection&&o(u(e.selection.getNode()))}tinymce.util.Delay.requestAnimationFrame(t)}function s(){d||(d=e.selection.getScrollContainer()||e.getWin(),tinymce.$(d).on("scroll",a),e.on("remove",function(){tinymce.$(d).off("scroll")}))}function l(e){var n;return e.toolbar.panel?(e.toolbar.panel.show(),void o(e)):(s(),n=f.create({type:"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:t(e.toolbar.items)}),e.toolbar.panel=n,n.renderTo(document.body).reflow(),void o(e))}function c(){tinymce.each(n(),function(e){e.panel&&e.panel.hide()})}function u(t){var r,i,o,a=n();for(o=e.$(t).parents().add(t),r=o.length-1;r>=0;r--)for(i=a.length-1;i>=0;i--)
 if(a[i].predicate(o[r]))return{toolbar:a[i],element:o[r]};return null}var d;e.on("click keyup setContent",function(t){("setcontent"!=t.type||t.selection)&&tinymce.util.Delay.setEditorTimeout(e,function(){var t;t=u(e.selection.getNode()),t?(c(),l(t)):c()})}),e.on("blur hide",c),e.on("ObjectResizeStart",function(){var t=u(e.selection.getNode());t&&t.toolbar.panel&&t.toolbar.panel.hide()}),e.on("nodeChange ResizeEditor ResizeWindow",a),e.on("remove",function(){tinymce.each(n(),function(e){e.panel&&e.panel.remove()}),e.contextToolbars={}})}function l(t){function o(){if(h&&h.moveRel&&h.visible()&&!h._fixed){var t=e.selection.getScrollContainer(),n=e.getBody(),r=0,i=0;if(t){var o=m.getPos(n),a=m.getPos(t);r=Math.max(0,a.x-o.x),i=Math.max(0,a.y-o.y)}h.fixed(!1).moveRel(n,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveB
 y(r,i)}}function a(){h&&(h.show(),o(),m.addClass(e.getBody(),"mce-edit-focus"))}function l(){h&&(h.hide(),g.hideAll(),m.removeClass(e.getBody(),"mce-edit-focus"))}function c(){return h?void(h.visible()||a()):(h=u.panel=f.create({type:p?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!p,border:1,items:[d.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:r()},n(d.toolbar_items_size)]}),e.fire("BeforeRenderUI"),h.renderTo(p||document.body).reflow(),i(h),a(),s(),e.on("nodeChange",o),e.on("activate",a),e.on("deactivate",l),void e.nodeChanged())}var h,p;return d.fixed_toolbar_container&&(p=m.select(d.fixed_toolbar_container)[0]),d.content_editable=!0,e.on("focus",function(){t.skinUiCss?tinymce.DOM.s
 tyleSheetLoader.load(t.skinUiCss,c,c):c()}),e.on("blur hide",l),e.on("remove",function(){h&&(h.remove(),h=null)}),t.skinUiCss&&tinymce.DOM.styleSheetLoader.load(t.skinUiCss),{}}function c(t){function a(){return function(e){"readonly"==e.mode?l.find("*").disabled(!0):l.find("*").disabled(!1)}}var l,c,h;return t.skinUiCss&&tinymce.DOM.loadCSS(t.skinUiCss),l=u.panel=f.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[d.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:r()},n(d.toolbar_items_size),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),d.resize!==!1&&(c={type:"resizehandle",direction:d.resize,onResizeStart:function(){var t=e.getContentAreaContai
 ner().firstChild;h={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){"both"==d.resize?o(h.width+e.deltaX,h.height+e.deltaY):o(null,h.height+e.deltaY)}}),d.statusbar!==!1&&l.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},c]}),d.readonly&&l.find("*").disabled(!0),e.fire("BeforeRenderUI"),e.on("SwitchMode",a()),l.renderBefore(t.targetNode).reflow(),d.width&&tinymce.DOM.setStyle(l.getEl(),"width",d.width),e.on("remove",function(){l.remove(),l=null}),i(l),s(),{iframeContainer:l.find("#iframe")[0].getEl(),editorContainer:l.getEl()}}var u=this,d=e.settings,f=tinymce.ui.Factory,h=tinymce.each,m=tinymce.DOM,p=tinymce.geom.Rect,g=tinymce.ui.FloatPanel,v={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:
 "undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},y="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";u.renderUI=function(t){var n=d.skin!==!1?d.skin||"lightgray":!1;if(n){var r=d.skin_url;r=r?e.documentBaseURI.toAbsolute(r):tinymce.baseURL+"/skins/"+n,tinymce.Env.documentMode<=7?t.skinUiCss=r+"/skin.ie7.min.css":t.skinUiCss=r+"/skin.min.css",e.contentCSS.push(r+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){u.throbber=u.throbber||new tinym
 ce.ui.Throbber(u.panel.getEl("body")),e.state?u.throbber.show(e.time):u.throbber.hide()}),d.inline?l(t):c(t)},u.resizeTo=o,u.resizeBy=a});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcetinymcejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/tinymce.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/tinymce.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/tinymce.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,4 +1,4 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// 4.2.8 (2015-11-13)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// 4.3.3 (2016-01-14)
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Compiled inline version. (Library mode)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +99,614 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/geom/Rect.js
+
+/**
+ * Rect.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Contains various tools for rect/position calculation.
+ *
+ * @class tinymce.geom.Rect
+ */
+define("tinymce/geom/Rect", [
+], function() {
+       "use strict";
+
+       var min = Math.min, max = Math.max, round = Math.round;
+
+       /**
+        * Returns the rect positioned based on the relative position name
+        * to the target rect.
+        *
+        * @method relativePosition
+        * @param {Rect} rect Source rect to modify into a new rect.
+        * @param {Rect} targetRect Rect to move relative to based on the rel option.
+        * @param {String} rel Relative position. For example: tr-bl.
+        */
+       function relativePosition(rect, targetRect, rel) {
+               var x, y, w, h, targetW, targetH;
+
+               x = targetRect.x;
+               y = targetRect.y;
+               w = rect.w;
+               h = rect.h;
+               targetW = targetRect.w;
+               targetH = targetRect.h;
+
+               rel = (rel || '').split('');
+
+               if (rel[0] === 'b') {
+                       y += targetH;
+               }
+
+               if (rel[1] === 'r') {
+                       x += targetW;
+               }
+
+               if (rel[0] === 'c') {
+                       y += round(targetH / 2);
+               }
+
+               if (rel[1] === 'c') {
+                       x += round(targetW / 2);
+               }
+
+               if (rel[3] === 'b') {
+                       y -= h;
+               }
+
+               if (rel[4] === 'r') {
+                       x -= w;
+               }
+
+               if (rel[3] === 'c') {
+                       y -= round(h / 2);
+               }
+
+               if (rel[4] === 'c') {
+                       x -= round(w / 2);
+               }
+
+               return create(x, y, w, h);
+       }
+
+       /**
+        * Tests various positions to get the most suitable one.
+        *
+        * @method findBestRelativePosition
+        * @param {Rect} rect Rect to use as source.
+        * @param {Rect} targetRect Rect to move relative to.
+        * @param {Rect} constrainRect Rect to constrain within.
+        * @param {Array} rels Array of relative positions to test against.
+        */
+       function findBestRelativePosition(rect, targetRect, constrainRect, rels) {
+               var pos, i;
+
+               for (i = 0; i < rels.length; i++) {
+                       pos = relativePosition(rect, targetRect, rels[i]);
+
+                       if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x &&
+                               pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {
+                               return rels[i];
+                       }
+               }
+
+               return null;
+       }
+
+       /**
+        * Inflates the rect in all directions.
+        *
+        * @method inflate
+        * @param {Rect} rect Rect to expand.
+        * @param {Number} w Relative width to expand by.
+        * @param {Number} h Relative height to expand by.
+        * @return {Rect} New expanded rect.
+        */
+       function inflate(rect, w, h) {
+               return create(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);
+       }
+
+       /**
+        * Returns the intersection of the specified rectangles.
+        *
+        * @method intersect
+        * @param {Rect} rect The first rectangle to compare.
+        * @param {Rect} cropRect The second rectangle to compare.
+        * @return {Rect} The intersection of the two rectangles or null if they don't intersect.
+        */
+       function intersect(rect, cropRect) {
+               var x1, y1, x2, y2;
+
+               x1 = max(rect.x, cropRect.x);
+               y1 = max(rect.y, cropRect.y);
+               x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
+               y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
+
+               if (x2 - x1 < 0 || y2 - y1 < 0) {
+                       return null;
+               }
+
+               return create(x1, y1, x2 - x1, y2 - y1);
+       }
+
+       /**
+        * Returns a rect clamped within the specified clamp rect. This forces the
+        * rect to be inside the clamp rect.
+        *
+        * @method clamp
+        * @param {Rect} rect Rectangle to force within clamp rect.
+        * @param {Rect} clampRect Rectable to force within.
+        * @param {Boolean} fixedSize True/false if size should be fixed.
+        * @return {Rect} Clamped rect.
+        */
+       function clamp(rect, clampRect, fixedSize) {
+               var underflowX1, underflowY1, overflowX2, overflowY2,
+                       x1, y1, x2, y2, cx2, cy2;
+
+               x1 = rect.x;
+               y1 = rect.y;
+               x2 = rect.x + rect.w;
+               y2 = rect.y + rect.h;
+               cx2 = clampRect.x + clampRect.w;
+               cy2 = clampRect.y + clampRect.h;
+
+               underflowX1 = max(0, clampRect.x - x1);
+               underflowY1 = max(0, clampRect.y - y1);
+               overflowX2 = max(0, x2 - cx2);
+               overflowY2 = max(0, y2 - cy2);
+
+               x1 += underflowX1;
+               y1 += underflowY1;
+
+               if (fixedSize) {
+                       x2 += underflowX1;
+                       y2 += underflowY1;
+                       x1 -= overflowX2;
+                       y1 -= overflowY2;
+               }
+
+               x2 -= overflowX2;
+               y2 -= overflowY2;
+
+               return create(x1, y1, x2 - x1, y2 - y1);
+       }
+
+       /**
+        * Creates a new rectangle object.
+        *
+        * @method create
+        * @param {Number} x Rectangle x location.
+        * @param {Number} y Rectangle y location.
+        * @param {Number} w Rectangle width.
+        * @param {Number} h Rectangle height.
+        * @return {Rect} New rectangle object.
+        */
+       function create(x, y, w, h) {
+               return {x: x, y: y, w: w, h: h};
+       }
+
+       /**
+        * Creates a new rectangle object form a clientRects object.
+        *
+        * @method fromClientRect
+        * @param {ClientRect} clientRect DOM ClientRect object.
+        * @return {Rect} New rectangle object.
+        */
+       function fromClientRect(clientRect) {
+               return create(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
+       }
+
+       return {
+               inflate: inflate,
+               relativePosition: relativePosition,
+               findBestRelativePosition: findBestRelativePosition,
+               intersect: intersect,
+               clamp: clamp,
+               create: create,
+               fromClientRect: fromClientRect
+       };
+});
+
+// Included from: js/tinymce/classes/util/Promise.js
+
+/**
+ * Promise.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * Promise polyfill under MIT license: https://github.com/taylorhakes/promise-polyfill
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/* eslint-disable */
+/* jshint ignore:start */
+
+/**
+ * Modifed to be a feature fill and wrapped as tinymce module.
+ */
+define("tinymce/util/Promise", [], function() {
+       if (window.Promise) {
+               return window.Promise;
+       }
+
+       // Use polyfill for setImmediate for performance gains
+       var asap = Promise.immediateFn || (typeof setImmediate === 'function' && setImmediate) ||
+               function(fn) { setTimeout(fn, 1); };
+
+       // Polyfill for Function.prototype.bind
+       function bind(fn, thisArg) {
+               return function() {
+                       fn.apply(thisArg, arguments);
+               };
+       }
+
+       var isArray = Array.isArray || function(value) { return Object.prototype.toString.call(value) === "[object Array]"; };
+
+       function Promise(fn) {
+               if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
+               if (typeof fn !== 'function') throw new TypeError('not a function');
+               this._state = null;
+               this._value = null;
+               this._deferreds = [];
+
+               doResolve(fn, bind(resolve, this), bind(reject, this));
+       }
+
+       function handle(deferred) {
+               var me = this;
+               if (this._state === null) {
+                       this._deferreds.push(deferred);
+                       return;
+               }
+               asap(function() {
+                       var cb = me._state ? deferred.onFulfilled : deferred.onRejected;
+                       if (cb === null) {
+                               (me._state ? deferred.resolve : deferred.reject)(me._value);
+                               return;
+                       }
+                       var ret;
+                       try {
+                               ret = cb(me._value);
+                       }
+                       catch (e) {
+                               deferred.reject(e);
+                               return;
+                       }
+                       deferred.resolve(ret);
+               });
+       }
+
+       function resolve(newValue) {
+               try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+                       if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.');
+                       if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
+                               var then = newValue.then;
+                               if (typeof then === 'function') {
+                                       doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));
+                                       return;
+                               }
+                       }
+                       this._state = true;
+                       this._value = newValue;
+                       finale.call(this);
+               } catch (e) { reject.call(this, e); }
+       }
+
+       function reject(newValue) {
+               this._state = false;
+               this._value = newValue;
+               finale.call(this);
+       }
+
+       function finale() {
+               for (var i = 0, len = this._deferreds.length; i < len; i++) {
+                       handle.call(this, this._deferreds[i]);
+               }
+               this._deferreds = null;
+       }
+
+       function Handler(onFulfilled, onRejected, resolve, reject){
+               this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
+               this.onRejected = typeof onRejected === 'function' ? onRejected : null;
+               this.resolve = resolve;
+               this.reject = reject;
+       }
+
+       /**
+        * Take a potentially misbehaving resolver function and make sure
+        * onFulfilled and onRejected are only called once.
+        *
+        * Makes no guarantees about asynchrony.
+        */
+       function doResolve(fn, onFulfilled, onRejected) {
+               var done = false;
+               try {
+                       fn(function (value) {
+                               if (done) return;
+                               done = true;
+                               onFulfilled(value);
+                       }, function (reason) {
+                               if (done) return;
+                               done = true;
+                               onRejected(reason);
+                       });
+               } catch (ex) {
+                       if (done) return;
+                       done = true;
+                       onRejected(ex);
+               }
+       }
+
+       Promise.prototype['catch'] = function (onRejected) {
+               return this.then(null, onRejected);
+       };
+
+       Promise.prototype.then = function(onFulfilled, onRejected) {
+               var me = this;
+               return new Promise(function(resolve, reject) {
+                       handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));
+               });
+       };
+
+       Promise.all = function () {
+               var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
+
+               return new Promise(function (resolve, reject) {
+                       if (args.length === 0) return resolve([]);
+                       var remaining = args.length;
+                       function res(i, val) {
+                               try {
+                                       if (val && (typeof val === 'object' || typeof val === 'function')) {
+                                               var then = val.then;
+                                               if (typeof then === 'function') {
+                                                       then.call(val, function (val) { res(i, val); }, reject);
+                                                       return;
+                                               }
+                                       }
+                                       args[i] = val;
+                                       if (--remaining === 0) {
+                                               resolve(args);
+                                       }
+                               } catch (ex) {
+                                       reject(ex);
+                               }
+                       }
+                       for (var i = 0; i < args.length; i++) {
+                               res(i, args[i]);
+                       }
+               });
+       };
+
+       Promise.resolve = function (value) {
+               if (value && typeof value === 'object' && value.constructor === Promise) {
+                       return value;
+               }
+
+               return new Promise(function (resolve) {
+                       resolve(value);
+               });
+       };
+
+       Promise.reject = function (value) {
+               return new Promise(function (resolve, reject) {
+                       reject(value);
+               });
+       };
+
+       Promise.race = function (values) {
+               return new Promise(function (resolve, reject) {
+                       for(var i = 0, len = values.length; i < len; i++) {
+                               values[i].then(resolve, reject);
+                       }
+               });
+       };
+
+       return Promise;
+});
+
+/* jshint ignore:end */
+/* eslint-enable */
+
+// Included from: js/tinymce/classes/util/Delay.js
+
+/**
+ * Delay.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Utility class for working with delayed actions like setTimeout.
+ *
+ * @class tinymce.util.Delay
+ */
+define("tinymce/util/Delay", [
+       "tinymce/util/Promise"
+], function(Promise) {
+       var requestAnimationFramePromise;
+
+       function requestAnimationFrame(callback, element) {
+               var i, requestAnimationFrameFunc = window.requestAnimationFrame, vendors = ['ms', 'moz', 'webkit'];
+
+               function featurefill(callback) {
+                       window.setTimeout(callback, 0);
+               }
+
+               for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {
+                       requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];
+               }
+
+               if (!requestAnimationFrameFunc) {
+                       requestAnimationFrameFunc = featurefill;
+               }
+
+               requestAnimationFrameFunc(callback, element);
+       }
+
+       function wrappedSetTimeout(callback, time) {
+               if (typeof time != 'number') {
+                       time = 0;
+               }
+
+               return setTimeout(callback, time);
+       }
+
+       function wrappedSetInterval(callback, time) {
+               if (typeof time != 'number') {
+                       time = 0;
+               }
+
+               return setInterval(callback, time);
+       }
+
+       function wrappedClearTimeout(id) {
+               return clearTimeout(id);
+       }
+
+       function wrappedClearInterval(id) {
+               return clearInterval(id);
+       }
+
+       return {
+               /**
+                * Requests an animation frame and fallbacks to a timeout on older browsers.
+                *
+                * @method requestAnimationFrame
+                * @param {function} callback Callback to execute when a new frame is available.
+                * @param {DOMElement} element Optional element to scope it to.
+                */
+               requestAnimationFrame: function(callback, element) {
+                       if (requestAnimationFramePromise) {
+                               requestAnimationFramePromise.then(callback);
+                               return;
+                       }
+
+                       requestAnimationFramePromise = new Promise(function(resolve) {
+                               if (!element) {
+                                       element = document.body;
+                               }
+
+                               requestAnimationFrame(resolve, element);
+                       }).then(callback);
+               },
+
+               /**
+                * Sets a timer in ms and executes the specified callback when the timer runs out.
+                *
+                * @method setTimeout
+                * @param {function} callback Callback to execute when timer runs out.
+                * @param {Number} time Optional time to wait before the callback is executed, defaults to 0.
+                * @return {Number} Timeout id number.
+                */
+               setTimeout: wrappedSetTimeout,
+
+               /**
+                * Sets an interval timer in ms and executes the specified callback at every interval of that time.
+                *
+                * @method setInterval
+                * @param {function} callback Callback to execute when interval time runs out.
+                * @param {Number} time Optional time to wait before the callback is executed, defaults to 0.
+                * @return {Number} Timeout id number.
+                */
+               setInterval: wrappedSetInterval,
+
+               /**
+                * Sets an editor timeout it's similar to setTimeout except that it checks if the editor instance is
+                * still alive when the callback gets executed.
+                *
+                * @method setEditorTimeout
+                * @param {tinymce.Editor} editor Editor instance to check the removed state on.
+                * @param {function} callback Callback to execute when timer runs out.
+                * @param {Number} time Optional time to wait before the callback is executed, defaults to 0.
+                * @return {Number} Timeout id number.
+                */
+               setEditorTimeout: function(editor, callback, time) {
+                       return wrappedSetTimeout(function() {
+                               if (!editor.removed) {
+                                       callback();
+                               }
+                       }, time);
+               },
+
+               /**
+                * Sets an interval timer it's similar to setInterval except that it checks if the editor instance is
+                * still alive when the callback gets executed.
+                *
+                * @method setEditorInterval
+                * @param {function} callback Callback to execute when interval time runs out.
+                * @param {Number} time Optional time to wait before the callback is executed, defaults to 0.
+                * @return {Number} Timeout id number.
+                */
+               setEditorInterval: function(editor, callback, time) {
+                       var timer;
+
+                       timer = wrappedSetInterval(function() {
+                               if (!editor.removed) {
+                                       callback();
+                               } else {
+                                       clearInterval(timer);
+                               }
+                       }, time);
+
+                       return timer;
+               },
+
+               /**
+                * Creates throttled callback function that only gets executed once within the specified time.
+                *
+                * @method throttle
+                * @param {function} callback Callback to execute when timer finishes.
+                * @param {Number} time Optional time to wait before the callback is executed, defaults to 0.
+                * @return {Function} Throttled function callback.
+                */
+               throttle: function(callback, time) {
+                       var timer;
+
+                       return function() {
+                               var args = arguments;
+
+                               clearTimeout(timer);
+
+                               timer = wrappedSetTimeout(function() {
+                                       callback.apply(this, args);
+                               }, time);
+                       };
+               },
+
+               /**
+                * Clears an interval timer so it won't execute.
+                *
+                * @method clearInterval
+                * @param {Number} Interval timer id number.
+                */
+               clearInterval: wrappedClearInterval,
+
+               /**
+                * Clears an timeout timer so it won't execute.
+                *
+                * @method clearTimeout
+                * @param {Number} Timeout timer id number.
+                */
+               clearTimeout: wrappedClearTimeout
+       };
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/dom/EventUtils.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,7 +727,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @class tinymce.dom.EventUtils
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-define("tinymce/dom/EventUtils", [], function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+define("tinymce/dom/EventUtils", [
+       "tinymce/util/Delay"
+], function(Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        var eventExpandoPrefix = "mce-data-";
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -274,7 +884,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                // http://javascript.nwbox.com/IEContentLoaded/
</span><span class="cx" style="display: block; padding: 0 10px">                                doc.documentElement.doScroll("left");
</span><span class="cx" style="display: block; padding: 0 10px">                        } catch (ex) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                setTimeout(tryScroll, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         Delay.setTimeout(tryScroll);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2734,8 +3344,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/Env", [], function() {
</span><span class="cx" style="display: block; padding: 0 10px">        var nav = navigator, userAgent = nav.userAgent;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function matchMediaQuery(query) {
+               return "matchMedia" in window ? matchMedia(query).matches : false;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         opera = window.opera && window.opera.buildNumber;
</span><span class="cx" style="display: block; padding: 0 10px">        android = /Android/.test(userAgent);
</span><span class="cx" style="display: block; padding: 0 10px">        webkit = /WebKit/.test(userAgent);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2748,6 +3362,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        mac = userAgent.indexOf('Mac') != -1;
</span><span class="cx" style="display: block; padding: 0 10px">        iDevice = /(iPad|iPhone)/.test(userAgent);
</span><span class="cx" style="display: block; padding: 0 10px">        fileApi = "FormData" in window && "FileReader" in window && "URL" in window && !!URL.createObjectURL;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        phone = matchMediaQuery("only screen and (max-device-width: 480px)") && (android || iDevice);
+       tablet = matchMediaQuery("only screen and (min-width: 800px)") && (android || iDevice);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if (ie12) {
</span><span class="cx" style="display: block; padding: 0 10px">                webkit = false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2870,7 +3486,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @property fileApi
</span><span class="cx" style="display: block; padding: 0 10px">                 * @type Boolean
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fileApi: fileApi
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         fileApi: fileApi,
+
+               /**
+                * Constant that is true if the browser supports contentEditable=false regions.
+                *
+                * @property ceFalse
+                * @type Boolean
+                */
+               ceFalse: (ie === false || ie > 8),
+
+               desktop: !phone && !tablet
</ins><span class="cx" style="display: block; padding: 0 10px">         };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2953,8 +3579,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        function filter(a, f) {
</span><span class="cx" style="display: block; padding: 0 10px">                var o = [];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                each(a, function(v) {
-                       if (!f || f(v)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         each(a, function(v, index) {
+                       if (!f || f(v, index, a)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 o.push(v);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2981,7 +3607,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if (arguments.length < 3) {
</span><span class="cx" style="display: block; padding: 0 10px">                        accumulator = collection[0];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        i = 1;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                for (; i < collection.length; i++) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2991,6 +3616,32 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return accumulator;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function findIndex(array, predicate, thisArg) {
+               var i, l;
+
+               for (i = 0, l = array.length; i < l; i++) {
+                       if (predicate.call(thisArg, array[i], i, array)) {
+                               return i;
+                       }
+               }
+
+               return -1;
+       }
+
+       function find(array, predicate, thisArg) {
+               var idx = findIndex(array, predicate, thisArg);
+
+               if (idx !== -1) {
+                       return array[idx];
+               }
+
+               return undefined;
+       }
+
+       function last(collection) {
+               return collection[collection.length - 1];
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         return {
</span><span class="cx" style="display: block; padding: 0 10px">                isArray: isArray,
</span><span class="cx" style="display: block; padding: 0 10px">                toArray: toArray,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2998,7 +3649,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                map: map,
</span><span class="cx" style="display: block; padding: 0 10px">                filter: filter,
</span><span class="cx" style="display: block; padding: 0 10px">                indexOf: indexOf,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                reduce: reduce
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         reduce: reduce,
+               findIndex: findIndex,
+               find: find,
+               last: last
</ins><span class="cx" style="display: block; padding: 0 10px">         };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3091,7 +3745,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * More details on this method can be found in the Wiki.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @method create
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param {String} s Class name, inheritage and prefix.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param {String} s Class name, inheritance and prefix.
</ins><span class="cx" style="display: block; padding: 0 10px">          * @param {Object} p Collection of methods to add to the class.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param {Object} root Optional root object defaults to the global window object.
</span><span class="cx" style="display: block; padding: 0 10px">         * @example
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3784,7 +4438,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method add
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Array/tinymce.dom.DomQuery} items Array of all nodes to add to set.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Boolean} sort
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Boolean} sort Optional sort flag that enables sorting of elements.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @return {tinymce.dom.DomQuery} New instance with nodes added.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                add: function(items, sort) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4796,7 +5450,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * Returns all child nodes matching the optional selector.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method contents
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Element/tinymce.dom.DomQuery} node
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Element/tinymce.dom.DomQuery} node Node to get the contents of.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                contents: function(node) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4845,7 +5499,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * of each item in current collection matching the optional selector.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method parentsUntil
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Element/tinymce.dom.DomQuery} node
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Element/tinymce.dom.DomQuery} node Node to find parent of.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching parents.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4857,7 +5511,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * Returns a new collection with all next siblings of each item in current collection matching the optional selector.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method nextUntil
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Element/tinymce.dom.DomQuery} node
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Element/tinymce.dom.DomQuery} node Node to find next siblings on.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4869,7 +5523,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * Returns a new collection with all previous siblings of each item in current collection matching the optional selector.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method prevUntil
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Element/tinymce.dom.DomQuery} node
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Element/tinymce.dom.DomQuery} node Node to find previous siblings on.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5316,7 +5970,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // IE 11 will produce a border-image: none when getting the style attribute from <p style="border: 1px solid red"></p>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // So lets asume it shouldn't be there
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 // So let us assume it shouldn't be there
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (styles['border-image'] === 'none') {
</span><span class="cx" style="display: block; padding: 0 10px">                                                delete styles['border-image'];
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6231,7 +6885,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                extend(self, {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Inital states
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Initial states
</ins><span class="cx" style="display: block; padding: 0 10px">                         startContainer: doc,
</span><span class="cx" style="display: block; padding: 0 10px">                        startOffset: 0,
</span><span class="cx" style="display: block; padding: 0 10px">                        endContainer: doc,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6566,8 +7220,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @private
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/dom/StyleSheetLoader", [
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/util/Tools"
-], function(Tools) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Tools",
+       "tinymce/util/Delay"
+], function(Tools, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        return function(document, settings) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6626,7 +7281,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!testCallback()) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Wait for timeout
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ((new Date().getTime()) - startTime < maxLoadTime) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                window.setTimeout(waitCallback, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         Delay.setTimeout(waitCallback);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                                failed();
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7260,7 +7915,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {String/Element} name Name of new element to add or existing element to add.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Object} attrs Optional object collection with arguments to add to the new element(s).
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {String} html Optional inner HTML contents to add for each element.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Boolean} create
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Boolean} create Optional flag if the element should be created or added.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @return {Element/Array} Element that got created, or an array of created elements if multiple input elements
</span><span class="cx" style="display: block; padding: 0 10px">                 * were passed in.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @example
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -8371,7 +9026,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Insert middle chunk
</span><span class="cx" style="display: block; padding: 0 10px">                                if (replacementElm) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        pa.replaceChild(replacementElm, splitElm);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 pa.insertBefore(replacementElm, parentElm);
+                                       //pa.replaceChild(replacementElm, splitElm);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        pa.insertBefore(splitElm, parentElm);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9119,6 +9775,312 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * });
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/dom/NodeType.js
+
+/**
+ * NodeType.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Contains various node validation functions.
+ *
+ * @private
+ * @class tinymce.dom.NodeType
+ */
+define("tinymce/dom/NodeType", [], function() {
+       function isNodeType(type) {
+               return function(node) {
+                       return !!node && node.nodeType == type;
+               };
+       }
+
+       var isElement = isNodeType(1);
+
+       function matchNodeNames(names) {
+               names = names.toLowerCase().split(' ');
+
+               return function(node) {
+                       var i, name;
+
+                       if (node && node.nodeType) {
+                               name = node.nodeName.toLowerCase();
+
+                               for (i = 0; i < names.length; i++) {
+                                       if (name === names[i]) {
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       return false;
+               };
+       }
+
+       function matchStyleValues(name, values) {
+               values = values.toLowerCase().split(' ');
+
+               return function(node) {
+                       var i, cssValue;
+
+                       if (isElement(node)) {
+                               for (i = 0; i < values.length; i++) {
+                                       cssValue = getComputedStyle(node, null).getPropertyValue(name);
+                                       if (cssValue === values[i]) {
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       return false;
+               };
+       }
+
+       function hasPropValue(propName, propValue) {
+               return function(node) {
+                       return isElement(node) && node[propName] === propValue;
+               };
+       }
+
+       function hasAttributeValue(attrName, attrValue) {
+               return function(node) {
+                       return isElement(node) && node.getAttribute(attrName) === attrValue;
+               };
+       }
+
+       function isBogus(node) {
+               return isElement(node) && node.hasAttribute('data-mce-bogus');
+       }
+
+       function hasContentEditableState(value) {
+               return function(node) {
+                       if (isElement(node)) {
+                               if (node.contentEditable === value) {
+                                       return true;
+                               }
+
+                               if (node.getAttribute('data-mce-contenteditable') === value) {
+                                       return true;
+                               }
+                       }
+
+                       return false;
+               };
+       }
+
+       return {
+               isText: isNodeType(3),
+               isElement: isElement,
+               isComment: isNodeType(8),
+               isBr: matchNodeNames('br'),
+               isContentEditableTrue: hasContentEditableState('true'),
+               isContentEditableFalse: hasContentEditableState('false'),
+               matchNodeNames: matchNodeNames,
+               hasPropValue: hasPropValue,
+               hasAttributeValue: hasAttributeValue,
+               matchStyleValues: matchStyleValues,
+               isBogus: isBogus
+       };
+});
+
+// Included from: js/tinymce/classes/text/Zwsp.js
+
+/**
+ * Zwsp.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * ....
+ *
+ * @private
+ * @class tinymce.text.Zwsp
+ * @example
+ * var isZwsp = Zwsp.isZwsp('\u200b');
+ * var abc = Zwsp.trim('a\u200bc');
+ */
+define("tinymce/text/Zwsp", [], function() {
+       var ZWSP = '\u200b';
+
+       function isZwsp(chr) {
+               return chr == ZWSP;
+       }
+
+       function trim(str) {
+               return str.replace(new RegExp(ZWSP, 'g'), '');
+       }
+
+       return {
+               isZwsp: isZwsp,
+               ZWSP: ZWSP,
+               trim: trim
+       };
+});
+
+// Included from: js/tinymce/classes/caret/CaretContainer.js
+
+/**
+ * CaretContainer.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module handles caret containers. A caret container is a node that
+ * holds the caret for positional purposes.
+ *
+ * @private
+ * @class tinymce.caret.CaretContainer
+ */
+define("tinymce/caret/CaretContainer", [
+       "tinymce/dom/NodeType",
+       "tinymce/text/Zwsp"
+], function(NodeType, Zwsp) {
+       var isElement = NodeType.isElement,
+               isText = NodeType.isText;
+
+       function isCaretContainerBlock(node) {
+               if (isText(node)) {
+                       node = node.parentNode;
+               }
+
+               return isElement(node) && node.hasAttribute('data-mce-caret');
+       }
+
+       function isCaretContainerInline(node) {
+               return isText(node) && Zwsp.isZwsp(node.data);
+       }
+
+       function isCaretContainer(node) {
+               return isCaretContainerBlock(node) || isCaretContainerInline(node);
+       }
+
+       function insertInline(node, before) {
+               var doc, sibling, textNode, parentNode;
+
+               doc = node.ownerDocument;
+               textNode = doc.createTextNode(Zwsp.ZWSP);
+               parentNode = node.parentNode;
+
+               if (!before) {
+                       sibling = node.nextSibling;
+                       if (isText(sibling)) {
+                               if (isCaretContainer(sibling)) {
+                                       return sibling;
+                               }
+
+                               if (startsWithCaretContainer(sibling)) {
+                                       sibling.splitText(1);
+                                       return sibling;
+                               }
+                       }
+
+                       if (node.nextSibling) {
+                               parentNode.insertBefore(textNode, node.nextSibling);
+                       } else {
+                               parentNode.appendChild(textNode);
+                       }
+               } else {
+                       sibling = node.previousSibling;
+                       if (isText(sibling)) {
+                               if (isCaretContainer(sibling)) {
+                                       return sibling;
+                               }
+
+                               if (endsWithCaretContainer(sibling)) {
+                                       return sibling.splitText(sibling.data.length - 1);
+                               }
+                       }
+
+                       parentNode.insertBefore(textNode, node);
+               }
+
+               return textNode;
+       }
+
+       function insertBlock(blockName, node, before) {
+               var doc, blockNode, parentNode;
+
+               doc = node.ownerDocument;
+               blockNode = doc.createElement(blockName);
+               blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
+               blockNode.setAttribute('data-mce-bogus', 'all');
+               blockNode.appendChild(doc.createTextNode('\u00a0'));
+               parentNode = node.parentNode;
+
+               if (!before) {
+                       if (node.nextSibling) {
+                               parentNode.insertBefore(blockNode, node.nextSibling);
+                       } else {
+                               parentNode.appendChild(blockNode);
+                       }
+               } else {
+                       parentNode.insertBefore(blockNode, node);
+               }
+
+               return blockNode;
+       }
+
+       function remove(caretContainerNode) {
+               var text;
+
+               if (isElement(caretContainerNode) && isCaretContainer(caretContainerNode)) {
+                       if (caretContainerNode.innerHTML != '&nbsp;') {
+                               caretContainerNode.removeAttribute('data-mce-caret');
+                       } else {
+                               if (caretContainerNode.parentNode) {
+                                       caretContainerNode.parentNode.removeChild(caretContainerNode);
+                               }
+                       }
+               }
+
+               if (isText(caretContainerNode)) {
+                       text = Zwsp.trim(caretContainerNode.data);
+
+                       if (text.length === 0) {
+                               if (caretContainerNode.parentNode) {
+                                       caretContainerNode.parentNode.removeChild(caretContainerNode);
+                               }
+                       }
+
+                       caretContainerNode.nodeValue = text;
+               }
+       }
+
+       function startsWithCaretContainer(node) {
+               return isText(node) && node.data[0] == Zwsp.ZWSP;
+       }
+
+       function endsWithCaretContainer(node) {
+               return isText(node) && node.data[node.data.length - 1] == Zwsp.ZWSP;
+       }
+
+       return {
+               isCaretContainer: isCaretContainer,
+               isCaretContainerBlock: isCaretContainerBlock,
+               isCaretContainerInline: isCaretContainerInline,
+               insertInline: insertInline,
+               insertBlock: insertBlock,
+               remove: remove,
+               startsWithCaretContainer: startsWithCaretContainer,
+               endsWithCaretContainer: endsWithCaretContainer
+       };
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/dom/RangeUtils.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9138,9 +10100,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/dom/RangeUtils", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Tools",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/dom/TreeWalker"
-], function(Tools, TreeWalker) {
-       var each = Tools.each;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/dom/TreeWalker",
+       "tinymce/dom/NodeType",
+       "tinymce/caret/CaretContainer"
+], function(Tools, TreeWalker, NodeType, CaretContainer) {
+       var each = Tools.each,
+               isContentEditableFalse = NodeType.isContentEditableFalse,
+               isCaretContainer = CaretContainer.isCaretContainer;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        function getEndChild(container, index) {
</span><span class="cx" style="display: block; padding: 0 10px">                var childNodes = container.childNodes;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9407,6 +10373,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                function hasContentEditableFalseParent(node) {
+                                       while (node && node != body) {
+                                               if (isContentEditableFalse(node)) {
+                                                       return true;
+                                               }
+
+                                               node = node.parentNode;
+                                       }
+
+                                       return false;
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 function isPrevNode(node, name) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        return node.previousSibling && node.previousSibling.nodeName == name;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9432,7 +10410,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        walker = new TreeWalker(startNode, parentBlockContainer);
</span><span class="cx" style="display: block; padding: 0 10px">                                        while ((node = walker[left ? 'prev' : 'next']())) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                // Break if we hit a non content editable node
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                if (dom.getContentEditableParent(node) === "false") {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (dom.getContentEditableParent(node) === "false" || isCaretContainer(node)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         return;
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9466,6 +10444,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                nonEmptyElementsMap = dom.schema.getNonEmptyElements();
</span><span class="cx" style="display: block; padding: 0 10px">                                directionLeft = start;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                if (isCaretContainer(container)) {
+                                       return;
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (container.nodeType == 1 && offset > container.childNodes.length - 1) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        directionLeft = false;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9482,6 +10464,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (directionLeft) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                node = container.childNodes[offset > 0 ? offset - 1 : 0];
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (node) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                        if (isCaretContainer(node)) {
+                                                               return;
+                                                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                return;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9494,6 +10480,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                container = container.childNodes[offset];
</span><span class="cx" style="display: block; padding: 0 10px">                                                offset = 0;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                if (hasContentEditableFalseParent(container) || isCaretContainer(container)) {
+                                                       return;
+                                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 // Don't walk into elements that doesn't have any child nodes like a IMG
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (container.hasChildNodes() && !/TABLE/.test(container.nodeName)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // Walk the DOM to find a text node to place the caret at or a BR
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9501,6 +10491,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        walker = new TreeWalker(container, body);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        do {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                if (isContentEditableFalse(node) || isCaretContainer(node)) {
+                                                                       normalized = false;
+                                                                       break;
+                                                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 // Found a text node use that position
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (node.nodeType === 3 && node.nodeValue.length > 0) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        offset = directionLeft ? 0 : node.nodeValue.length;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9619,40 +10614,89 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         * Finds the closest selection rect tries to get the range from that.
+        */
+       function findClosestIeRange(clientX, clientY, doc) {
+               var element, rng, rects;
+
+               element = doc.elementFromPoint(clientX, clientY);
+               rng = doc.body.createTextRange();
+
+               if (element.tagName == 'HTML') {
+                       element = doc.body;
+               }
+
+               rng.moveToElementText(element);
+               rects = Tools.toArray(rng.getClientRects());
+
+               rects = rects.sort(function(a, b) {
+                       a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));
+                       b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));
+
+                       return a - b;
+               });
+
+               if (rects.length > 0) {
+                       clientY = (rects[0].bottom + rects[0].top) / 2;
+
+                       try {
+                               rng.moveToPoint(clientX, clientY);
+                               rng.collapse(true);
+
+                               return rng;
+                       } catch (ex) {
+                               // At least we tried
+                       }
+               }
+
+               return null;
+       }
+
+       /**
</ins><span class="cx" style="display: block; padding: 0 10px">          * Gets the caret range for the given x/y location.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @static
</span><span class="cx" style="display: block; padding: 0 10px">         * @method getCaretRangeFromPoint
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param {Number} x X coordinate for range
-        * @param {Number} y Y coordinate for range
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param {Number} clientX X coordinate for range
+        * @param {Number} clientY Y coordinate for range
</ins><span class="cx" style="display: block; padding: 0 10px">          * @param {Document} doc Document that x/y are relative to
</span><span class="cx" style="display: block; padding: 0 10px">         * @returns {Range} caret range
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        RangeUtils.getCaretRangeFromPoint = function(x, y, doc) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ RangeUtils.getCaretRangeFromPoint = function(clientX, clientY, doc) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var rng, point;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if (doc.caretPositionFromPoint) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        point = doc.caretPositionFromPoint(x, y);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 point = doc.caretPositionFromPoint(clientX, clientY);
</ins><span class="cx" style="display: block; padding: 0 10px">                         rng = doc.createRange();
</span><span class="cx" style="display: block; padding: 0 10px">                        rng.setStart(point.offsetNode, point.offset);
</span><span class="cx" style="display: block; padding: 0 10px">                        rng.collapse(true);
</span><span class="cx" style="display: block; padding: 0 10px">                } else if (doc.caretRangeFromPoint) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        rng = doc.caretRangeFromPoint(x, y);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = doc.caretRangeFromPoint(clientX, clientY);
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else if (doc.body.createTextRange) {
</span><span class="cx" style="display: block; padding: 0 10px">                        rng = doc.body.createTextRange();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        try {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                rng.moveToPoint(x, y);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         rng.moveToPoint(clientX, clientY);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 rng.collapse(true);
</span><span class="cx" style="display: block; padding: 0 10px">                        } catch (ex) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                // Append to top or bottom depending on drop location
-                               rng.collapse(y < doc.body.clientHeight);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         rng = findClosestIeRange(clientX, clientY, doc);
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return rng;
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        RangeUtils.getSelectedNode = function(range) {
+               var startContainer = range.startContainer,
+                       startOffset = range.startOffset;
+
+               if (startContainer.hasChildNodes() && range.endOffset == startOffset + 1) {
+                       return startContainer.childNodes[startOffset];
+               }
+
+               return null;
+       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">         RangeUtils.getNode = function(container, offset) {
</span><span class="cx" style="display: block; padding: 0 10px">                if (container.nodeType == 1 && container.hasChildNodes()) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if (offset >= container.childNodes.length) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9688,8 +10732,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/NodeChange", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/RangeUtils",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/Env"
-], function(RangeUtils, Env) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/Env",
+       "tinymce/util/Delay"
+], function(RangeUtils, Env, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         return function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                var lastRng, lastPath = [];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9773,9 +10818,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                // Delay nodeChanged call for WebKit edge case issue where the range
</span><span class="cx" style="display: block; padding: 0 10px">                                // isn't updated until after you click outside a selected image
</span><span class="cx" style="display: block; padding: 0 10px">                                if (editor.selection.getNode().nodeName == 'IMG') {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 editor.nodeChanged();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 });
</ins><span class="cx" style="display: block; padding: 0 10px">                                 } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.nodeChanged();
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9793,7 +10838,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        var selection = editor.selection, node, parents, root;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Fix for bug #1896577 it seems that this can not be fired while the editor is loading
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.settings.readonly) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // Get start node
</span><span class="cx" style="display: block; padding: 0 10px">                                root = editor.getBody();
</span><span class="cx" style="display: block; padding: 0 10px">                                node = selection.getStart() || root;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10726,7 +11771,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                'blockquote center dir fieldset header footer article section hgroup aside nav figure');
</span><span class="cx" style="display: block; padding: 0 10px">                blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                'th tr td li ol ul caption dl dt dd noscript menu isindex option ' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                'datalist select optgroup', textBlockElementsMap);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         'datalist select optgroup figcaption', textBlockElementsMap);
</ins><span class="cx" style="display: block; padding: 0 10px">                 textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                'dfn code mark q sup sub samp');
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13016,15 +14061,21 @@
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/dom/Serializer", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/DOMUtils",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/DomParser",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/html/SaxParser",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/html/Entities",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/Serializer",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/Node",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/Schema",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/util/Tools"
-], function(DOMUtils, DomParser, Entities, Serializer, Node, Schema, Env, Tools) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Tools",
+       "tinymce/text/Zwsp"
+], function(DOMUtils, DomParser, SaxParser, Entities, Serializer, Node, Schema, Env, Tools, Zwsp) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var each = Tools.each, trim = Tools.trim;
</span><span class="cx" style="display: block; padding: 0 10px">        var DOM = DOMUtils.DOM;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        var trimContentRegExp = new RegExp([
+               '<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers
+               '\\s?data-mce-selected="[^"]+"' // Trim temporaty data-mce prefixed attributes like data-mce-selected
+       ].join('|'), 'gi');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * IE 11 has a fantastic bug where it will produce two trailing BR elements to iframe bodies when
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13069,6 +14120,42 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        schema = editor.schema;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                /**
+                * Returns a trimmed version of the editor contents to be used for the undo level. This
+                * will remove any data-mce-bogus="all" marked elements since these are used for UI it will also
+                * remove the data-mce-selected attributes used for selection of objects and caret containers.
+                * It will keep all data-mce-bogus="1" elements since these can be used to place the caret etc and will
+                * be removed by the serialization logic when you save.
+                *
+                * @private
+                * @return {String} HTML contents of the editor excluding some internal bogus elements.
+                */
+               function getTrimmedContent() {
+                       var content = editor.getBody().innerHTML;
+                       var bogusAllRegExp = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g;
+                       var endTagIndex, index, matchLength, matches, shortEndedElements, schema = editor.schema;
+
+                       content = Zwsp.trim(content.replace(trimContentRegExp, ''));
+                       shortEndedElements = schema.getShortEndedElements();
+
+                       // Remove all bogus elements marked with "all"
+                       while ((matches = bogusAllRegExp.exec(content))) {
+                               index = bogusAllRegExp.lastIndex;
+                               matchLength = matches[0].length;
+
+                               if (shortEndedElements[matches[1]]) {
+                                       endTagIndex = index;
+                               } else {
+                                       endTagIndex = SaxParser.findEndTag(schema, content, index);
+                               }
+
+                               content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
+                               bogusAllRegExp.lastIndex = index - matchLength;
+                       }
+
+                       return trim(content);
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Default DOM and Schema if they are undefined
</span><span class="cx" style="display: block; padding: 0 10px">                dom = dom || DOM;
</span><span class="cx" style="display: block; padding: 0 10px">                schema = schema || new Schema(settings);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13370,6 +14457,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Replace all BOM characters for now until we can find a better solution
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!args.cleanup) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        args.content = Zwsp.trim(args.content);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         args.content = args.content.replace(/\uFEFF/g, '');
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13422,7 +14510,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if (editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.fire('PostProcess', args);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 },
+
+                       getTrimmedContent: getTrimmedContent
</ins><span class="cx" style="display: block; padding: 0 10px">                 };
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13658,8 +14748,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        } catch (ex) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // IE has a nasty bug where text nodes might throw "invalid argument" when you
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                // access the nodeValue or other properties of text nodes. This seems to happend when
-                               // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         // access the nodeValue or other properties of text nodes. This seems to happen when
+                               // text nodes are split into two nodes by a delete/backspace call.
+                               // So let us detect and try to fix it.
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (ex.number == -2147024809) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Get the current selection
</span><span class="cx" style="display: block; padding: 0 10px">                                        bookmark = self.getBookmark(2);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13999,8 +15090,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/dom/ControlSelection", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/VK",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Tools",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/Env"
-], function(VK, Tools, Env) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Delay",
+       "tinymce/Env",
+       "tinymce/dom/NodeType"
+], function(VK, Tools, Delay, Env, NodeType) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse;
+
</ins><span class="cx" style="display: block; padding: 0 10px">         return function(selection, editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                var dom = editor.dom, each = Tools.each;
</span><span class="cx" style="display: block; padding: 0 10px">                var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle, lastMouseDownEvent;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14035,7 +15130,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        rootClass + ' .mce-resizehandle:hover {' +
</span><span class="cx" style="display: block; padding: 0 10px">                                'background: #000' +
</span><span class="cx" style="display: block; padding: 0 10px">                        '}' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        rootClass + ' img[data-mce-selected], hr[data-mce-selected] {' +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rootClass + ' *[data-mce-selected] {' +
</ins><span class="cx" style="display: block; padding: 0 10px">                                 'outline: 1px solid black;' +
</span><span class="cx" style="display: block; padding: 0 10px">                                'resize: none' + // Have been talks about implementing this in browsers
</span><span class="cx" style="display: block; padding: 0 10px">                        '}' +
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14209,6 +15304,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                function showResizeRect(targetElm, mouseDownHandleName, mouseDownEvent) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var position, targetWidth, targetHeight, e, rect;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        hideResizeRect();
</ins><span class="cx" style="display: block; padding: 0 10px">                         unbindResizeHandleEvents();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Get position and size of target
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14429,9 +15525,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        showResizeRect(target, name, lastMouseDownEvent);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function preventDefault(e) {
+                       if (e.preventDefault) {
+                               e.preventDefault();
+                       } else {
+                               e.returnValue = false; // IE
+                       }
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 function nativeControlSelect(e) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var target = e.srcElement;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (isContentEditableFalse(target)) {
+                               preventDefault(e);
+                               return;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (target != selectedElm) {
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.fire('ObjectSelected', {target: target});
</span><span class="cx" style="display: block; padding: 0 10px">                                detachResizeStartListener();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14527,35 +15636,39 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.dom.bind(rootElement, 'mscontrolselect', function(e) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                function delayedSelect(node) {
+                                                       Delay.setEditorTimeout(editor, function() {
+                                                               editor.selection.select(node);
+                                                       });
+                                               }
+
+                                               if (isContentEditableFalse(e.target)) {
+                                                       e.preventDefault();
+                                                       delayedSelect(e.target);
+                                                       return;
+                                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        e.preventDefault();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // This moves the selection from being a control selection to a text like selection like in WebKit #6753
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // TODO: Fix this the day IE works like other browsers without this nasty native ugly control selections.
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if (e.target.tagName == 'IMG') {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                window.setTimeout(function() {
-                                                                       editor.selection.select(e.target);
-                                                               }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         delayedSelect(e.target);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         }
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                        });
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        editor.on('nodechange ResizeEditor ResizeWindow drop', function(e) {
-                               if (window.requestAnimationFrame) {
-                                       window.requestAnimationFrame(function() {
-                                               updateResizeRect(e);
-                                       });
-                               } else {
-                                       updateResizeRect(e);
-                               }
-                       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var throttledUpdateResizeRect = Delay.throttle(updateResizeRect);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        editor.on('nodechange ResizeEditor ResizeWindow drop', throttledUpdateResizeRect);
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Update resize rect while typing in a table
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.on('keydown keyup', function(e) {
</span><span class="cx" style="display: block; padding: 0 10px">                                if (selectedElm && selectedElm.nodeName == "TABLE") {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        updateResizeRect(e);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 throttledUpdateResizeRect(e);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14587,6 +15700,1010 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/util/Fun.js
+
+/**
+ * Fun.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Functional utility class.
+ *
+ * @private
+ * @class tinymce.util.Fun
+ */
+define("tinymce/util/Fun", [], function() {
+       var slice = [].slice;
+
+       function constant(value) {
+               return function() {
+                       return value;
+               };
+       }
+
+       function negate(predicate) {
+               return function(x) {
+                       return !predicate(x);
+               };
+       }
+
+       function compose(f, g) {
+               return function(x) {
+                       return f(g(x));
+               };
+       }
+
+       function or() {
+               var args = slice.call(arguments);
+
+               return function(x) {
+                       for (var i = 0; i < args.length; i++) {
+                               if (args[i](x)) {
+                                       return true;
+                               }
+                       }
+
+                       return false;
+               };
+       }
+
+       function and() {
+               var args = slice.call(arguments);
+
+               return function(x) {
+                       for (var i = 0; i < args.length; i++) {
+                               if (!args[i](x)) {
+                                       return false;
+                               }
+                       }
+
+                       return true;
+               };
+       }
+
+       function curry(fn) {
+               var args = slice.call(arguments);
+
+               if (args.length - 1 >= fn.length) {
+                       return fn.apply(this, args.slice(1));
+               }
+
+               return function() {
+                       var tempArgs = args.concat([].slice.call(arguments));
+                       return curry.apply(this, tempArgs);
+               };
+       }
+
+       return {
+               constant: constant,
+               negate: negate,
+               and: and,
+               or: or,
+               curry: curry,
+               compose: compose
+       };
+});
+
+// Included from: js/tinymce/classes/caret/CaretCandidate.js
+
+/**
+ * CaretCandidate.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic for handling caret candidates. A caret candidate is
+ * for example text nodes, images, input elements, cE=false elements etc.
+ *
+ * @private
+ * @class tinymce.caret.CaretCandidate
+ */
+define("tinymce/caret/CaretCandidate", [
+       "tinymce/dom/NodeType",
+       "tinymce/util/Arr",
+       "tinymce/caret/CaretContainer"
+], function(NodeType, Arr, CaretContainer) {
+       var isContentEditableTrue = NodeType.isContentEditableTrue,
+               isContentEditableFalse = NodeType.isContentEditableFalse,
+               isBr = NodeType.isBr,
+               isText = NodeType.isText,
+               isInvalidTextElement = NodeType.matchNodeNames('script style textarea'),
+               isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object'),
+               isTable = NodeType.matchNodeNames('table'),
+               isCaretContainer = CaretContainer.isCaretContainer;
+
+       function isCaretCandidate(node) {
+               if (isCaretContainer(node)) {
+                       return false;
+               }
+
+               if (isText(node)) {
+                       if (isInvalidTextElement(node.parentNode)) {
+                               return false;
+                       }
+
+                       return true;
+               }
+
+               return isAtomicInline(node) || isBr(node) || isTable(node) || isContentEditableFalse(node);
+       }
+
+       function isInEditable(node, rootNode) {
+               for (node = node.parentNode; node && node != rootNode; node = node.parentNode) {
+                       if (isContentEditableFalse(node)) {
+                               return false;
+                       }
+
+                       if (isContentEditableTrue(node)) {
+                               return true;
+                       }
+               }
+
+               return true;
+       }
+
+       function isAtomicContentEditableFalse(node) {
+               if (!isContentEditableFalse(node)) {
+                       return false;
+               }
+
+               return Arr.reduce(node.getElementsByTagName('*'), function(result, elm) {
+                       return result || isContentEditableTrue(elm);
+               }, false) !== true;
+       }
+
+       function isAtomic(node) {
+               return isAtomicInline(node) || isAtomicContentEditableFalse(node);
+       }
+
+       function isEditableCaretCandidate(node, rootNode) {
+               return isCaretCandidate(node) && isInEditable(node, rootNode);
+       }
+
+       return {
+               isCaretCandidate: isCaretCandidate,
+               isInEditable: isInEditable,
+               isAtomic: isAtomic,
+               isEditableCaretCandidate: isEditableCaretCandidate
+       };
+});
+
+// Included from: js/tinymce/classes/geom/ClientRect.js
+
+/**
+ * ClientRect.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Utility functions for working with client rects.
+ *
+ * @private
+ * @class tinymce.geom.ClientRect
+ */
+define("tinymce/geom/ClientRect", [], function() {
+       var round = Math.round;
+
+       function clone(rect) {
+               if (!rect) {
+                       return {left: 0, top: 0, bottom: 0, right: 0, width: 0, height: 0};
+               }
+
+               return {
+                       left: round(rect.left),
+                       top: round(rect.top),
+                       bottom: round(rect.bottom),
+                       right: round(rect.right),
+                       width: round(rect.width),
+                       height: round(rect.height)
+               };
+       }
+
+       function collapse(clientRect, toStart) {
+               clientRect = clone(clientRect);
+
+               if (toStart) {
+                       clientRect.right = clientRect.left;
+               } else {
+                       clientRect.left = clientRect.left + clientRect.width;
+                       clientRect.right = clientRect.left;
+               }
+
+               clientRect.width = 0;
+
+               return clientRect;
+       }
+
+       function isEqual(rect1, rect2) {
+               return (
+                       rect1.left === rect2.left &&
+                       rect1.top === rect2.top &&
+                       rect1.bottom === rect2.bottom &&
+                       rect1.right === rect2.right
+               );
+       }
+
+       function isValidOverflow(overflowY, clientRect1, clientRect2) {
+               return overflowY >= 0 && overflowY <= Math.min(clientRect1.height, clientRect2.height) / 2;
+
+       }
+
+       function isAbove(clientRect1, clientRect2) {
+               if (clientRect1.bottom < clientRect2.top) {
+                       return true;
+               }
+
+               if (clientRect1.top > clientRect2.bottom) {
+                       return false;
+               }
+
+               return isValidOverflow(clientRect2.top - clientRect1.bottom, clientRect1, clientRect2);
+       }
+
+       function isBelow(clientRect1, clientRect2) {
+               if (clientRect1.top > clientRect2.bottom) {
+                       return true;
+               }
+
+               if (clientRect1.bottom < clientRect2.top) {
+                       return false;
+               }
+
+               return isValidOverflow(clientRect2.bottom - clientRect1.top, clientRect1, clientRect2);
+       }
+
+       function isLeft(clientRect1, clientRect2) {
+               return clientRect1.left < clientRect2.left;
+       }
+
+       function isRight(clientRect1, clientRect2) {
+               return clientRect1.right > clientRect2.right;
+       }
+
+       function compare(clientRect1, clientRect2) {
+               if (isAbove(clientRect1, clientRect2)) {
+                       return -1;
+               }
+
+               if (isBelow(clientRect1, clientRect2)) {
+                       return 1;
+               }
+
+               if (isLeft(clientRect1, clientRect2)) {
+                       return -1;
+               }
+
+               if (isRight(clientRect1, clientRect2)) {
+                       return 1;
+               }
+
+               return 0;
+       }
+
+       return {
+               clone: clone,
+               collapse: collapse,
+               isEqual: isEqual,
+               isAbove: isAbove,
+               isBelow: isBelow,
+               isLeft: isLeft,
+               isRight: isRight,
+               compare: compare
+       };
+});
+
+// Included from: js/tinymce/classes/text/ExtendingChar.js
+
+/**
+ * ExtendingChar.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This class contains logic for detecting extending characters.
+ *
+ * @private
+ * @class tinymce.text.ExtendingChar
+ * @example
+ * var isExtending = ExtendingChar.isExtendingChar('a');
+ */
+define("tinymce/text/ExtendingChar", [], function() {
+       // Generated from: http://www.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
+       // Only includes the characters in that fit into UCS-2 16 bit
+       var extendingChars = new RegExp(
+               "[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A" +
+               "\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0" +
+               "\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E3-\u0902\u093A\u093C" +
+               "\u0941-\u0948\u094D\u0951-\u0957\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\u0C00\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56" +
+               "\u0C62-\u0C63\u0C81\u0CBC\u0CBF\u0CC2\u0CC6\u0CCC-\u0CCD\u0CD5-\u0CD6\u0CE2-\u0CE3\u0D01\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\u0F8D-\u0F97" +
+               "\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074" +
+               "\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5" +
+               "\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18" +
+               "\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABE\u1B00-\u1B03\u1B34" +
+               "\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8-\u1BE9" +
+               "\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8-\u1CF9" +
+               "\u1DC0-\u1DF5\u1DFC-\u1DFF\u200C-\u200D\u20D0-\u20DC\u20DD-\u20E0\u20E1\u20E2-\u20E4\u20E5-\u20F0\u2CEF-\u2CF1" +
+               "\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u302E-\u302F\u3099-\u309A\uA66F\uA670-\uA672\uA674-\uA67D\uA69E-\uA69F\uA6F0-\uA6F1" +
+               "\uA802\uA806\uA80B\uA825-\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC" +
+               "\uA9E5\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1" +
+               "\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFF9E-\uFF9F]"
+       );
+
+       function isExtendingChar(ch) {
+               return typeof ch == "string" && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);
+       }
+
+       return {
+               isExtendingChar: isExtendingChar
+       };
+});
+
+// Included from: js/tinymce/classes/caret/CaretPosition.js
+
+/**
+ * CaretPosition.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic for creating caret positions within a document a caretposition
+ * is similar to a DOMRange object but it doesn't have two endpoints and is also more lightweight
+ * since it's now updated live when the DOM changes.
+ *
+ * @private
+ * @class tinymce.caret.CaretPosition
+ * @example
+ * var caretPos1 = new CaretPosition(container, offset);
+ * var caretPos2 = CaretPosition.fromRangeStart(someRange);
+ */
+define("tinymce/caret/CaretPosition", [
+       "tinymce/util/Fun",
+       "tinymce/dom/NodeType",
+       "tinymce/dom/DOMUtils",
+       "tinymce/dom/RangeUtils",
+       "tinymce/caret/CaretCandidate",
+       "tinymce/geom/ClientRect",
+       "tinymce/text/ExtendingChar"
+], function(Fun, NodeType, DOMUtils, RangeUtils, CaretCandidate, ClientRect, ExtendingChar) {
+       var isElement = NodeType.isElement,
+               isCaretCandidate = CaretCandidate.isCaretCandidate,
+               isBlock = NodeType.matchStyleValues('display', 'block table'),
+               isFloated = NodeType.matchStyleValues('float', 'left right'),
+               isValidElementCaretCandidate = Fun.and(isElement, isCaretCandidate, Fun.negate(isFloated)),
+               isNotPre = Fun.negate(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap')),
+               isText = NodeType.isText,
+               isBr = NodeType.isBr,
+               nodeIndex = DOMUtils.nodeIndex,
+               resolveIndex = RangeUtils.getNode;
+
+       function isWhiteSpace(chr) {
+               return chr && /[\r\n\t ]/.test(chr);
+       }
+
+       function isHiddenWhiteSpaceRange(range) {
+               var container = range.startContainer,
+                       offset = range.startOffset,
+                       text;
+
+               if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode)) {
+                       text = container.data;
+
+                       if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {
+                               return true;
+                       }
+               }
+
+               return false;
+       }
+
+       function getCaretPositionClientRects(caretPosition) {
+               var clientRects = [], beforeNode, node;
+
+               // Hack for older WebKit versions that doesn't
+               // support getBoundingClientRect on BR elements
+               function getBrClientRect(brNode) {
+                       var doc = brNode.ownerDocument,
+                               rng = doc.createRange(),
+                               nbsp = doc.createTextNode('\u00a0'),
+                               parentNode = brNode.parentNode,
+                               clientRect;
+
+                       parentNode.insertBefore(nbsp, brNode);
+                       rng.setStart(nbsp, 0);
+                       rng.setEnd(nbsp, 1);
+                       clientRect = ClientRect.clone(rng.getBoundingClientRect());
+                       parentNode.removeChild(nbsp);
+
+                       return clientRect;
+               }
+
+               function getBoundingClientRect(item) {
+                       var clientRect, clientRects;
+
+                       clientRects = item.getClientRects();
+                       if (clientRects.length > 0) {
+                               clientRect = ClientRect.clone(clientRects[0]);
+                       } else {
+                               clientRect = ClientRect.clone(item.getBoundingClientRect());
+                       }
+
+                       if (isBr(item) && clientRect.left === 0) {
+                               return getBrClientRect(item);
+                       }
+
+                       return clientRect;
+               }
+
+               function collapseAndInflateWidth(clientRect, toStart) {
+                       clientRect = ClientRect.collapse(clientRect, toStart);
+                       clientRect.width = 1;
+                       clientRect.right = clientRect.left + 1;
+
+                       return clientRect;
+               }
+
+               function addUniqueAndValidRect(clientRect) {
+                       if (clientRect.height === 0) {
+                               return;
+                       }
+
+                       if (clientRects.length > 0) {
+                               if (ClientRect.isEqual(clientRect, clientRects[clientRects.length - 1])) {
+                                       return;
+                               }
+                       }
+
+                       clientRects.push(clientRect);
+               }
+
+               function addCharacterOffset(container, offset) {
+                       var range = container.ownerDocument.createRange();
+
+                       if (offset < container.data.length) {
+                               if (ExtendingChar.isExtendingChar(container.data[offset])) {
+                                       return clientRects;
+                               }
+                       }
+
+                       if (offset > 0) {
+                               range.setStart(container, offset - 1);
+                               range.setEnd(container, offset);
+
+                               if (!isHiddenWhiteSpaceRange(range)) {
+                                       addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));
+                               }
+                       }
+
+                       if (offset < container.data.length) {
+                               range.setStart(container, offset);
+                               range.setEnd(container, offset + 1);
+
+                               if (!isHiddenWhiteSpaceRange(range)) {
+                                       addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));
+                               }
+                       }
+               }
+
+               if (isText(caretPosition.container())) {
+                       addCharacterOffset(caretPosition.container(), caretPosition.offset());
+                       return clientRects;
+               }
+
+               if (isElement(caretPosition.container())) {
+                       if (caretPosition.isAtEnd()) {
+                               node = resolveIndex(caretPosition.container(), caretPosition.offset());
+                               if (isText(node)) {
+                                       addCharacterOffset(node, node.data.length);
+                               }
+
+                               if (isValidElementCaretCandidate(node) && !isBr(node)) {
+                                       addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));
+                               }
+                       } else {
+                               node = resolveIndex(caretPosition.container(), caretPosition.offset());
+                               if (isText(node)) {
+                                       addCharacterOffset(node, 0);
+                               }
+
+                               if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {
+                                       addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));
+                                       return clientRects;
+                               }
+
+                               beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);
+                               if (isValidElementCaretCandidate(beforeNode) && !isBr(beforeNode)) {
+                                       if (isBlock(beforeNode) || isBlock(node) || !isValidElementCaretCandidate(node)) {
+                                               addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));
+                                       }
+                               }
+
+                               if (isValidElementCaretCandidate(node)) {
+                                       addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));
+                               }
+                       }
+               }
+
+               return clientRects;
+       }
+
+       /**
+        * Represents a location within the document by a container and an offset.
+        *
+        * @constructor
+        * @param {Node} container Container node.
+        * @param {Number} offset Offset within that container node.
+        * @param {Array} clientRects Optional client rects array for the position.
+        */
+       function CaretPosition(container, offset, clientRects) {
+               function isAtStart() {
+                       if (isText(container)) {
+                               return offset === 0;
+                       }
+
+                       return offset === 0;
+               }
+
+               function isAtEnd() {
+                       if (isText(container)) {
+                               return offset >= container.data.length;
+                       }
+
+                       return offset >= container.childNodes.length;
+               }
+
+               function toRange() {
+                       var range;
+
+                       range = container.ownerDocument.createRange();
+                       range.setStart(container, offset);
+                       range.setEnd(container, offset);
+
+                       return range;
+               }
+
+               function getClientRects() {
+                       if (!clientRects) {
+                               clientRects = getCaretPositionClientRects(new CaretPosition(container, offset));
+                       }
+
+                       return clientRects;
+               }
+
+               function isVisible() {
+                       return getClientRects().length > 0;
+               }
+
+               function isEqual(caretPosition) {
+                       return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();
+               }
+
+               function getNode(before) {
+                       return resolveIndex(container, before ? offset - 1 : offset);
+               }
+
+               return {
+                       /**
+                        * Returns the container node.
+                        *
+                        * @method container
+                        * @return {Node} Container node.
+                        */
+                       container: Fun.constant(container),
+
+                       /**
+                        * Returns the offset within the container node.
+                        *
+                        * @method offset
+                        * @return {Number} Offset within the container node.
+                        */
+                       offset: Fun.constant(offset),
+
+                       /**
+                        * Returns a range out of a the caret position.
+                        *
+                        * @method toRange
+                        * @return {DOMRange} range for the caret position.
+                        */
+                       toRange: toRange,
+
+                       /**
+                        * Returns the client rects for the caret position. Might be multiple rects between
+                        * block elements.
+                        *
+                        * @method getClientRects
+                        * @return {Array} Array of client rects.
+                        */
+                       getClientRects: getClientRects,
+
+                       /**
+                        * Returns true if the caret location is visible/displayed on screen.
+                        *
+                        * @method isVisible
+                        * @return {Boolean} true/false if the position is visible or not.
+                        */
+                       isVisible: isVisible,
+
+                       /**
+                        * Returns true if the caret location is at the beginning of text node or container.
+                        *
+                        * @method isVisible
+                        * @return {Boolean} true/false if the position is at the beginning.
+                        */
+                       isAtStart: isAtStart,
+
+                       /**
+                        * Returns true if the caret location is at the end of text node or container.
+                        *
+                        * @method isVisible
+                        * @return {Boolean} true/false if the position is at the end.
+                        */
+                       isAtEnd: isAtEnd,
+
+                       /**
+                        * Compares the caret position to another caret position. This will only compare the
+                        * container and offset not it's visual position.
+                        *
+                        * @method isEqual
+                        * @param {tinymce.caret.CaretPosition} caretPosition Caret position to compare with.
+                        * @return {Boolean} true if the caret positions are equal.
+                        */
+                       isEqual: isEqual,
+
+                       /**
+                        * Returns the closest resolved node from a node index. That means if you have an offset after the
+                        * last node in a container it will return that last node.
+                        *
+                        * @method getNode
+                        * @return {Node} Node that is closest to the index.
+                        */
+                       getNode: getNode
+               };
+       }
+
+       /**
+        * Creates a caret position from the start of a range.
+        *
+        * @method fromRangeStart
+        * @param {DOMRange} range DOM Range to create caret position from.
+        * @return {tinymce.caret.CaretPosition} Caret position from the start of DOM range.
+        */
+       CaretPosition.fromRangeStart = function(range) {
+               return new CaretPosition(range.startContainer, range.startOffset);
+       };
+
+       /**
+        * Creates a caret position from the end of a range.
+        *
+        * @method fromRangeEnd
+        * @param {DOMRange} range DOM Range to create caret position from.
+        * @return {tinymce.caret.CaretPosition} Caret position from the end of DOM range.
+        */
+       CaretPosition.fromRangeEnd = function(range) {
+               return new CaretPosition(range.endContainer, range.endOffset);
+       };
+
+       /**
+        * Creates a caret position from a node and places the offset after it.
+        *
+        * @method after
+        * @param {Node} node Node to get caret position from.
+        * @return {tinymce.caret.CaretPosition} Caret position from the node.
+        */
+       CaretPosition.after = function(node) {
+               return new CaretPosition(node.parentNode, nodeIndex(node) + 1);
+       };
+
+       /**
+        * Creates a caret position from a node and places the offset before it.
+        *
+        * @method before
+        * @param {Node} node Node to get caret position from.
+        * @return {tinymce.caret.CaretPosition} Caret position from the node.
+        */
+       CaretPosition.before = function(node) {
+               return new CaretPosition(node.parentNode, nodeIndex(node));
+       };
+
+       return CaretPosition;
+});
+
+// Included from: js/tinymce/classes/caret/CaretBookmark.js
+
+/**
+ * CaretBookmark.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module creates or resolves xpath like string representation of a CaretPositions.
+ *
+ * The format is a / separated list of chunks with:
+ * <element|text()>[index|after|before]
+ *
+ * For example:
+ *  p[0]/b[0]/text()[0],1 = <p><b>a|c</b></p>
+ *  p[0]/img[0],before = <p>|<img></p>
+ *  p[0]/img[0],after = <p><img>|</p>
+ *
+ * @private
+ * @static
+ * @class tinymce.caret.CaretBookmark
+ * @example
+ * var bookmark = CaretBookmark.create(rootElm, CaretPosition.before(rootElm.firstChild));
+ * var caretPosition = CaretBookmark.resolve(bookmark);
+ */
+define('tinymce/caret/CaretBookmark', [
+       'tinymce/dom/NodeType',
+       'tinymce/dom/DOMUtils',
+       'tinymce/util/Fun',
+       'tinymce/util/Arr',
+       'tinymce/caret/CaretPosition'
+], function(NodeType, DomUtils, Fun, Arr, CaretPosition) {
+       var isText = NodeType.isText,
+               isBogus = NodeType.isBogus,
+               nodeIndex = DomUtils.nodeIndex;
+
+       function normalizedParent(node) {
+               var parentNode = node.parentNode;
+
+               if (isBogus(parentNode)) {
+                       return normalizedParent(parentNode);
+               }
+
+               return parentNode;
+       }
+
+       function getChildNodes(node) {
+               if (!node) {
+                       return [];
+               }
+
+               return Arr.reduce(node.childNodes, function(result, node) {
+                       if (isBogus(node) && node.nodeName != 'BR') {
+                               result = result.concat(getChildNodes(node));
+                       } else {
+                               result.push(node);
+                       }
+
+                       return result;
+               }, []);
+       }
+
+       function normalizedTextOffset(textNode, offset) {
+               while ((textNode = textNode.previousSibling)) {
+                       if (!isText(textNode)) {
+                               break;
+                       }
+
+                       offset += textNode.data.length;
+               }
+
+               return offset;
+       }
+
+       function equal(targetValue) {
+               return function(value) {
+                       return targetValue === value;
+               };
+       }
+
+       function normalizedNodeIndex(node) {
+               var nodes, index, numTextFragments;
+
+               nodes = getChildNodes(normalizedParent(node));
+               index = Arr.findIndex(nodes, equal(node), node);
+               nodes = nodes.slice(0, index + 1);
+               numTextFragments = Arr.reduce(nodes, function(result, node, i) {
+                       if (isText(node) && isText(nodes[i - 1])) {
+                               result++;
+                       }
+
+                       return result;
+               }, 0);
+
+               nodes = Arr.filter(nodes, NodeType.matchNodeNames(node.nodeName));
+               index = Arr.findIndex(nodes, equal(node), node);
+
+               return index - numTextFragments;
+       }
+
+       function createPathItem(node) {
+               var name;
+
+               if (isText(node)) {
+                       name = 'text()';
+               } else {
+                       name = node.nodeName.toLowerCase();
+               }
+
+               return name + '[' + normalizedNodeIndex(node) + ']';
+       }
+
+       function parentsUntil(rootNode, node, predicate) {
+               var parents = [];
+
+               for (node = node.parentNode; node != rootNode; node = node.parentNode) {
+                       if (predicate && predicate(node)) {
+                               break;
+                       }
+
+                       parents.push(node);
+               }
+
+               return parents;
+       }
+
+       function create(rootNode, caretPosition) {
+               var container, offset, path = [],
+                       outputOffset, childNodes, parents;
+
+               container = caretPosition.container();
+               offset = caretPosition.offset();
+
+               if (isText(container)) {
+                       outputOffset = normalizedTextOffset(container, offset);
+               } else {
+                       childNodes = container.childNodes;
+                       if (offset >= childNodes.length) {
+                               outputOffset = 'after';
+                               offset = childNodes.length - 1;
+                       } else {
+                               outputOffset = 'before';
+                       }
+
+                       container = childNodes[offset];
+               }
+
+               path.push(createPathItem(container));
+               parents = parentsUntil(rootNode, container);
+               parents = Arr.filter(parents, Fun.negate(NodeType.isBogus));
+               path = path.concat(Arr.map(parents, function(node) {
+                       return createPathItem(node);
+               }));
+
+               return path.reverse().join('/') + ',' + outputOffset;
+       }
+
+       function resolvePathItem(node, name, index) {
+               var nodes = getChildNodes(node);
+
+               nodes = Arr.filter(nodes, function(node, index) {
+                       return !isText(node) || !isText(nodes[index - 1]);
+               });
+
+               nodes = Arr.filter(nodes, NodeType.matchNodeNames(name));
+               return nodes[index];
+       }
+
+       function findTextPosition(container, offset) {
+               var node = container, targetOffset = 0, dataLen;
+
+               while (isText(node)) {
+                       dataLen = node.data.length;
+
+                       if (offset >= targetOffset && offset <= targetOffset + dataLen) {
+                               container = node;
+                               offset = offset - targetOffset;
+                               break;
+                       }
+
+                       if (!isText(node.nextSibling)) {
+                               container = node;
+                               offset = dataLen;
+                               break;
+                       }
+
+                       targetOffset += dataLen;
+                       node = node.nextSibling;
+               }
+
+               if (offset > container.data.length) {
+                       offset = container.data.length;
+               }
+
+               return new CaretPosition(container, offset);
+       }
+
+       function resolve(rootNode, path) {
+               var parts, container, offset;
+
+               if (!path) {
+                       return null;
+               }
+
+               parts = path.split(',');
+               path = parts[0].split('/');
+               offset = parts.length > 1 ? parts[1] : 'before';
+
+               container = Arr.reduce(path, function(result, value) {
+                       value = /([\w\-\(\)]+)\[([0-9]+)\]/.exec(value);
+                       if (!value) {
+                               return null;
+                       }
+
+                       if (value[1] === 'text()') {
+                               value[1] = '#text';
+                       }
+
+                       return resolvePathItem(result, value[1], parseInt(value[2], 10));
+               }, rootNode);
+
+               if (!container) {
+                       return null;
+               }
+
+               if (!isText(container)) {
+                       if (offset === 'after') {
+                               offset = nodeIndex(container) + 1;
+                       } else {
+                               offset = nodeIndex(container);
+                       }
+
+                       return new CaretPosition(container.parentNode, offset);
+               }
+
+               return findTextPosition(container, parseInt(offset, 10));
+       }
+
+       return {
+               /**
+                * Create a xpath bookmark location for the specified caret position.
+                *
+                * @method create
+                * @param {Node} rootNode Root node to create bookmark within.
+                * @param {tinymce.caret.CaretPosition} caretPosition Caret position within the root node.
+                * @return {String} String xpath like location of caret position.
+                */
+               create: create,
+
+               /**
+                * Resolves a xpath like bookmark location to the a caret position.
+                *
+                * @method resolve
+                * @param {Node} rootNode Root node to resolve xpath bookmark within.
+                * @param {String} bookmark Bookmark string to resolve.
+                * @return {tinymce.caret.CaretPosition} Caret position resolved from xpath like bookmark.
+                */
+               resolve: resolve
+       };
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/dom/BookmarkManager.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14606,8 +16723,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/dom/BookmarkManager", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/util/Tools"
-], function(Env, Tools) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Tools",
+       "tinymce/caret/CaretContainer",
+       "tinymce/caret/CaretBookmark",
+       "tinymce/caret/CaretPosition",
+       "tinymce/dom/NodeType"
+], function(Env, Tools, CaretContainer, CaretBookmark, CaretPosition, NodeType) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse;
+
</ins><span class="cx" style="display: block; padding: 0 10px">         /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Constructs a new BookmarkManager instance for a specific selection instance.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14639,15 +16762,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        var rng, rng2, id, collapsed, name, element, chr = '&#xFEFF;', styles;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function findIndex(name, element) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                var index = 0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         var count = 0;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                Tools.each(dom.select(name), function(node, i) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         Tools.each(dom.select(name), function(node) {
+                                       if (node.getAttribute('data-mce-bogus') === 'all') {
+                                               return;
+                                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (node == element) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                index = i;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         return false;
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                                       count++;
</ins><span class="cx" style="display: block; padding: 0 10px">                                 });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                return index;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         return count;
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function normalizeTableCellSelection(rng) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14673,8 +16802,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return rng;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        function getLocation() {
-                               var rng = selection.getRng(true), root = dom.getRoot(), bookmark = {};
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 function getLocation(rng) {
+                               var root = dom.getRoot(), bookmark = {};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                function getPoint(rng, start) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        var container = rng[start ? 'startContainer' : 'endContainer'],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14715,11 +16844,36 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return bookmark;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        function findAdjacentContentEditableFalseElm(rng) {
+                               function findSibling(node) {
+                                       var sibling;
+
+                                       if (CaretContainer.isCaretContainer(node)) {
+                                               if (NodeType.isText(node) && CaretContainer.isCaretContainerBlock(node)) {
+                                                       node = node.parentNode;
+                                               }
+
+                                               sibling = node.previousSibling;
+                                               if (isContentEditableFalse(sibling)) {
+                                                       return sibling;
+                                               }
+
+                                               sibling = node.nextSibling;
+                                               if (isContentEditableFalse(sibling)) {
+                                                       return sibling;
+                                               }
+                                       }
+                               }
+
+                               return findSibling(rng.startContainer) || findSibling(rng.endContainer);
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (type == 2) {
</span><span class="cx" style="display: block; padding: 0 10px">                                element = selection.getNode();
</span><span class="cx" style="display: block; padding: 0 10px">                                name = element ? element.nodeName : null;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                rng = selection.getRng();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (name == 'IMG') {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (isContentEditableFalse(element) || name == 'IMG') {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         return {name: name, index: findIndex(name, element)};
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14727,9 +16881,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        return selection.tridentSel.getBookmark(type);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                return getLocation();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         element = findAdjacentContentEditableFalseElm(rng);
+                               if (element) {
+                                       name = element.tagName;
+                                       return {name: name, index: findIndex(name, element)};
+                               }
+
+                               return getLocation(rng);
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (type == 3) {
+                               rng = selection.getRng();
+
+                               return {
+                                       start: CaretBookmark.create(dom.getRoot(), CaretPosition.fromRangeStart(rng)),
+                                       end: CaretBookmark.create(dom.getRoot(), CaretPosition.fromRangeEnd(rng))
+                               };
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Handle simple range
</span><span class="cx" style="display: block; padding: 0 10px">                        if (type) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return {rng: selection.getRng()};
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14932,8 +17101,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return node;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        function resolveCaretPositionBookmark() {
+                               var rng, pos;
+
+                               rng = dom.createRng();
+                               pos = CaretBookmark.resolve(dom.getRoot(), bookmark.start);
+                               rng.setStart(pos.container(), pos.offset());
+
+                               pos = CaretBookmark.resolve(dom.getRoot(), bookmark.end);
+                               rng.setEnd(pos.container(), pos.offset());
+
+                               return rng;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (bookmark) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (bookmark.start) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (Tools.isArray(bookmark.start)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         rng = dom.createRng();
</span><span class="cx" style="display: block; padding: 0 10px">                                        root = dom.getRoot();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -14944,6 +17126,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (setEndPoint(true) && setEndPoint()) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                selection.setRng(rng);
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                } else if (typeof bookmark.start == 'string') {
+                                       selection.setRng(resolveCaretPositionBookmark(bookmark));
</ins><span class="cx" style="display: block; padding: 0 10px">                                 } else if (bookmark.id) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Restore start/end points
</span><span class="cx" style="display: block; padding: 0 10px">                                        restoreEndPoint('start');
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15006,9 +17190,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/ControlSelection",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/RangeUtils",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/BookmarkManager",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/dom/NodeType",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/Env",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Tools"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, BookmarkManager, Env, Tools) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, BookmarkManager, NodeType, Env, Tools) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var each = Tools.each, trim = Tools.trim;
</span><span class="cx" style="display: block; padding: 0 10px">        var isIE = Env.ie;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15019,7 +17204,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @method Selection
</span><span class="cx" style="display: block; padding: 0 10px">         * @param {tinymce.dom.DOMUtils} dom DOMUtils object reference.
</span><span class="cx" style="display: block; padding: 0 10px">         * @param {Window} win Window to bind the selection object to.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param {tinymce.Editor} editor
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param {tinymce.Editor} editor Editor instance of the selection.
</ins><span class="cx" style="display: block; padding: 0 10px">          * @param {tinymce.dom.Serializer} serializer DOM serialization class to use for getContent.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        function Selection(dom, win, serializer, editor) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15458,7 +17643,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @see http://www.dotvoid.com/2001/03/using-the-range-object-in-mozilla/
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                getRng: function(w3c) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var self = this, selection, rng, elm, doc = self.win.document, ieRng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var self = this, selection, rng, elm, doc, ieRng, evt;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function tryCompareBoundaryPoints(how, sourceRange, destinationRange) {
</span><span class="cx" style="display: block; padding: 0 10px">                                try {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15473,6 +17658,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (!self.win) {
+                               return null;
+                       }
+
+                       doc = self.win.document;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Use last rng passed from FocusManager if it's available this enables
</span><span class="cx" style="display: block; padding: 0 10px">                        // calls to editor.selection.getStart() to work when caret focus is lost on IE
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!w3c && self.lastFocusBookmark) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15507,6 +17698,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                // IE throws unspecified error here if TinyMCE is placed in a frame/iframe
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        evt = self.editor.fire('GetSelectionRange', {range: rng});
+                       if (evt.range !== rng) {
+                               return evt.range;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet
</span><span class="cx" style="display: block; padding: 0 10px">                        // IE 11 doesn't support the selection object so we check for that as well
</span><span class="cx" style="display: block; padding: 0 10px">                        if (isIE && rng && rng.setStart && doc.selection) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15559,10 +17755,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method setRng
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Range} rng Range to select.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Boolean} forward
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Boolean} forward Optional boolean if the selection is forwards or backwards.
</ins><span class="cx" style="display: block; padding: 0 10px">                  */
</span><span class="cx" style="display: block; padding: 0 10px">                setRng: function(rng, forward) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var self = this, sel, node;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var self = this, sel, node, evt;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!rng) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15570,6 +17766,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Is IE specific range
</span><span class="cx" style="display: block; padding: 0 10px">                        if (rng.select) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                self.explicitRange = null;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 try {
</span><span class="cx" style="display: block; padding: 0 10px">                                        rng.select();
</span><span class="cx" style="display: block; padding: 0 10px">                                } catch (ex) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15582,6 +17780,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!self.tridentSel) {
</span><span class="cx" style="display: block; padding: 0 10px">                                sel = self.getSel();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                evt = self.editor.fire('SetSelectionRange', {range: rng});
+                               rng = evt.range;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (sel) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        self.explicitRange = rng;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15860,8 +18061,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        return scrollContainer;
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                scrollIntoView: function(elm) {
-                       var y, viewPort, self = this, dom = self.dom, root = dom.getRoot(), viewPortY, viewPortH;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         scrollIntoView: function(elm, alignToTop) {
+                       var y, viewPort, self = this, dom = self.dom, root = dom.getRoot(), viewPortY, viewPortH, offsetY = 0;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function getPos(elm) {
</span><span class="cx" style="display: block; padding: 0 10px">                                var x = 0, y = 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15876,10 +18077,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return {x: x, y: y};
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (!NodeType.isElement(elm)) {
+                               return;
+                       }
+
+                       if (alignToTop === false) {
+                               offsetY = elm.offsetHeight;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (root.nodeName != 'BODY') {
</span><span class="cx" style="display: block; padding: 0 10px">                                var scrollContainer = self.getScrollContainer();
</span><span class="cx" style="display: block; padding: 0 10px">                                if (scrollContainer) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        y = getPos(elm).y - getPos(scrollContainer).y;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 y = getPos(elm).y - getPos(scrollContainer).y + offsetY;
</ins><span class="cx" style="display: block; padding: 0 10px">                                         viewPortH = scrollContainer.clientHeight;
</span><span class="cx" style="display: block; padding: 0 10px">                                        viewPortY = scrollContainer.scrollTop;
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (y < viewPortY || y + 25 > viewPortY + viewPortH) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15891,7 +18100,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        viewPort = dom.getViewPort(self.editor.getWin());
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        y = dom.getPos(elm).y;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 y = dom.getPos(elm).y + offsetY;
</ins><span class="cx" style="display: block; padding: 0 10px">                         viewPortY = viewPort.y;
</span><span class="cx" style="display: block; padding: 0 10px">                        viewPortH = viewPort.h;
</span><span class="cx" style="display: block; padding: 0 10px">                        if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15900,27 +18109,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                placeCaretAt: function(clientX, clientY) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var doc = this.editor.getDoc(), rng, point;
-
-                       if (doc.caretPositionFromPoint) {
-                               point = doc.caretPositionFromPoint(clientX, clientY);
-                               rng = doc.createRange();
-                               rng.setStart(point.offsetNode, point.offset);
-                               rng.collapse(true);
-                       } else if (doc.caretRangeFromPoint) {
-                               rng = doc.caretRangeFromPoint(clientX, clientY);
-                       } else if (doc.body.createTextRange) {
-                               rng = doc.body.createTextRange();
-
-                               try {
-                                       rng.moveToPoint(clientX, clientY);
-                                       rng.collapse(true);
-                               } catch (ex) {
-                                       rng.collapse(clientY < doc.body.clientHeight);
-                               }
-                       }
-
-                       this.setRng(rng);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 this.setRng(RangeUtils.getCaretRangeFromPoint(clientX, clientY, this.editor.getDoc()));
</ins><span class="cx" style="display: block; padding: 0 10px">                 },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                _moveEndPoint: function(rng, node, start) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -16364,17 +18553,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                ],
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                alignleft: [
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        {selector: 'figure.image', collapsed: false, classes: 'align-left', ceFalseOverride: true},
</ins><span class="cx" style="display: block; padding: 0 10px">                                         {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'left'}, defaultBlock: 'div'},
</span><span class="cx" style="display: block; padding: 0 10px">                                        {selector: 'img,table', collapsed: false, styles: {'float': 'left'}}
</span><span class="cx" style="display: block; padding: 0 10px">                                ],
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                aligncenter: [
</span><span class="cx" style="display: block; padding: 0 10px">                                        {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'center'}, defaultBlock: 'div'},
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        {selector: 'figure.image', collapsed: false, classes: 'align-center', ceFalseOverride: true},
</ins><span class="cx" style="display: block; padding: 0 10px">                                         {selector: 'img', collapsed: false, styles: {display: 'block', marginLeft: 'auto', marginRight: 'auto'}},
</span><span class="cx" style="display: block; padding: 0 10px">                                        {selector: 'table', collapsed: false, styles: {marginLeft: 'auto', marginRight: 'auto'}}
</span><span class="cx" style="display: block; padding: 0 10px">                                ],
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                alignright: [
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        {selector: 'figure.image', collapsed: false, classes: 'align-right', ceFalseOverride: true},
</ins><span class="cx" style="display: block; padding: 0 10px">                                         {selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li', styles: {textAlign: 'right'}, defaultBlock: 'div'},
</span><span class="cx" style="display: block; padding: 0 10px">                                        {selector: 'img,table', collapsed: false, styles: {'float': 'right'}}
</span><span class="cx" style="display: block; padding: 0 10px">                                ],
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -16710,6 +18902,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (dom.is(node, format.selector) && !isCaretNode(node)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        setElementFormat(node, format);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        found = true;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                        return false;
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -16866,6 +19059,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                });
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (getContentEditable(selection.getNode()) === "false") {
+                               node = selection.getNode();
+                               for (var i = 0, l = formatList.length; i < l; i++) {
+                                       if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {
+                                               setElementFormat(node, formatList[i]);
+                                               return;
+                                       }
+                               }
+
+                               return;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (format) {
</span><span class="cx" style="display: block; padding: 0 10px">                                if (node) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (node.nodeType) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17142,6 +19347,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (getContentEditable(selection.getNode()) === "false") {
+                               node = selection.getNode();
+                               for (var i = 0, l = formatList.length; i < l; i++) {
+                                       if (formatList[i].ceFalseOverride) {
+                                               if (removeFormat(formatList[i], vars, node, node)) {
+                                                       break;
+                                               }
+                                       }
+                               }
+
+                               return;
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (!selection.isCollapsed() || !format.inline || dom.select('td.mce-item-selected,th.mce-item-selected').length) {
</span><span class="cx" style="display: block; padding: 0 10px">                                bookmark = selection.getBookmark();
</span><span class="cx" style="display: block; padding: 0 10px">                                removeRngStyle(selection.getRng(TRUE));
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17653,7 +19871,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Check if we can move up are we at root level or body level
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if (parent.parentNode == root) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if (parent == root || parent.parentNode == root) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 container = parent;
</span><span class="cx" style="display: block; padding: 0 10px">                                                break;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18357,7 +20575,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Applies formatting to the caret postion
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Applies formatting to the caret position
</ins><span class="cx" style="display: block; padding: 0 10px">                         function applyCaretFormat() {
</span><span class="cx" style="display: block; padding: 0 10px">                                var rng, caretContainer, textNode, offset, bookmark, container, text;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18477,7 +20695,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                // Replace formatNode with caretContainer when removing format from empty block like <p><b>|</b></p>
</span><span class="cx" style="display: block; padding: 0 10px">                                                formatNode.parentNode.replaceChild(caretContainer, formatNode);
</span><span class="cx" style="display: block; padding: 0 10px">                                        } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                // Insert caret container after the formated node
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         // Insert caret container after the formatted node
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 dom.insertAfter(caretContainer, formatNode);
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18628,58 +20846,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/UndoManager", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/VK",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/Env",
-       "tinymce/util/Tools",
-       "tinymce/html/SaxParser"
-], function(VK, Env, Tools, SaxParser) {
-       var trim = Tools.trim, trimContentRegExp;
-
-       trimContentRegExp = new RegExp([
-               '<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\\/span>', // Trim bogus spans like caret containers
-               '\\s?data-mce-selected="[^"]+"' // Trim temporary data-mce prefixed attributes like data-mce-selected
-       ].join('|'), 'gi');
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/Env"
+], function(VK, Env) {
</ins><span class="cx" style="display: block; padding: 0 10px">         return function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                /**
-                * Returns a trimmed version of the editor contents to be used for the undo level. This
-                * will remove any data-mce-bogus="all" marked elements since these are used for UI it will also
-                * remove the data-mce-selected attributes used for selection of objects and caret containers.
-                * It will keep all data-mce-bogus="1" elements since these can be used to place the caret etc and will
-                * be removed by the serialization logic when you save.
-                *
-                * @private
-                * @return {String} HTML contents of the editor excluding some internal bogus elements.
-                */
</del><span class="cx" style="display: block; padding: 0 10px">                 function getContent() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var content = editor.getContent({format: 'raw', no_events: 1});
-                       var bogusAllRegExp = /<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g;
-                       var endTagIndex, index, matchLength, matches, shortEndedElements, schema = editor.schema;
-
-                       content = content.replace(trimContentRegExp, '');
-                       shortEndedElements = schema.getShortEndedElements();
-
-                       // Remove all bogus elements marked with "all"
-                       while ((matches = bogusAllRegExp.exec(content))) {
-                               index = bogusAllRegExp.lastIndex;
-                               matchLength = matches[0].length;
-
-                               if (shortEndedElements[matches[1]]) {
-                                       endTagIndex = index;
-                               } else {
-                                       endTagIndex = SaxParser.findEndTag(schema, content, index);
-                               }
-
-                               content = content.substring(0, index - matchLength) + content.substring(endTagIndex);
-                               bogusAllRegExp.lastIndex = index - matchLength;
-                       }
-
-                       return trim(content);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 return editor.serializer.getTrimmedContent();
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function setDirty(state) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        editor.isNotDirty = !state;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.setDirty(state);
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function addNonTypingUndoLevel(e) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18742,7 +20919,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        setDirty(data[0] && getContent() != data[0].content);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Fire initial change event
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if (!editor.isNotDirty) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if (editor.isDirty()) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 editor.fire('change', {level: data[0], lastLevel: null});
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18907,13 +21084,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if (index > 0) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        level = data[--index];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // Undo to first index then set dirty state to false
-                                       if (index === 0) {
-                                               setDirty(false);
-                                       }
-
</del><span class="cx" style="display: block; padding: 0 10px">                                         editor.setContent(level.content, {format: 'raw'});
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.selection.moveToBookmark(level.beforeBookmark);
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        setDirty(true);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.fire('undo', {level: level});
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19653,6 +21826,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        emptyBlock(parentBlock);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                newBlock.normalize();
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // New block might become empty if it's <p><b>a |</b></p>
</span><span class="cx" style="display: block; padding: 0 10px">                                if (dom.isEmpty(newBlock)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        dom.remove(newBlock);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19850,7 +22025,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        // Added for compression purposes
</span><span class="cx" style="display: block; padding: 0 10px">        var each = Tools.each, extend = Tools.extend;
</span><span class="cx" style="display: block; padding: 0 10px">        var map = Tools.map, inArray = Tools.inArray, explode = Tools.explode;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var isGecko = Env.gecko, isIE = Env.ie, isOldIE = Env.ie && Env.ie < 11;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var isIE = Env.ie, isOldIE = Env.ie && Env.ie < 11;
</ins><span class="cx" style="display: block; padding: 0 10px">         var TRUE = true, FALSE = false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        return function(editor) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -19873,7 +22048,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {String} command Command to execute.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Boolean} ui Optional user interface state.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Object} value Optional value for command.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Object} args
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Object} args Optional extra arguments to the execCommand.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @return {Boolean} true/false if the command was found or not.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                function execCommand(command, ui, value, args) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20130,7 +22305,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                msg = msg.replace(/Ctrl\+/g, '\u2318+');
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        editor.windowManager.alert(msg);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 editor.notificationManager.open({text: msg, type: 'error'});
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20165,7 +22340,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (align != 'none') {
</span><span class="cx" style="display: block; padding: 0 10px">                                        toggleFormat('align' + align);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        execCommand('mceRepaint');
</del><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20349,6 +22523,62 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                function moveSelectionToMarker(marker) {
+                                       var parentEditableFalseElm;
+
+                                       function getContentEditableFalseParent(node) {
+                                               var root = editor.getBody();
+
+                                               for (; node && node !== root; node = node.parentNode) {
+                                                       if (editor.dom.getContentEditable(node) === 'false') {
+                                                               return node;
+                                                       }
+                                               }
+
+                                               return null;
+                                       }
+
+                                       if (!marker) {
+                                               return;
+                                       }
+
+                                       selection.scrollIntoView(marker);
+
+                                       // If marker is in cE=false then move selection to that element instead
+                                       parentEditableFalseElm = getContentEditableFalseParent(marker);
+                                       if (parentEditableFalseElm) {
+                                               dom.remove(marker);
+                                               selection.select(parentEditableFalseElm);
+                                               return;
+                                       }
+
+                                       // Move selection before marker and remove it
+                                       rng = dom.createRng();
+
+                                       // If previous sibling is a text node set the selection to the end of that node
+                                       node = marker.previousSibling;
+                                       if (node && node.nodeType == 3) {
+                                               rng.setStart(node, node.nodeValue.length);
+
+                                               // TODO: Why can't we normalize on IE
+                                               if (!isIE) {
+                                                       node2 = marker.nextSibling;
+                                                       if (node2 && node2.nodeType == 3) {
+                                                               node.appendData(node2.data);
+                                                               node2.parentNode.removeChild(node2);
+                                                       }
+                                               }
+                                       } else {
+                                               // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node
+                                               rng.setStartBefore(marker);
+                                               rng.setEndBefore(marker);
+                                       }
+
+                                       // Remove the marker node and set the new range
+                                       dom.remove(marker);
+                                       selection.setRng(rng);
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (typeof value != 'string') {
</span><span class="cx" style="display: block; padding: 0 10px">                                        merge = value.merge;
</span><span class="cx" style="display: block; padding: 0 10px">                                        data = value.data;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20395,6 +22625,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Insert node maker where we will insert the new HTML and get it's parent
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!selection.isCollapsed()) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        // Fix for #2595 seems that delete removes one extra character on
+                                       // WebKit for some odd reason if you double click select a word
+                                       editor.selection.setRng(editor.selection.getRng());
</ins><span class="cx" style="display: block; padding: 0 10px">                                         editor.getDoc().execCommand('Delete', false, null);
</span><span class="cx" style="display: block; padding: 0 10px">                                        trimNbspAfterDeleteAndPaddValue();
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20422,6 +22655,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                editor._selectionOverrides.showBlockCaretContainer(parentNode);
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // If parser says valid we can insert the contents into that parent
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!parserArgs.invalid) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        value = serializer.serialize(fragment);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20476,37 +22711,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                reduceInlineTextElements();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                               marker = dom.get('mce_marker');
-                               selection.scrollIntoView(marker);
-
-                               // Move selection before marker and remove it
-                               rng = dom.createRng();
-
-                               // If previous sibling is a text node set the selection to the end of that node
-                               node = marker.previousSibling;
-                               if (node && node.nodeType == 3) {
-                                       rng.setStart(node, node.nodeValue.length);
-
-                                       // TODO: Why can't we normalize on IE
-                                       if (!isIE) {
-                                               node2 = marker.nextSibling;
-                                               if (node2 && node2.nodeType == 3) {
-                                                       node.appendData(node2.data);
-                                                       node2.parentNode.removeChild(node2);
-                                               }
-                                       }
-                               } else {
-                                       // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node
-                                       rng.setStartBefore(marker);
-                                       rng.setEndBefore(marker);
-                               }
-
-                               // Remove the marker node and set the new range
-                               dom.remove(marker);
-                               selection.setRng(rng);
-
-                               // Dispatch after event and add any visual elements needed
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         moveSelectionToMarker(dom.get('mce_marker'));
</ins><span class="cx" style="display: block; padding: 0 10px">                                 editor.fire('SetContent', args);
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.addVisual();
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20543,6 +22748,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        each(selection.getSelectedBlocks(), function(element) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                if (dom.getContentEditable(element) === "false") {
+                                                       return;
+                                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 if (element.nodeName != "LI") {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        var indentStyleName = editor.getParam('indent_use_margin', false) ? 'margin' : 'padding';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20563,20 +22772,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        mceRepaint: function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (isGecko) {
-                                       try {
-                                               storeSelection(TRUE);
-
-                                               if (selection.getSel()) {
-                                                       selection.getSel().selectAllChildren(editor.getBody());
-                                               }
-
-                                               selection.collapse(TRUE);
-                                               restoreSelection();
-                                       } catch (ex) {
-                                               // Ignore
-                                       }
-                               }
</del><span class="cx" style="display: block; padding: 0 10px">                         },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        InsertHorizontalRule: function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -21255,7 +23450,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * This utilitiy class is used for easier inheritage.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * This utilitiy class is used for easier inheritance.
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * Features:
</span><span class="cx" style="display: block; padding: 0 10px">  * * Exposed super functions: this._super();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -23312,34 +25507,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * This class will automatically reflow controls on the next animation frame within a few milliseconds on older browsers.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * If the user manually reflows then the automatic reflow will be cancelled. This class is unsed internally when various control states
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * If the user manually reflows then the automatic reflow will be cancelled. This class is used internally when various control states
</ins><span class="cx" style="display: block; padding: 0 10px">  * changes that triggers a reflow.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @class tinymce.ui.ReflowQueue
</span><span class="cx" style="display: block; padding: 0 10px">  * @static
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/ui/ReflowQueue", [
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-], function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Delay"
+], function(Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var dirtyCtrls = {}, animationFrameRequested;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        function requestAnimationFrame(callback, element) {
-               var i, requestAnimationFrameFunc = window.requestAnimationFrame, vendors = ['ms', 'moz', 'webkit'];
-
-               function featurefill(callback) {
-                       window.setTimeout(callback, 0);
-               }
-
-               for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {
-                       requestAnimationFrameFunc = window[vendors[i] + 'RequestAnimationFrame'];
-               }
-
-               if (!requestAnimationFrameFunc) {
-                       requestAnimationFrameFunc = featurefill;
-               }
-
-               requestAnimationFrameFunc(callback, element);
-       }
-
</del><span class="cx" style="display: block; padding: 0 10px">         return {
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Adds a control to the next automatic reflow call. This is the control that had a state
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -23363,7 +25541,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!animationFrameRequested) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        animationFrameRequested = true;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        requestAnimationFrame(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 Delay.requestAnimationFrame(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 var id, ctrl;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                animationFrameRequested = false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26374,8 +28552,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/ui/Movable",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/ui/Resizable",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/ui/DomUtils",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/dom/DomQuery"
-], function(Panel, Movable, Resizable, DomUtils, $) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/dom/DomQuery",
+       "tinymce/util/Delay"
+], function(Panel, Movable, Resizable, DomUtils, $, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        var documentClickHandler, documentScrollHandler, windowResizeHandler, visiblePanels = [];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26587,10 +28766,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        ).appendTo(self.getContainerElm());
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         $modalBlockEl.addClass(prefix + 'in');
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $(self.getEl()).addClass(prefix + 'in');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                hasModal = true;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26785,8 +28964,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/DomQuery",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/ui/DragHelper",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/ui/BoxUtils",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/Env"
-], function(FloatPanel, Panel, DomUtils, $, DragHelper, BoxUtils, Env) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/Env",
+       "tinymce/util/Delay"
+], function(FloatPanel, Panel, DomUtils, $, DragHelper, BoxUtils, Env, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        var windows = [], oldMetaValue = '';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26830,7 +29010,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        h: window.innerHeight
</span><span class="cx" style="display: block; padding: 0 10px">                };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                window.setInterval(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         Delay.setInterval(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                         var w = window.innerWidth,
</span><span class="cx" style="display: block; padding: 0 10px">                                h = window.innerHeight;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26842,7 +29022,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                $(window).trigger('resize');
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         }, 100);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function reposition() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var i, rect = DomUtils.getWindowSize(), layoutRect;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27094,7 +29274,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if (!self._timer) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                self._timer = setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         self._timer = Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         var rect = DomUtils.getWindowSize();
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        self.moveTo(0, 0).resizeTo(rect.w, rect.h);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27502,7 +29682,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @method open
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param {Object} args Optional name/value settings collection contains things like width/height/url etc.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param {Object} params
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param {Object} params Options like title, file, width, height etc.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @option {String} title Window title.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @option {String} file URL of the file to open in the window.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @option {Number} width Width in pixels.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27681,6 +29861,612 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/ui/Tooltip.js
+
+/**
+ * Tooltip.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Creates a tooltip instance.
+ *
+ * @-x-less ToolTip.less
+ * @class tinymce.ui.ToolTip
+ * @extends tinymce.ui.Control
+ * @mixes tinymce.ui.Movable
+ */
+define("tinymce/ui/Tooltip", [
+       "tinymce/ui/Control",
+       "tinymce/ui/Movable"
+], function(Control, Movable) {
+       return Control.extend({
+               Mixins: [Movable],
+
+               Defaults: {
+                       classes: 'widget tooltip tooltip-n'
+               },
+
+               /**
+                * Renders the control as a HTML string.
+                *
+                * @method renderHtml
+                * @return {String} HTML representing the control.
+                */
+               renderHtml: function() {
+                       var self = this, prefix = self.classPrefix;
+
+                       return (
+                               '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' +
+                                       '<div class="' + prefix + 'tooltip-arrow"></div>' +
+                                       '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' +
+                               '</div>'
+                       );
+               },
+
+               bindStates: function() {
+                       var self = this;
+
+                       self.state.on('change:text', function(e) {
+                               self.getEl().lastChild.innerHTML = self.encode(e.value);
+                       });
+
+                       return self._super();
+               },
+
+               /**
+                * Repaints the control after a layout operation.
+                *
+                * @method repaint
+                */
+               repaint: function() {
+                       var self = this, style, rect;
+
+                       style = self.getEl().style;
+                       rect = self._layoutRect;
+
+                       style.left = rect.x + 'px';
+                       style.top = rect.y + 'px';
+                       style.zIndex = 0xFFFF + 0xFFFF;
+               }
+       });
+});
+
+// Included from: js/tinymce/classes/ui/Widget.js
+
+/**
+ * Widget.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Widget base class a widget is a control that has a tooltip and some basic states.
+ *
+ * @class tinymce.ui.Widget
+ * @extends tinymce.ui.Control
+ */
+define("tinymce/ui/Widget", [
+       "tinymce/ui/Control",
+       "tinymce/ui/Tooltip"
+], function(Control, Tooltip) {
+       "use strict";
+
+       var tooltip;
+
+       var Widget = Control.extend({
+               /**
+                * Constructs a instance with the specified settings.
+                *
+                * @constructor
+                * @param {Object} settings Name/value object with settings.
+                * @setting {String} tooltip Tooltip text to display when hovering.
+                * @setting {Boolean} autofocus True if the control should be focused when rendered.
+                * @setting {String} text Text to display inside widget.
+                */
+               init: function(settings) {
+                       var self = this;
+
+                       self._super(settings);
+                       settings = self.settings;
+                       self.canFocus = true;
+
+                       if (settings.tooltip && Widget.tooltips !== false) {
+                               self.on('mouseenter', function(e) {
+                                       var tooltip = self.tooltip().moveTo(-0xFFFF);
+
+                                       if (e.control == self) {
+                                               var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), ['bc-tc', 'bc-tl', 'bc-tr']);
+
+                                               tooltip.classes.toggle('tooltip-n', rel == 'bc-tc');
+                                               tooltip.classes.toggle('tooltip-nw', rel == 'bc-tl');
+                                               tooltip.classes.toggle('tooltip-ne', rel == 'bc-tr');
+
+                                               tooltip.moveRel(self.getEl(), rel);
+                                       } else {
+                                               tooltip.hide();
+                                       }
+                               });
+
+                               self.on('mouseleave mousedown click', function() {
+                                       self.tooltip().hide();
+                               });
+                       }
+
+                       self.aria('label', settings.ariaLabel || settings.tooltip);
+               },
+
+               /**
+                * Returns the current tooltip instance.
+                *
+                * @method tooltip
+                * @return {tinymce.ui.Tooltip} Tooltip instance.
+                */
+               tooltip: function() {
+                       if (!tooltip) {
+                               tooltip = new Tooltip({type: 'tooltip'});
+                               tooltip.renderTo();
+                       }
+
+                       return tooltip;
+               },
+
+               /**
+                * Called after the control has been rendered.
+                *
+                * @method postRender
+                */
+               postRender: function() {
+                       var self = this, settings = self.settings;
+
+                       self._super();
+
+                       if (!self.parent() && (settings.width || settings.height)) {
+                               self.initLayoutRect();
+                               self.repaint();
+                       }
+
+                       if (settings.autofocus) {
+                               self.focus();
+                       }
+               },
+
+               bindStates: function() {
+                       var self = this;
+
+                       function disable(state) {
+                               self.aria('disabled', state);
+                               self.classes.toggle('disabled', state);
+                       }
+
+                       function active(state) {
+                               self.aria('pressed', state);
+                               self.classes.toggle('active', state);
+                       }
+
+                       self.state.on('change:disabled', function(e) {
+                               disable(e.value);
+                       });
+
+                       self.state.on('change:active', function(e) {
+                               active(e.value);
+                       });
+
+                       if (self.state.get('disabled')) {
+                               disable(true);
+                       }
+
+                       if (self.state.get('active')) {
+                               active(true);
+                       }
+
+                       return self._super();
+               },
+
+               /**
+                * Removes the current control from DOM and from UI collections.
+                *
+                * @method remove
+                * @return {tinymce.ui.Control} Current control instance.
+                */
+               remove: function() {
+                       this._super();
+
+                       if (tooltip) {
+                               tooltip.remove();
+                               tooltip = null;
+                       }
+               }
+       });
+
+       return Widget;
+});
+
+// Included from: js/tinymce/classes/ui/Progress.js
+
+/**
+ * Progress.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Progress control.
+ *
+ * @-x-less Progress.less
+ * @class tinymce.ui.Progress
+ * @extends tinymce.ui.Control
+ */
+define("tinymce/ui/Progress", [
+       "tinymce/ui/Widget"
+], function(Widget) {
+       "use strict";
+
+       return Widget.extend({
+               Defaults: {
+                       value: 0
+               },
+
+               init: function(settings) {
+                       var self = this;
+
+                       self._super(settings);
+                       self.classes.add('progress');
+
+                       if (!self.settings.filter) {
+                               self.settings.filter = function(value) {
+                                       return Math.round(value);
+                               };
+                       }
+               },
+
+               renderHtml: function() {
+                       var self = this, id = self._id, prefix = this.classPrefix;
+
+                       return (
+                               '<div id="' + id + '" class="' + self.classes + '">' +
+                                       '<div class="' + prefix + 'bar-container">' +
+                                               '<div class="' + prefix + 'bar"></div>' +
+                                       '</div>' +
+                                       '<div class="' + prefix + 'text">0%</div>' +
+                               '</div>'
+                       );
+               },
+
+               postRender: function() {
+                       var self = this;
+
+                       self._super();
+                       self.value(self.settings.value);
+
+                       return self;
+               },
+
+               bindStates: function() {
+                       var self = this;
+
+                       function setValue(value) {
+                               value = self.settings.filter(value);
+                               self.getEl().lastChild.innerHTML = value + '%';
+                               self.getEl().firstChild.firstChild.style.width = value + '%';
+                       }
+
+                       self.state.on('change:value', function(e) {
+                               setValue(e.value);
+                       });
+
+                       setValue(self.state.get('value'));
+
+                       return self._super();
+               }
+       });
+});
+
+// Included from: js/tinymce/classes/ui/Notification.js
+
+/**
+ * Notification.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Creates a notification instance.
+ *
+ * @-x-less Notification.less
+ * @class tinymce.ui.Notification
+ * @extends tinymce.ui.Container
+ * @mixes tinymce.ui.Movable
+ */
+define("tinymce/ui/Notification", [
+       "tinymce/ui/Control",
+       "tinymce/ui/Movable",
+    "tinymce/ui/Progress"
+], function(Control, Movable, Progress) {
+       return Control.extend({
+               Mixins: [Movable],
+
+               Defaults: {
+                       classes: 'widget notification'
+               },
+
+               init: function(settings) {
+                       var self = this;
+
+                       self._super(settings);
+
+                       if (settings.text) {
+                               self.text(settings.text);
+                       }
+
+                       if (settings.icon) {
+                               self.icon = settings.icon;
+                       }
+
+                       if (settings.color) {
+                               self.color = settings.color;
+                       }
+
+                       if (settings.type) {
+                               self.classes.add('notification-' + settings.type);
+                       }
+
+                       if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
+                               self.closeButton = false;
+                       } else {
+                               self.classes.add('has-close');
+                               self.closeButton = true;
+                       }
+
+                       if (settings.progressBar) {
+                               self.progressBar = new Progress();
+                       }
+
+                       self.on('click', function(e) {
+                               if (e.target.className.indexOf(self.classPrefix + 'close') != -1) {
+                                       self.close();
+                               }
+                       });
+               },
+
+               /**
+                * Renders the control as a HTML string.
+                *
+                * @method renderHtml
+                * @return {String} HTML representing the control.
+                */
+               renderHtml: function() {
+                       var self = this, prefix = self.classPrefix, icon = '', closeButton = '', progressBar = '', notificationStyle = '';
+
+                       if (self.icon) {
+                               icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
+                       }
+
+                       if (self.color) {
+                               notificationStyle = ' style="background-color: ' + self.color + '"';
+                       }
+
+                       if (self.closeButton) {
+                               closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\u00d7</button>';
+                       }
+
+                       if (self.progressBar) {
+                               progressBar = self.progressBar.renderHtml();
+                       }
+
+                       return (
+                               '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' +
+                                       icon +
+                                       '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' +
+                                       progressBar +
+                                       closeButton +
+                               '</div>'
+                       );
+               },
+
+               bindStates: function() {
+                       var self = this;
+
+                       self.state.on('change:text', function(e) {
+                               self.getEl().childNodes[1].innerHTML = e.value;
+                       });
+                       if (self.progressBar) {
+                               self.progressBar.bindStates();
+                       }
+                       return self._super();
+               },
+
+               close: function() {
+                       var self = this;
+
+                       if (!self.fire('close').isDefaultPrevented()) {
+                               self.remove();
+                       }
+
+                       return self;
+               },
+
+               /**
+                * Repaints the control after a layout operation.
+                *
+                * @method repaint
+                */
+               repaint: function() {
+                       var self = this, style, rect;
+
+                       style = self.getEl().style;
+                       rect = self._layoutRect;
+
+                       style.left = rect.x + 'px';
+                       style.top = rect.y + 'px';
+                       style.zIndex = 0xFFFF + 0xFFFF;
+               }
+       });
+});
+
+// Included from: js/tinymce/classes/NotificationManager.js
+
+/**
+ * NotificationManager.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This class handles the creation of TinyMCE's notifications.
+ *
+ * @class tinymce.notificationManager
+ * @example
+ * // Opens a new notification of type "error" with text "An error occurred."
+ * tinymce.activeEditor.notificationManager.open({
+ *    text: 'An error occurred.',
+ *    type: 'error'
+ * });
+ */
+define("tinymce/NotificationManager", [
+       "tinymce/ui/Notification",
+       "tinymce/util/Delay"
+], function(Notification, Delay) {
+       return function(editor) {
+               var self = this, notifications = [];
+
+               function getLastNotification() {
+                       if (notifications.length) {
+                               return notifications[notifications.length - 1];
+                       }
+               }
+
+               self.notifications = notifications;
+
+               function resizeWindowEvent() {
+                       Delay.requestAnimationFrame(function() {
+                               prePositionNotifications();
+                               positionNotifications();
+                       });
+               }
+
+               // Since the viewport will change based on the present notifications, we need to move them all to the
+               // top left of the viewport to give an accurate size measurement so we can position them later.
+               function prePositionNotifications() {
+                       for (var i = 0; i < notifications.length; i++) {
+                               notifications[i].moveTo(0, 0);
+                       }
+               }
+
+               function positionNotifications() {
+                       if (notifications.length > 0) {
+                               var firstItem = notifications.slice(0, 1)[0];
+                               var container = editor.inline ? editor.getElement() : editor.getContentAreaContainer();
+                               firstItem.moveRel(container, 'tc-tc');
+                               if (notifications.length > 1) {
+                                       for (var i = 1; i < notifications.length; i++) {
+                                               notifications[i].moveRel(notifications[i - 1].getEl(), 'bc-tc');
+                                       }
+                               }
+                       }
+               }
+
+               editor.on('remove', function() {
+                       var i = notifications.length;
+
+                       while (i--) {
+                               notifications[i].close();
+                       }
+               });
+
+               editor.on('ResizeEditor', positionNotifications);
+               editor.on('ResizeWindow', resizeWindowEvent);
+
+               /**
+                * Opens a new notification.
+                *
+                * @method open
+                * @param {Object} args Optional name/value settings collection contains things like timeout/color/message etc.
+                */
+               self.open = function(args) {
+                       var notif;
+
+                       editor.editorManager.setActive(editor);
+
+                       notif = new Notification(args);
+                       notifications.push(notif);
+
+                       //If we have a timeout value
+                       if (args.timeout > 0) {
+                               notif.timer = setTimeout(function() {
+                                       notif.close();
+                               }, args.timeout);
+                       }
+
+                       notif.on('close', function() {
+                               var i = notifications.length;
+
+                               if (notif.timer) {
+                                       editor.getWin().clearTimeout(notif.timer);
+                               }
+
+                               while (i--) {
+                                       if (notifications[i] === notif) {
+                                               notifications.splice(i, 1);
+                                       }
+                               }
+
+                               positionNotifications();
+                       });
+
+                       notif.renderTo();
+
+                       positionNotifications();
+
+                       return notif;
+               };
+
+               /**
+                * Closes the top most notification.
+                *
+                * @method close
+                */
+               self.close = function() {
+                       if (getLastNotification()) {
+                               getLastNotification().close();
+                       }
+               };
+
+               /**
+                * Returns the currently opened notification objects.
+                *
+                * @method getNotifications
+                * @return {Array} Array of the currently opened notifications.
+                */
+               self.getNotifications = function() {
+                       return notifications;
+               };
+
+               //self.positionNotifications = positionNotifications;
+       };
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/dom/NodePath.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27762,8 +30548,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/Node",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/Entities",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/util/Tools"
-], function(VK, RangeUtils, TreeWalker, NodePath, Node, Entities, Env, Tools) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/util/Tools",
+       "tinymce/util/Delay",
+       "tinymce/caret/CaretContainer"
+], function(VK, RangeUtils, TreeWalker, NodePath, Node, Entities, Env, Tools, Delay, CaretContainer) {
</ins><span class="cx" style="display: block; padding: 0 10px">         return function(editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                var each = Tools.each, $ = editor.$;
</span><span class="cx" style="display: block; padding: 0 10px">                var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28296,7 +31084,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // Remove all spans that isn't maked and retain selection
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 // Remove all spans that aren't marked and retain selection
</ins><span class="cx" style="display: block; padding: 0 10px">                                         Tools.each(record.addedNodes, function(node) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (node.nodeName == "SPAN" && !node.getAttribute('mce-data-marked')) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        var offset, container;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28445,7 +31233,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                // produces a green plus icon. When this happens the caretRangeFromPoint
</span><span class="cx" style="display: block; padding: 0 10px">                                                // will return "null" even though the x, y coordinate is correct.
</span><span class="cx" style="display: block; padding: 0 10px">                                                // But if we detach the insert from the drop event we will get a proper range
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         var pointRng = RangeUtils.getCaretRangeFromPoint(e.x, e.y, doc);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if (dragStartRng) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28456,7 +31244,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        customDelete();
</span><span class="cx" style="display: block; padding: 0 10px">                                                        selection.setRng(pointRng);
</span><span class="cx" style="display: block; padding: 0 10px">                                                        insertClipboardContents(internalContent.html);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         });
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28471,9 +31259,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Needed delay for https://code.google.com/p/chromium/issues/detail?id=363288#c3
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Nested delete/forwardDelete not allowed on execCommand("cut")
</span><span class="cx" style="display: block; padding: 0 10px">                                        // This is ugly but not sure how to work around it otherwise
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 customDelete(true);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 });
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28574,21 +31362,30 @@
</span><span class="cx" style="display: block; padding: 0 10px">                function inputMethodFocus() {
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!editor.settings.content_editable) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // Case 1 IME doesn't initialize if you focus the document
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                dom.bind(editor.getDoc(), 'focusin', function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         // Disabled since it was interferring with the cE=false logic
+                               // Also coultn't reproduce the issue on Safari 9
+                               /*dom.bind(editor.getDoc(), 'focusin', function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         selection.setRng(selection.getRng());
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         });*/
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event
</span><span class="cx" style="display: block; padding: 0 10px">                                // Needs to be both down/up due to weird rendering bug on Chrome Windows
</span><span class="cx" style="display: block; padding: 0 10px">                                dom.bind(editor.getDoc(), 'mousedown mouseup', function(e) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        var rng;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (e.target == editor.getDoc().documentElement) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                rng = selection.getRng();
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 editor.getBody().focus();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (e.type == 'mousedown') {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                        if (CaretContainer.isCaretContainer(rng.startContainer)) {
+                                                               return;
+                                                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         // Edge case for mousedown, drag select and mousedown again within selection on Chrome Windows to render caret
</span><span class="cx" style="display: block; padding: 0 10px">                                                        selection.placeCaretAt(e.clientX, e.clientY);
</span><span class="cx" style="display: block; padding: 0 10px">                                                } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        selection.setRng(selection.getRng());
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 selection.setRng(rng);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                });
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28647,9 +31444,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                body.blur();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                // Refocus the body after a little while
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         body.focus();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         });
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><span class="cx" style="display: block; padding: 0 10px">                                });
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28666,7 +31463,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
</span><span class="cx" style="display: block; padding: 0 10px">                                // WebKit can't even do simple things like selecting an image
</span><span class="cx" style="display: block; padding: 0 10px">                                // Needs to be the setBaseAndExtend or it will fail to select floated images
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (/^(IMG|HR)$/.test(target.nodeName)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== "false") {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         e.preventDefault();
</span><span class="cx" style="display: block; padding: 0 10px">                                        selection.getSel().setBaseAndExtent(target, 0, target, 1);
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.nodeChanged();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28731,9 +31528,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        applyAttributes = getAttributeApplyFunction();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 applyAttributes();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 });
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28957,17 +31754,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * Removes ghost selections from images/tables on Gecko.
-                */
-               function removeGhostSelection() {
-                       editor.on('Undo Redo SetContent', function(e) {
-                               if (!e.initial) {
-                                       editor.execCommand('mceRepaint');
-                               }
-                       });
-               }
-
-               /**
</del><span class="cx" style="display: block; padding: 0 10px">                  * Deletes the selected image on IE instead of navigating to previous page.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                function deleteControlItemOnBackSpace() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29426,7 +32212,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        removeStylesWhenDeletingAcrossBlockElements();
</span><span class="cx" style="display: block; padding: 0 10px">                        setGeckoEditingOptions();
</span><span class="cx" style="display: block; padding: 0 10px">                        addBrAfterLastLinks();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        removeGhostSelection();
</del><span class="cx" style="display: block; padding: 0 10px">                         showBrokenImageIcon();
</span><span class="cx" style="display: block; padding: 0 10px">                        blockCmdArrowNavigation();
</span><span class="cx" style="display: block; padding: 0 10px">                        disableBackspaceIntoATable();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29503,6 +32288,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        function bindEventDelegate(editor, eventName) {
</span><span class="cx" style="display: block; padding: 0 10px">                var eventRootElm = getEventTarget(editor, eventName), delegate;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function isListening(editor) {
+                       return !editor.hidden && !editor.readonly;
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (!editor.delegates) {
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.delegates = {};
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29540,7 +32329,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        var body = editors[i].getBody();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (body === target || DOM.isChildOf(target, body)) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                if (!editors[i].hidden) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (isListening(editors[i])) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         editors[i].fire(eventName, e);
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29551,7 +32340,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        DOM.bind(eventRootElm, eventName, delegate);
</span><span class="cx" style="display: block; padding: 0 10px">                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        delegate = function(e) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (!editor.hidden) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (isListening(editor)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         editor.fire(eventName, e);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        };
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29584,10 +32373,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                toggleNativeEvent: function(name, state) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (self.settings.readonly) {
-                               return;
-                       }
-
</del><span class="cx" style="display: block; padding: 0 10px">                         // Never bind focus/blur since the FocusManager fakes those
</span><span class="cx" style="display: block; padding: 0 10px">                        if (name == "focus" || name == "blur") {
</span><span class="cx" style="display: block; padding: 0 10px">                                return;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29641,6 +32426,63 @@
</span><span class="cx" style="display: block; padding: 0 10px">        return EditorObservable;
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/Mode.js
+
+/**
+ * Mode.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Mode switcher logic.
+ *
+ * @private
+ * @class tinymce.Mode
+ */
+define("tinymce/Mode", [], function() {
+       function setEditorCommandState(editor, cmd, state) {
+               try {
+                       editor.getDoc().execCommand(cmd, false, state);
+               } catch (ex) {
+                       // Ignore
+               }
+       }
+
+       function setMode(editor, mode) {
+               var currentMode = editor.readonly ? 'readonly' : 'design';
+
+               if (mode == currentMode) {
+                       return;
+               }
+
+               if (mode == 'readonly') {
+                       editor.selection.controlSelection.hideResizeRect();
+                       editor.readonly = true;
+                       editor.getBody().contentEditable = false;
+               } else {
+                       editor.readonly = false;
+                       editor.getBody().contentEditable = true;
+                       setEditorCommandState(editor, "StyleWithCSS", false);
+                       setEditorCommandState(editor, "enableInlineTableEditing", false);
+                       setEditorCommandState(editor, "enableObjectResizing", false);
+                       editor.focus();
+                       editor.nodeChanged();
+               }
+
+               // Event is NOT preventable
+               editor.fire('SwitchMode', {mode: mode});
+       }
+
+       return {
+               setMode: setMode
+       };
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/Shortcuts.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29816,239 +32658,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// Included from: js/tinymce/classes/util/Promise.js
-
-/**
- * Promise.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
- *
- * Promise polyfill under MIT license: https://github.com/taylorhakes/promise-polyfill
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/* eslint-disable */
-/* jshint ignore:start */
-
-/**
- * Modifed to be a feature fill and wrapped as tinymce module.
- */
-define("tinymce/util/Promise", [], function() {
-       if (window.Promise) {
-               return window.Promise;
-       }
-
-       // Use polyfill for setImmediate for performance gains
-       var asap = Promise.immediateFn || (typeof setImmediate === 'function' && setImmediate) ||
-               function(fn) { setTimeout(fn, 1); };
-
-       // Polyfill for Function.prototype.bind
-       function bind(fn, thisArg) {
-               return function() {
-                       fn.apply(thisArg, arguments);
-               };
-       }
-
-       var isArray = Array.isArray || function(value) { return Object.prototype.toString.call(value) === "[object Array]"; };
-
-       function Promise(fn) {
-               if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new');
-               if (typeof fn !== 'function') throw new TypeError('not a function');
-               this._state = null;
-               this._value = null;
-               this._deferreds = [];
-
-               doResolve(fn, bind(resolve, this), bind(reject, this));
-       }
-
-       function handle(deferred) {
-               var me = this;
-               if (this._state === null) {
-                       this._deferreds.push(deferred);
-                       return;
-               }
-               asap(function() {
-                       var cb = me._state ? deferred.onFulfilled : deferred.onRejected;
-                       if (cb === null) {
-                               (me._state ? deferred.resolve : deferred.reject)(me._value);
-                               return;
-                       }
-                       var ret;
-                       try {
-                               ret = cb(me._value);
-                       }
-                       catch (e) {
-                               deferred.reject(e);
-                               return;
-                       }
-                       deferred.resolve(ret);
-               });
-       }
-
-       function resolve(newValue) {
-               try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
-                       if (newValue === this) throw new TypeError('A promise cannot be resolved with itself.');
-                       if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
-                               var then = newValue.then;
-                               if (typeof then === 'function') {
-                                       doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));
-                                       return;
-                               }
-                       }
-                       this._state = true;
-                       this._value = newValue;
-                       finale.call(this);
-               } catch (e) { reject.call(this, e); }
-       }
-
-       function reject(newValue) {
-               this._state = false;
-               this._value = newValue;
-               finale.call(this);
-       }
-
-       function finale() {
-               for (var i = 0, len = this._deferreds.length; i < len; i++) {
-                       handle.call(this, this._deferreds[i]);
-               }
-               this._deferreds = null;
-       }
-
-       function Handler(onFulfilled, onRejected, resolve, reject){
-               this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
-               this.onRejected = typeof onRejected === 'function' ? onRejected : null;
-               this.resolve = resolve;
-               this.reject = reject;
-       }
-
-       /**
-        * Take a potentially misbehaving resolver function and make sure
-        * onFulfilled and onRejected are only called once.
-        *
-        * Makes no guarantees about asynchrony.
-        */
-       function doResolve(fn, onFulfilled, onRejected) {
-               var done = false;
-               try {
-                       fn(function (value) {
-                               if (done) return;
-                               done = true;
-                               onFulfilled(value);
-                       }, function (reason) {
-                               if (done) return;
-                               done = true;
-                               onRejected(reason);
-                       });
-               } catch (ex) {
-                       if (done) return;
-                       done = true;
-                       onRejected(ex);
-               }
-       }
-
-       Promise.prototype['catch'] = function (onRejected) {
-               return this.then(null, onRejected);
-       };
-
-       Promise.prototype.then = function(onFulfilled, onRejected) {
-               var me = this;
-               return new Promise(function(resolve, reject) {
-                       handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));
-               });
-       };
-
-       Promise.all = function () {
-               var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);
-
-               return new Promise(function (resolve, reject) {
-                       if (args.length === 0) return resolve([]);
-                       var remaining = args.length;
-                       function res(i, val) {
-                               try {
-                                       if (val && (typeof val === 'object' || typeof val === 'function')) {
-                                               var then = val.then;
-                                               if (typeof then === 'function') {
-                                                       then.call(val, function (val) { res(i, val); }, reject);
-                                                       return;
-                                               }
-                                       }
-                                       args[i] = val;
-                                       if (--remaining === 0) {
-                                               resolve(args);
-                                       }
-                               } catch (ex) {
-                                       reject(ex);
-                               }
-                       }
-                       for (var i = 0; i < args.length; i++) {
-                               res(i, args[i]);
-                       }
-               });
-       };
-
-       Promise.resolve = function (value) {
-               if (value && typeof value === 'object' && value.constructor === Promise) {
-                       return value;
-               }
-
-               return new Promise(function (resolve) {
-                       resolve(value);
-               });
-       };
-
-       Promise.reject = function (value) {
-               return new Promise(function (resolve, reject) {
-                       reject(value);
-               });
-       };
-
-       Promise.race = function (values) {
-               return new Promise(function (resolve, reject) {
-                       for(var i = 0, len = values.length; i < len; i++) {
-                               values[i].then(resolve, reject);
-                       }
-               });
-       };
-
-       return Promise;
-});
-
-/* jshint ignore:end */
-/* eslint-enable */
-
-// Included from: js/tinymce/classes/util/Fun.js
-
-/**
- * Fun.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Functional utility class.
- *
- * @private
- * @class tinymce.util.Fun
- */
-define("tinymce/util/Fun", [], function() {
-       function constant(value) {
-               return function() {
-                       return value;
-               };
-       }
-
-       return {
-               constant: constant
-       };
-});
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/file/Uploader.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30120,16 +32729,25 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        };
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                function defaultHandler(blobInfo, success, failure) {
-                       var xhr, formData;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function defaultHandler(blobInfo, success, failure, openNotification) {
+                       var xhr, formData, notification;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        xhr = new XMLHttpRequest();
</span><span class="cx" style="display: block; padding: 0 10px">                        xhr.open('POST', settings.url);
</span><span class="cx" style="display: block; padding: 0 10px">                        xhr.withCredentials = settings.credentials;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        notification = openNotification();
+
+                       xhr.upload.onprogress = function(e) {
+                               var percentLoaded = Math.round(e.loaded / e.total * 100);
+                               notification.progressBar.value(percentLoaded);
+                       };
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         xhr.onload = function() {
</span><span class="cx" style="display: block; padding: 0 10px">                                var json;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                notification.close();
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (xhr.status != 200) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        failure("HTTP Error: " + xhr.status);
</span><span class="cx" style="display: block; padding: 0 10px">                                        return;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30151,16 +32769,36 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        xhr.send(formData);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                function upload(blobInfos) {
-                       var promises;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function noUpload() {
+                       return new Promise(function(resolve) {
+                               resolve([]);
+                       });
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // If no url is configured then resolve
-                       if (!settings.url && settings.handler === defaultHandler) {
-                               return new Promise(function(resolve) {
-                                       resolve([]);
-                               });
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function interpretResult(promise) {
+                       return promise.then(function(result) {
+                               return result;
+                       })['catch'](function(error) {
+                               return error;
+                       });
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function registerPromise(handler, id, blobInfo) {
+                       var response = handler(blobInfo);
+                       var promise = interpretResult(response);
+                       delete cachedPromises[id];
+                       cachedPromises[id] = promise;
+                       return promise;
+               }
+
+               function collectUploads(blobInfos, uploadBlobInfo) {
+                       return Tools.map(blobInfos, function(blobInfo) {
+                               var id = blobInfo.id();
+                               return cachedPromises[id] ? cachedPromises[id] : registerPromise(uploadBlobInfo, id, blobInfo);
+                       });
+               }
+
+               function uploadBlobs(blobInfos, openNotification) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         function uploadBlobInfo(blobInfo) {
</span><span class="cx" style="display: block; padding: 0 10px">                                return new Promise(function(resolve) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        var handler = settings.handler;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30178,35 +32816,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        status: false,
</span><span class="cx" style="display: block; padding: 0 10px">                                                        error: failure
</span><span class="cx" style="display: block; padding: 0 10px">                                                });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 }, openNotification);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 });
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        promises = Tools.map(blobInfos, function(blobInfo) {
-                               var newPromise, id = blobInfo.id();
-
-                               if (cachedPromises[id]) {
-                                       return cachedPromises[id];
-                               }
-
-                               newPromise = uploadBlobInfo(blobInfo).then(function(result) {
-                                       delete cachedPromises[id];
-                                       return result;
-                               })['catch'](function(error) {
-                                       delete cachedPromises[id];
-                                       return error;
-                               });
-
-                               cachedPromises[id] = newPromise;
-
-                               return newPromise;
-                       });
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var promises = collectUploads(blobInfos, uploadBlobInfo);
</ins><span class="cx" style="display: block; padding: 0 10px">                         return Promise.all(promises);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function upload(blobInfos, openNotification) {
+                       return (!settings.url && settings.handler === defaultHandler) ? noUpload() : uploadBlobs(blobInfos, openNotification);
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 settings = Tools.extend({
</span><span class="cx" style="display: block; padding: 0 10px">                        credentials: false,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        // We are adding a notify argument to this (at the moment, until it doesn't work)
</ins><span class="cx" style="display: block; padding: 0 10px">                         handler: defaultHandler
</span><span class="cx" style="display: block; padding: 0 10px">                }, settings);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30346,15 +32970,16 @@
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/file/ImageScanner", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Promise",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Arr",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/util/Fun",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/file/Conversions",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-], function(Promise, Arr, Conversions, Env) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+], function(Promise, Arr, Fun, Conversions, Env) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var count = 0;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        return function(blobCache) {
</span><span class="cx" style="display: block; padding: 0 10px">                var cachedPromises = {};
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                function findAll(elm) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function findAll(elm, predicate) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         var images, promises;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function imageToBlobInfo(img, resolve) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30398,6 +33023,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (!predicate) {
+                               predicate = Fun.constant(true);
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         images = Arr.filter(elm.getElementsByTagName('img'), function(img) {
</span><span class="cx" style="display: block; padding: 0 10px">                                var src = img.src;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30417,7 +33046,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                return src.indexOf('data:') === 0 || src.indexOf('blob:') === 0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (src.indexOf('blob:') === 0) {
+                                       return true;
+                               }
+
+                               if (src.indexOf('data:') === 0) {
+                                       return predicate(img);
+                               }
+
+                               return false;
</ins><span class="cx" style="display: block; padding: 0 10px">                         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        promises = Arr.map(images, function(img) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30560,7 +33197,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/file/BlobCache"
</span><span class="cx" style="display: block; padding: 0 10px"> ], function(Arr, Uploader, ImageScanner, BlobCache) {
</span><span class="cx" style="display: block; padding: 0 10px">        return function(editor) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var blobCache = new BlobCache(), uploader, imageScanner;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         var blobCache = new BlobCache(), uploader, imageScanner, settings = editor.settings;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function aliveGuard(callback) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return function(result) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30601,13 +33238,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                function openNotification() {
+                       return editor.notificationManager.open({
+                               text: editor.translate('Image uploading...'),
+                               type: 'info',
+                               timeout: -1,
+                               progressBar: true
+                       });
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 function uploadImages(callback) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!uploader) {
</span><span class="cx" style="display: block; padding: 0 10px">                                uploader = new Uploader({
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        url: editor.settings.images_upload_url,
-                                       basePath: editor.settings.images_upload_base_path,
-                                       credentials: editor.settings.images_upload_credentials,
-                                       handler: editor.settings.images_upload_handler
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 url: settings.images_upload_url,
+                                       basePath: settings.images_upload_base_path,
+                                       credentials: settings.images_upload_credentials,
+                                       handler: settings.images_upload_handler
</ins><span class="cx" style="display: block; padding: 0 10px">                                 });
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30618,7 +33264,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        return imageInfo.blobInfo;
</span><span class="cx" style="display: block; padding: 0 10px">                                });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                return uploader.upload(blobInfos).then(aliveGuard(function(result) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         return uploader.upload(blobInfos, openNotification).then(aliveGuard(function(result) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         result = Arr.map(result, function(uploadInfo, index) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                var image = imageInfos[index].image;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30645,7 +33291,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function uploadImagesAuto(callback) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (editor.settings.automatic_uploads !== false) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (settings.automatic_uploads !== false) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return uploadImages(callback);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30655,7 +33301,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                imageScanner = new ImageScanner(blobCache);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        return imageScanner.findAll(editor.getBody()).then(aliveGuard(function(result) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 return imageScanner.findAll(editor.getBody(), settings.images_dataimg_filter).then(aliveGuard(function(result) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 Arr.each(result, function(resultItem) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());
</span><span class="cx" style="display: block; padding: 0 10px">                                        resultItem.image.src = resultItem.blobInfo.blobUri();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30718,6 +33364,2087 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/caret/CaretUtils.js
+
+/**
+ * CaretUtils.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Utility functions shared by the caret logic.
+ *
+ * @private
+ * @class tinymce.caret.CaretUtils
+ */
+define("tinymce/caret/CaretUtils", [
+       "tinymce/util/Fun",
+       "tinymce/dom/TreeWalker",
+       "tinymce/dom/NodeType",
+       "tinymce/caret/CaretPosition",
+       "tinymce/caret/CaretContainer",
+       "tinymce/caret/CaretCandidate"
+], function(Fun, TreeWalker, NodeType, CaretPosition, CaretContainer, CaretCandidate) {
+       var isContentEditableTrue = NodeType.isContentEditableTrue,
+               isContentEditableFalse = NodeType.isContentEditableFalse,
+               isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption'),
+               isCaretContainer = CaretContainer.isCaretContainer,
+               curry = Fun.curry,
+               isElement = NodeType.isElement,
+               isCaretCandidate = CaretCandidate.isCaretCandidate;
+
+       function isForwards(direction) {
+               return direction > 0;
+       }
+
+       function isBackwards(direction) {
+               return direction < 0;
+       }
+
+       function findNode(node, direction, predicateFn, rootNode, shallow) {
+               var walker = new TreeWalker(node, rootNode);
+
+               if (isBackwards(direction)) {
+                       if (isContentEditableFalse(node)) {
+                               node = walker.prev(true);
+                               if (predicateFn(node)) {
+                                       return node;
+                               }
+                       }
+
+                       while ((node = walker.prev(shallow))) {
+                               if (predicateFn(node)) {
+                                       return node;
+                               }
+                       }
+               }
+
+               if (isForwards(direction)) {
+                       if (isContentEditableFalse(node)) {
+                               node = walker.next(true);
+                               if (predicateFn(node)) {
+                                       return node;
+                               }
+                       }
+
+                       while ((node = walker.next(shallow))) {
+                               if (predicateFn(node)) {
+                                       return node;
+                               }
+                       }
+               }
+
+               return null;
+       }
+
+       function getEditingHost(node, rootNode) {
+               for (node = node.parentNode; node && node != rootNode; node = node.parentNode) {
+                       if (isContentEditableTrue(node)) {
+                               return node;
+                       }
+               }
+
+               return rootNode;
+       }
+
+       function getParentBlock(node, rootNode) {
+               while (node && node != rootNode) {
+                       if (isBlockLike(node)) {
+                               return node;
+                       }
+
+                       node = node.parentNode;
+               }
+
+               return null;
+       }
+
+       function isInSameBlock(caretPosition1, caretPosition2, rootNode) {
+               return getParentBlock(caretPosition1.container(), rootNode) == getParentBlock(caretPosition2.container(), rootNode);
+       }
+
+       function isInSameEditingHost(caretPosition1, caretPosition2, rootNode) {
+               return getEditingHost(caretPosition1.container(), rootNode) == getEditingHost(caretPosition2.container(), rootNode);
+       }
+
+       function getChildNodeAtRelativeOffset(relativeOffset, caretPosition) {
+               var container, offset;
+
+               if (!caretPosition) {
+                       return null;
+               }
+
+               container = caretPosition.container();
+               offset = caretPosition.offset();
+
+               if (!isElement(container)) {
+                       return null;
+               }
+
+               return container.childNodes[offset + relativeOffset];
+       }
+
+       function beforeAfter(before, node) {
+               var range = node.ownerDocument.createRange();
+
+               if (before) {
+                       range.setStartBefore(node);
+                       range.setEndBefore(node);
+               } else {
+                       range.setStartAfter(node);
+                       range.setEndAfter(node);
+               }
+
+               return range;
+       }
+
+       function isNodesInSameBlock(rootNode, node1, node2) {
+               return getParentBlock(node1, rootNode) == getParentBlock(node2, rootNode);
+       }
+
+       function lean(left, rootNode, node) {
+               var sibling, siblingName;
+
+               if (left) {
+                       siblingName = 'previousSibling';
+               } else {
+                       siblingName = 'nextSibling';
+               }
+
+               while (node && node != rootNode) {
+                       sibling = node[siblingName];
+
+                       if (isCaretContainer(sibling)) {
+                               sibling = sibling[siblingName];
+                       }
+
+                       if (isContentEditableFalse(sibling)) {
+                               if (isNodesInSameBlock(rootNode, sibling, node)) {
+                                       return sibling;
+                               }
+
+                               break;
+                       }
+
+                       if (isCaretCandidate(sibling)) {
+                               break;
+                       }
+
+                       node = node.parentNode;
+               }
+
+               return null;
+       }
+
+       var before = curry(beforeAfter, true);
+       var after = curry(beforeAfter, false);
+
+       function normalizeRange(direction, rootNode, range) {
+               var node, container, offset, location;
+               var leanLeft = curry(lean, true, rootNode);
+               var leanRight = curry(lean, false, rootNode);
+
+               container = range.startContainer;
+               offset = range.startOffset;
+
+               if (CaretContainer.isCaretContainerBlock(container)) {
+                       if (!isElement(container)) {
+                               container = container.parentNode;
+                       }
+
+                       location = container.getAttribute('data-mce-caret');
+
+                       if (location == 'before') {
+                               node = container.nextSibling;
+                               if (isContentEditableFalse(node)) {
+                                       return before(node);
+                               }
+                       }
+
+                       if (location == 'after') {
+                               node = container.previousSibling;
+                               if (isContentEditableFalse(node)) {
+                                       return after(node);
+                               }
+                       }
+               }
+
+               if (!range.collapsed) {
+                       return range;
+               }
+
+               if (NodeType.isText(container)) {
+                       if (isCaretContainer(container)) {
+                               if (direction === 1) {
+                                       node = leanRight(container);
+                                       if (node) {
+                                               return before(node);
+                                       }
+
+                                       node = leanLeft(container);
+                                       if (node) {
+                                               return after(node);
+                                       }
+                               }
+
+                               if (direction === -1) {
+                                       node = leanLeft(container);
+                                       if (node) {
+                                               return after(node);
+                                       }
+
+                                       node = leanRight(container);
+                                       if (node) {
+                                               return before(node);
+                                       }
+                               }
+
+                               return range;
+                       }
+
+                       if (CaretContainer.endsWithCaretContainer(container) && offset >= container.data.length - 1) {
+                               if (direction === 1) {
+                                       node = leanRight(container);
+                                       if (node) {
+                                               return before(node);
+                                       }
+                               }
+
+                               return range;
+                       }
+
+                       if (CaretContainer.startsWithCaretContainer(container) && offset <= 1) {
+                               if (direction === -1) {
+                                       node = leanLeft(container);
+                                       if (node) {
+                                               return after(node);
+                                       }
+                               }
+
+                               return range;
+                       }
+
+                       if (offset === container.data.length) {
+                               node = leanRight(container);
+                               if (node) {
+                                       return before(node);
+                               }
+
+                               return range;
+                       }
+
+                       if (offset === 0) {
+                               node = leanLeft(container);
+                               if (node) {
+                                       return after(node);
+                               }
+
+                               return range;
+                       }
+               }
+
+               return range;
+       }
+
+       function isNextToContentEditableFalse(relativeOffset, caretPosition) {
+               return isContentEditableFalse(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));
+       }
+
+       return {
+               isForwards: isForwards,
+               isBackwards: isBackwards,
+               findNode: findNode,
+               getEditingHost: getEditingHost,
+               getParentBlock: getParentBlock,
+               isInSameBlock: isInSameBlock,
+               isInSameEditingHost: isInSameEditingHost,
+               isBeforeContentEditableFalse: curry(isNextToContentEditableFalse, 0),
+               isAfterContentEditableFalse: curry(isNextToContentEditableFalse, -1),
+               normalizeRange: normalizeRange
+       };
+});
+
+// Included from: js/tinymce/classes/caret/CaretWalker.js
+
+/**
+ * CaretWalker.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic for moving around a virtual caret in logical order within a DOM element.
+ *
+ * It ignores the most obvious invalid caret locations such as within a script element or within a
+ * contentEditable=false element but it will return locations that isn't possible to render visually.
+ *
+ * @private
+ * @class tinymce.caret.CaretWalker
+ * @example
+ * var caretWalker = new CaretWalker(rootElm);
+ *
+ * var prevLogicalCaretPosition = caretWalker.prev(CaretPosition.fromRangeStart(range));
+ * var nextLogicalCaretPosition = caretWalker.next(CaretPosition.fromRangeEnd(range));
+ */
+define("tinymce/caret/CaretWalker", [
+       "tinymce/dom/NodeType",
+       "tinymce/caret/CaretCandidate",
+       "tinymce/caret/CaretPosition",
+       "tinymce/caret/CaretUtils",
+       "tinymce/util/Arr",
+       "tinymce/util/Fun"
+], function(NodeType, CaretCandidate, CaretPosition, CaretUtils, Arr, Fun) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse,
+               isText = NodeType.isText,
+               isElement = NodeType.isElement,
+               isForwards = CaretUtils.isForwards,
+               isBackwards = CaretUtils.isBackwards,
+               isCaretCandidate = CaretCandidate.isCaretCandidate,
+               isAtomic = CaretCandidate.isAtomic,
+               isEditableCaretCandidate = CaretCandidate.isEditableCaretCandidate;
+
+       function getParents(node, rootNode) {
+               var parents = [];
+
+               while (node && node != rootNode) {
+                       parents.push(node);
+                       node = node.parentNode;
+               }
+
+               return parents;
+       }
+
+       function nodeAtIndex(container, offset) {
+               if (container.hasChildNodes() && offset < container.childNodes.length) {
+                       return container.childNodes[offset];
+               }
+
+               return null;
+       }
+
+       function getCaretCandidatePosition(direction, node) {
+               if (isForwards(direction)) {
+                       if (isCaretCandidate(node.previousSibling) && !isText(node.previousSibling)) {
+                               return CaretPosition.before(node);
+                       }
+
+                       if (isText(node)) {
+                               return CaretPosition(node, 0);
+                       }
+               }
+
+               if (isBackwards(direction)) {
+                       if (isCaretCandidate(node.nextSibling) && !isText(node.nextSibling)) {
+                               return CaretPosition.after(node);
+                       }
+
+                       if (isText(node)) {
+                               return CaretPosition(node, node.data.length);
+                       }
+               }
+
+               if (isBackwards(direction)) {
+                       return CaretPosition.after(node);
+               }
+
+               return CaretPosition.before(node);
+       }
+
+       function findCaretPosition(direction, startCaretPosition, rootNode) {
+               var container, offset, node, nextNode, innerNode,
+                       rootContentEditableFalseElm, caretPosition;
+
+               if (!isElement(rootNode) || !startCaretPosition) {
+                       return null;
+               }
+
+               caretPosition = startCaretPosition;
+               container = caretPosition.container();
+               offset = caretPosition.offset();
+
+               if (isText(container)) {
+                       if (isBackwards(direction) && offset > 0) {
+                               return CaretPosition(container, --offset);
+                       }
+
+                       if (isForwards(direction) && offset < container.length) {
+                               return CaretPosition(container, ++offset);
+                       }
+
+                       node = container;
+               } else {
+                       if (isBackwards(direction) && offset > 0) {
+                               nextNode = nodeAtIndex(container, offset - 1);
+                               if (isCaretCandidate(nextNode)) {
+                                       if (!isAtomic(nextNode)) {
+                                               innerNode = CaretUtils.findNode(nextNode, direction, isEditableCaretCandidate, nextNode);
+                                               if (innerNode) {
+                                                       if (isText(innerNode)) {
+                                                               return CaretPosition(innerNode, innerNode.data.length);
+                                                       }
+
+                                                       return CaretPosition.after(innerNode);
+                                               }
+                                       }
+
+                                       if (isText(nextNode)) {
+                                               return CaretPosition(nextNode, nextNode.data.length);
+                                       }
+
+                                       return CaretPosition.before(nextNode);
+                               }
+                       }
+
+                       if (isForwards(direction) && offset < container.childNodes.length) {
+                               nextNode = nodeAtIndex(container, offset);
+                               if (isCaretCandidate(nextNode)) {
+                                       if (!isAtomic(nextNode)) {
+                                               innerNode = CaretUtils.findNode(nextNode, direction, isEditableCaretCandidate, nextNode);
+                                               if (innerNode) {
+                                                       if (isText(innerNode)) {
+                                                               return CaretPosition(innerNode, 0);
+                                                       }
+
+                                                       return CaretPosition.before(innerNode);
+                                               }
+                                       }
+
+                                       if (isText(nextNode)) {
+                                               return CaretPosition(nextNode, 0);
+                                       }
+
+                                       return CaretPosition.after(nextNode);
+                               }
+                       }
+
+                       node = caretPosition.getNode();
+               }
+
+               if ((isForwards(direction) && caretPosition.isAtEnd()) || (isBackwards(direction) && caretPosition.isAtStart())) {
+                       node = CaretUtils.findNode(node, direction, Fun.constant(true), rootNode, true);
+                       if (isEditableCaretCandidate(node)) {
+                               return getCaretCandidatePosition(direction, node);
+                       }
+               }
+
+               nextNode = CaretUtils.findNode(node, direction, isEditableCaretCandidate, rootNode);
+
+               rootContentEditableFalseElm = Arr.last(Arr.filter(getParents(container, rootNode), isContentEditableFalse));
+               if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {
+                       if (isForwards(direction)) {
+                               caretPosition = CaretPosition.after(rootContentEditableFalseElm);
+                       } else {
+                               caretPosition = CaretPosition.before(rootContentEditableFalseElm);
+                       }
+
+                       return caretPosition;
+               }
+
+               if (nextNode) {
+                       return getCaretCandidatePosition(direction, nextNode);
+               }
+
+               return null;
+       }
+
+       return function(rootNode) {
+               return {
+                       /**
+                        * Returns the next logical caret position from the specificed input
+                        * caretPoisiton or null if there isn't any more positions left for example
+                        * at the end specified root element.
+                        *
+                        * @method next
+                        * @param {tinymce.caret.CaretPosition} caretPosition Caret position to start from.
+                        * @return {tinymce.caret.CaretPosition} CaretPosition or null if no position was found.
+                        */
+                       next: function(caretPosition) {
+                               return findCaretPosition(1, caretPosition, rootNode);
+                       },
+
+                       /**
+                        * Returns the previous logical caret position from the specificed input
+                        * caretPoisiton or null if there isn't any more positions left for example
+                        * at the end specified root element.
+                        *
+                        * @method prev
+                        * @param {tinymce.caret.CaretPosition} caretPosition Caret position to start from.
+                        * @return {tinymce.caret.CaretPosition} CaretPosition or null if no position was found.
+                        */
+                       prev: function(caretPosition) {
+                               return findCaretPosition(-1, caretPosition, rootNode);
+                       }
+               };
+       };
+});
+
+// Included from: js/tinymce/classes/caret/FakeCaret.js
+
+/**
+ * FakeCaret.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic for rendering a fake visual caret.
+ *
+ * @private
+ * @class tinymce.caret.FakeCaret
+ */
+define("tinymce/caret/FakeCaret", [
+       "tinymce/caret/CaretContainer",
+       "tinymce/caret/CaretPosition",
+       "tinymce/dom/NodeType",
+       "tinymce/dom/RangeUtils",
+       "tinymce/dom/DomQuery",
+       "tinymce/geom/ClientRect",
+       "tinymce/util/Delay"
+], function(CaretContainer, CaretPosition, NodeType, RangeUtils, $, ClientRect, Delay) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse;
+
+       return function(rootNode, isBlock) {
+               var cursorInterval, $lastVisualCaret, caretContainerNode;
+
+               function getAbsoluteClientRect(node, before) {
+                       var clientRect = ClientRect.collapse(node.getBoundingClientRect(), before),
+                               docElm, scrollX, scrollY, margin, rootRect;
+
+                       if (rootNode.tagName == 'BODY') {
+                               docElm = rootNode.ownerDocument.documentElement;
+                               scrollX = rootNode.scrollLeft || docElm.scrollLeft;
+                               scrollY = rootNode.scrollTop || docElm.scrollTop;
+                       } else {
+                               rootRect = rootNode.getBoundingClientRect();
+                               scrollX = rootNode.scrollLeft - rootRect.left;
+                               scrollY = rootNode.scrollTop - rootRect.top;
+                       }
+
+                       clientRect.left += scrollX;
+                       clientRect.right += scrollX;
+                       clientRect.top += scrollY;
+                       clientRect.bottom += scrollY;
+                       clientRect.width = 1;
+
+                       margin = node.offsetWidth - node.clientWidth;
+
+                       if (margin > 0) {
+                               if (before) {
+                                       margin *= -1;
+                               }
+
+                               clientRect.left += margin;
+                               clientRect.right += margin;
+                       }
+
+                       return clientRect;
+               }
+
+               function trimInlineCaretContainers() {
+                       var contentEditableFalseNodes, node, sibling, i, data;
+
+                       contentEditableFalseNodes = $('*[contentEditable=false]', rootNode);
+                       for (i = 0; i < contentEditableFalseNodes.length; i++) {
+                               node = contentEditableFalseNodes[i];
+
+                               sibling = node.previousSibling;
+                               if (CaretContainer.endsWithCaretContainer(sibling)) {
+                                       data = sibling.data;
+
+                                       if (data.length == 1) {
+                                               sibling.parentNode.removeChild(sibling);
+                                       } else {
+                                               sibling.deleteData(data.length - 1, 1);
+                                       }
+                               }
+
+                               sibling = node.nextSibling;
+                               if (CaretContainer.startsWithCaretContainer(sibling)) {
+                                       data = sibling.data;
+
+                                       if (data.length == 1) {
+                                               sibling.parentNode.removeChild(sibling);
+                                       } else {
+                                               sibling.deleteData(0, 1);
+                                       }
+                               }
+                       }
+
+                       return null;
+               }
+
+               function show(before, node) {
+                       var clientRect, rng, container;
+
+                       hide();
+
+                       if (isBlock(node)) {
+                               caretContainerNode = CaretContainer.insertBlock('p', node, before);
+                               clientRect = getAbsoluteClientRect(node, before);
+                               $(caretContainerNode).css('top', clientRect.top);
+
+                               $lastVisualCaret = $('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(clientRect).appendTo(rootNode);
+
+                               if (before) {
+                                       $lastVisualCaret.addClass('mce-visual-caret-before');
+                               }
+
+                               startBlink();
+
+                               rng = node.ownerDocument.createRange();
+                               container = caretContainerNode.firstChild;
+                               rng.setStart(container, 0);
+                               rng.setEnd(container, 1);
+                       } else {
+                               caretContainerNode = CaretContainer.insertInline(node, before);
+                               rng = node.ownerDocument.createRange();
+
+                               if (isContentEditableFalse(caretContainerNode.nextSibling)) {
+                                       rng.setStart(caretContainerNode, 0);
+                                       rng.setEnd(caretContainerNode, 0);
+                               } else {
+                                       rng.setStart(caretContainerNode, 1);
+                                       rng.setEnd(caretContainerNode, 1);
+                               }
+
+                               return rng;
+                       }
+
+                       return rng;
+               }
+
+               function hide() {
+                       trimInlineCaretContainers();
+
+                       if (caretContainerNode) {
+                               CaretContainer.remove(caretContainerNode);
+                               caretContainerNode = null;
+                       }
+
+                       if ($lastVisualCaret) {
+                               $lastVisualCaret.remove();
+                               $lastVisualCaret = null;
+                       }
+
+                       clearInterval(cursorInterval);
+               }
+
+               function startBlink() {
+                       cursorInterval = Delay.setInterval(function() {
+                               $('div.mce-visual-caret', rootNode).toggleClass('mce-visual-caret-hidden');
+                       }, 500);
+               }
+
+               function destroy() {
+                       Delay.clearInterval(cursorInterval);
+               }
+
+               function getCss() {
+                       return (
+                               '.mce-visual-caret {' +
+                                       'position: absolute;' +
+                                       'background-color: black;' +
+                                       'background-color: currentcolor;' +
+                               '}' +
+                               '.mce-visual-caret-hidden {' +
+                                       'display: none;' +
+                               '}' +
+                               '*[data-mce-caret] {' +
+                                       'position: absolute;' +
+                                       'left: -1000px;' +
+                                       'right: auto;' +
+                                       'top: 0;' +
+                                       'margin: 0;' +
+                                       'padding: 0;' +
+                               '}'
+                       );
+               }
+
+               return {
+                       show: show,
+                       hide: hide,
+                       getCss: getCss,
+                       destroy: destroy
+               };
+       };
+});
+
+// Included from: js/tinymce/classes/dom/Dimensions.js
+
+/**
+ * Dimensions.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module measures nodes and returns client rects. The client rects has an
+ * extra node property.
+ *
+ * @private
+ * @class tinymce.dom.Dimensions
+ */
+define("tinymce/dom/Dimensions", [
+       "tinymce/util/Arr",
+       "tinymce/dom/NodeType",
+       "tinymce/geom/ClientRect"
+], function(Arr, NodeType, ClientRect) {
+
+       function getClientRects(node) {
+               function toArrayWithNode(clientRects) {
+                       return Arr.map(clientRects, function(clientRect) {
+                               clientRect = ClientRect.clone(clientRect);
+                               clientRect.node = node;
+
+                               return clientRect;
+                       });
+               }
+
+               if (Arr.isArray(node)) {
+                       return Arr.reduce(node, function(result, node) {
+                               return result.concat(getClientRects(node));
+                       }, []);
+               }
+
+               if (NodeType.isElement(node)) {
+                       return toArrayWithNode(node.getClientRects());
+               }
+
+               if (NodeType.isText(node)) {
+                       var rng = node.ownerDocument.createRange();
+
+                       rng.setStart(node, 0);
+                       rng.setEnd(node, node.data.length);
+
+                       return toArrayWithNode(rng.getClientRects());
+               }
+       }
+
+       return {
+               /**
+                * Returns the client rects for a specific node.
+                *
+                * @method getClientRects
+                * @param {Array/DOMNode} node Node or array of nodes to get client rects on.
+                * @param {Array} Array of client rects with a extra node property.
+                */
+               getClientRects: getClientRects
+       };
+});
+
+// Included from: js/tinymce/classes/caret/LineWalker.js
+
+/**
+ * LineWalker.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module lets you walk the document line by line
+ * returing nodes and client rects for each line.
+ *
+ * @private
+ * @class tinymce.caret.LineWalker
+ */
+define("tinymce/caret/LineWalker", [
+       "tinymce/util/Fun",
+       "tinymce/util/Arr",
+       "tinymce/dom/Dimensions",
+       "tinymce/caret/CaretCandidate",
+       "tinymce/caret/CaretUtils",
+       "tinymce/caret/CaretWalker",
+       "tinymce/caret/CaretPosition",
+       "tinymce/geom/ClientRect"
+], function(Fun, Arr, Dimensions, CaretCandidate, CaretUtils, CaretWalker, CaretPosition, ClientRect) {
+       var curry = Fun.curry;
+
+       function findUntil(direction, rootNode, predicateFn, node) {
+               while ((node = CaretUtils.findNode(node, direction, CaretCandidate.isEditableCaretCandidate, rootNode))) {
+                       if (predicateFn(node)) {
+                               return;
+                       }
+               }
+       }
+
+       function walkUntil(direction, isAboveFn, isBeflowFn, rootNode, predicateFn, caretPosition) {
+               var line = 0, node, result = [], targetClientRect;
+
+               function add(node) {
+                       var i, clientRect, clientRects;
+
+                       clientRects = Dimensions.getClientRects(node);
+                       if (direction == -1) {
+                               clientRects = clientRects.reverse();
+                       }
+
+                       for (i = 0; i < clientRects.length; i++) {
+                               clientRect = clientRects[i];
+                               if (isBeflowFn(clientRect, targetClientRect)) {
+                                       continue;
+                               }
+
+                               if (result.length > 0 && isAboveFn(clientRect, Arr.last(result))) {
+                                       line++;
+                               }
+
+                               clientRect.line = line;
+
+                               if (predicateFn(clientRect)) {
+                                       return true;
+                               }
+
+                               result.push(clientRect);
+                       }
+               }
+
+               targetClientRect = Arr.last(caretPosition.getClientRects());
+               if (!targetClientRect) {
+                       return result;
+               }
+
+               node = caretPosition.getNode();
+               add(node);
+               findUntil(direction, rootNode, add, node);
+
+               return result;
+       }
+
+       function aboveLineNumber(lineNumber, clientRect) {
+               return clientRect.line > lineNumber;
+       }
+
+       function isLine(lineNumber, clientRect) {
+               return clientRect.line === lineNumber;
+       }
+
+       var upUntil = curry(walkUntil, -1, ClientRect.isAbove, ClientRect.isBelow);
+       var downUntil = curry(walkUntil, 1, ClientRect.isBelow, ClientRect.isAbove);
+
+       function positionsUntil(direction, rootNode, predicateFn, node) {
+               var caretWalker = new CaretWalker(rootNode), walkFn, isBelowFn, isAboveFn,
+                       caretPosition, result = [], line = 0, clientRect, targetClientRect;
+
+               function getClientRect(caretPosition) {
+                       if (direction == 1) {
+                               return Arr.last(caretPosition.getClientRects());
+                       }
+
+                       return Arr.last(caretPosition.getClientRects());
+               }
+
+               if (direction == 1) {
+                       walkFn = caretWalker.next;
+                       isBelowFn = ClientRect.isBelow;
+                       isAboveFn = ClientRect.isAbove;
+                       caretPosition = CaretPosition.after(node);
+               } else {
+                       walkFn = caretWalker.prev;
+                       isBelowFn = ClientRect.isAbove;
+                       isAboveFn = ClientRect.isBelow;
+                       caretPosition = CaretPosition.before(node);
+               }
+
+               targetClientRect = getClientRect(caretPosition);
+
+               do {
+                       if (!caretPosition.isVisible()) {
+                               continue;
+                       }
+
+                       clientRect = getClientRect(caretPosition);
+
+                       if (isAboveFn(clientRect, targetClientRect)) {
+                               continue;
+                       }
+
+                       if (result.length > 0 && isBelowFn(clientRect, Arr.last(result))) {
+                               line++;
+                       }
+
+                       clientRect = ClientRect.clone(clientRect);
+                       clientRect.position = caretPosition;
+                       clientRect.line = line;
+
+                       if (predicateFn(clientRect)) {
+                               return result;
+                       }
+
+                       result.push(clientRect);
+               } while ((caretPosition = walkFn(caretPosition)));
+
+               return result;
+       }
+
+       return {
+               upUntil: upUntil,
+               downUntil: downUntil,
+
+               /**
+                * Find client rects with line and caret position until the predicate returns true.
+                *
+                * @method positionsUntil
+                * @param {Number} direction Direction forward/backward 1/-1.
+                * @param {DOMNode} rootNode Root node to walk within.
+                * @param {function} predicateFn Gets the client rect as it's input.
+                * @param {DOMNode} node Node to start walking from.
+                * @return {Array} Array of client rects with line and position properties.
+                */
+               positionsUntil: positionsUntil,
+
+               isAboveLine: curry(aboveLineNumber),
+               isLine: curry(isLine)
+       };
+});
+
+// Included from: js/tinymce/classes/caret/LineUtils.js
+
+/**
+ * LineUtils.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Utility functions for working with lines.
+ *
+ * @private
+ * @class tinymce.caret.LineUtils
+ */
+define("tinymce/caret/LineUtils", [
+       "tinymce/util/Fun",
+       "tinymce/util/Arr",
+       "tinymce/dom/NodeType",
+       "tinymce/dom/Dimensions",
+       "tinymce/geom/ClientRect",
+       "tinymce/caret/CaretUtils",
+       "tinymce/caret/CaretCandidate"
+], function(Fun, Arr, NodeType, Dimensions, ClientRect, CaretUtils, CaretCandidate) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse,
+               findNode = CaretUtils.findNode,
+               curry = Fun.curry;
+
+       function distanceToRectLeft(clientRect, clientX) {
+               return Math.abs(clientRect.left - clientX);
+       }
+
+       function distanceToRectRight(clientRect, clientX) {
+               return Math.abs(clientRect.right - clientX);
+       }
+
+       function findClosestClientRect(clientRects, clientX) {
+               function isInside(clientX, clientRect) {
+                       return clientX >= clientRect.left && clientX <= clientRect.right;
+               }
+
+               return Arr.reduce(clientRects, function(oldClientRect, clientRect) {
+                       var oldDistance, newDistance;
+
+                       oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));
+                       newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));
+
+                       if (isInside(clientX, clientRect)) {
+                               return clientRect;
+                       }
+
+                       if (isInside(clientX, oldClientRect)) {
+                               return oldClientRect;
+                       }
+
+                       // cE=false has higher priority
+                       if (newDistance == oldDistance && isContentEditableFalse(clientRect.node)) {
+                               return clientRect;
+                       }
+
+                       if (newDistance < oldDistance) {
+                               return clientRect;
+                       }
+
+                       return oldClientRect;
+               });
+       }
+
+       function walkUntil(direction, rootNode, predicateFn, node) {
+               while ((node = findNode(node, direction, CaretCandidate.isEditableCaretCandidate, rootNode))) {
+                       if (predicateFn(node)) {
+                               return;
+                       }
+               }
+       }
+
+       function findLineNodeRects(rootNode, targetNodeRect) {
+               var clientRects = [];
+
+               function collect(checkPosFn, node) {
+                       var lineRects;
+
+                       lineRects = Arr.filter(Dimensions.getClientRects(node), function(clientRect) {
+                               return !checkPosFn(clientRect, targetNodeRect);
+                       });
+
+                       clientRects = clientRects.concat(lineRects);
+
+                       return lineRects.length === 0;
+               }
+
+               clientRects.push(targetNodeRect);
+               walkUntil(-1, rootNode, curry(collect, ClientRect.isAbove), targetNodeRect.node);
+               walkUntil(1, rootNode, curry(collect, ClientRect.isBelow), targetNodeRect.node);
+
+               return clientRects;
+       }
+
+       function getContentEditableFalseChildren(rootNode) {
+               return Arr.filter(Arr.toArray(rootNode.getElementsByTagName('*')), isContentEditableFalse);
+       }
+
+       function caretInfo(clientRect, clientX) {
+               return {
+                       node: clientRect.node,
+                       before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)
+               };
+       }
+
+       function closestCaret(rootNode, clientX, clientY) {
+               var contentEditableFalseNodeRects, closestNodeRect;
+
+               contentEditableFalseNodeRects = Dimensions.getClientRects(getContentEditableFalseChildren(rootNode));
+               contentEditableFalseNodeRects = Arr.filter(contentEditableFalseNodeRects, function(clientRect) {
+                       return clientY >= clientRect.top && clientY <= clientRect.bottom;
+               });
+
+               closestNodeRect = findClosestClientRect(contentEditableFalseNodeRects, clientX);
+               if (closestNodeRect) {
+                       closestNodeRect = findClosestClientRect(findLineNodeRects(rootNode, closestNodeRect), clientX);
+                       if (closestNodeRect && isContentEditableFalse(closestNodeRect.node)) {
+                               return caretInfo(closestNodeRect, clientX);
+                       }
+               }
+
+               return null;
+       }
+
+       return {
+               findClosestClientRect: findClosestClientRect,
+               findLineNodeRects: findLineNodeRects,
+               closestCaret: closestCaret
+       };
+});
+
+// Included from: js/tinymce/classes/DragDropOverrides.js
+
+/**
+ * DragDropOverrides.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic overriding the drag/drop logic of the editor.
+ *
+ * @private
+ * @class tinymce.DragDropOverrides
+ */
+define("tinymce/DragDropOverrides", [
+       "tinymce/dom/NodeType"
+], function(
+       NodeType
+) {
+       var isContentEditableFalse = NodeType.isContentEditableFalse;
+
+       function init(editor) {
+               var $ = editor.$, rootDocument = document,
+                       editableDoc = editor.getDoc(),
+                       dom = editor.dom, state = {};
+
+               function isDraggable(elm) {
+                       return isContentEditableFalse(elm);
+               }
+
+               function setBodyCursor(cursor) {
+                       $(editor.getBody()).css('cursor', cursor);
+               }
+
+               function isValidDropTarget(elm) {
+                       if (elm == state.element || editor.dom.isChildOf(elm, state.element)) {
+                               return false;
+                       }
+
+                       if (isContentEditableFalse(elm)) {
+                               return false;
+                       }
+
+                       return true;
+               }
+
+               function move(e) {
+                       var deltaX, deltaY, pos, viewPort,
+                               overflowX = 0, overflowY = 0, movement,
+                               clientX, clientY, rootClientRect;
+
+                       if (e.button !== 0) {
+                               return;
+                       }
+
+                       deltaX = e.screenX - state.screenX;
+                       deltaY = e.screenY - state.screenY;
+                       movement = Math.max(Math.abs(deltaX), Math.abs(deltaY));
+
+                       if (!state.dragging && movement > 10) {
+                               state.dragging = true;
+                               setBodyCursor('default');
+
+                               state.clone = state.element.cloneNode(true);
+
+                               pos = dom.getPos(state.element);
+                               state.relX = state.clientX - pos.x;
+                               state.relY = state.clientY - pos.y;
+                               state.width = state.element.offsetWidth;
+                               state.height = state.element.offsetHeight;
+
+                               $(state.clone).css({
+                                       width: state.width,
+                                       height: state.height
+                               }).removeAttr('data-mce-selected');
+
+                               state.ghost = $('<div>').css({
+                                       position: 'absolute',
+                                       opacity: 0.5,
+                                       overflow: 'hidden',
+                                       width: state.width,
+                                       height: state.height
+                               }).attr({
+                                       'data-mce-bogus': 'all',
+                                       unselectable: 'on',
+                                       contenteditable: 'false'
+                               }).addClass('mce-drag-container mce-reset').
+                                       append(state.clone).
+                                       appendTo(editor.getBody())[0];
+
+                               viewPort = editor.dom.getViewPort(editor.getWin());
+                               state.maxX = viewPort.w;
+                               state.maxY = viewPort.h;
+                       }
+
+                       if (state.dragging) {
+                               editor.selection.placeCaretAt(e.clientX, e.clientY);
+
+                               clientX = state.clientX + deltaX - state.relX;
+                               clientY = state.clientY + deltaY + 5;
+
+                               if (clientX + state.width > state.maxX) {
+                                       overflowX = (clientX + state.width) - state.maxX;
+                               }
+
+                               if (clientY + state.height > state.maxY) {
+                                       overflowY = (clientY + state.height) - state.maxY;
+                               }
+
+                               if (editor.getBody().nodeName != 'BODY') {
+                                       rootClientRect = editor.getBody().getBoundingClientRect();
+                               } else {
+                                       rootClientRect = {left: 0, top: 0};
+                               }
+
+                               $(state.ghost).css({
+                                       left: clientX - rootClientRect.left,
+                                       top: clientY - rootClientRect.top,
+                                       width: state.width - overflowX,
+                                       height: state.height - overflowY
+                               });
+                       }
+               }
+
+               function drop() {
+                       if (state.dragging) {
+                               // Hack for IE since it doesn't sync W3C Range with IE Specific range
+                               editor.selection.setRng(editor.selection.getSel().getRangeAt(0));
+
+                               if (isValidDropTarget(editor.selection.getNode())) {
+                                       editor.undoManager.transact(function() {
+                                               editor.insertContent(dom.getOuterHTML(state.element));
+                                               $(state.element).remove();
+                                       });
+                               }
+                       }
+
+                       stop();
+               }
+
+               function start(e) {
+                       stop();
+
+                       if (isDraggable(e.target)) {
+                               if (editor.fire('dragstart', {target: e.target}).isDefaultPrevented()) {
+                                       return;
+                               }
+
+                               editor.on('mousemove', move);
+                               editor.on('mouseup', drop);
+
+                               if (rootDocument != editableDoc) {
+                                       dom.bind(rootDocument, 'mousemove', move);
+                                       dom.bind(rootDocument, 'mouseup', drop);
+                               }
+
+                               state = {
+                                       screenX: e.screenX,
+                                       screenY: e.screenY,
+                                       clientX: e.clientX,
+                                       clientY: e.clientY,
+                                       element: e.target
+                               };
+                       }
+               }
+
+               function stop() {
+                       $(state.ghost).remove();
+                       setBodyCursor(null);
+
+                       editor.off('mousemove', move);
+                       editor.off('mouseup', stop);
+
+                       if (rootDocument != editableDoc) {
+                               dom.unbind(rootDocument, 'mousemove', move);
+                               dom.unbind(rootDocument, 'mouseup', stop);
+                       }
+
+                       state = {};
+               }
+
+               editor.on('mousedown', start);
+
+               // Blocks drop inside cE=false on IE
+               editor.on('drop', function(e) {
+                       var realTarget = editor.getDoc().elementFromPoint(e.clientX, e.clientY);
+
+                       if (isContentEditableFalse(realTarget) || isContentEditableFalse(editor.dom.getContentEditableParent(realTarget))) {
+                               e.preventDefault();
+                       }
+               });
+       }
+
+       return {
+               init: init
+       };
+});
+
+// Included from: js/tinymce/classes/SelectionOverrides.js
+
+/**
+ * SelectionOverrides.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This module contains logic overriding the selection with keyboard/mouse
+ * around contentEditable=false regions.
+ *
+ * @example
+ * // Disable the default cE=false selection
+ * tinymce.activeEditor.on('ShowCaret ObjectSelected', function(e) {
+ *     e.preventDefault();
+ * });
+ *
+ * @private
+ * @class tinymce.SelectionOverrides
+ */
+define("tinymce/SelectionOverrides", [
+       "tinymce/Env",
+       "tinymce/caret/CaretWalker",
+       "tinymce/caret/CaretPosition",
+       "tinymce/caret/CaretContainer",
+       "tinymce/caret/CaretUtils",
+       "tinymce/caret/FakeCaret",
+       "tinymce/caret/LineWalker",
+       "tinymce/caret/LineUtils",
+       "tinymce/dom/NodeType",
+       "tinymce/dom/RangeUtils",
+       "tinymce/util/VK",
+       "tinymce/util/Fun",
+       "tinymce/util/Arr",
+       "tinymce/util/Delay",
+       "tinymce/DragDropOverrides"
+], function(
+       Env, CaretWalker, CaretPosition, CaretContainer, CaretUtils, FakeCaret, LineWalker,
+       LineUtils, NodeType, RangeUtils, VK, Fun, Arr, Delay, DragDropOverrides
+) {
+       var curry = Fun.curry,
+               isContentEditableTrue = NodeType.isContentEditableTrue,
+               isContentEditableFalse = NodeType.isContentEditableFalse,
+               isElement = NodeType.isElement,
+               isAfterContentEditableFalse = CaretUtils.isAfterContentEditableFalse,
+               isBeforeContentEditableFalse = CaretUtils.isBeforeContentEditableFalse,
+               getSelectedNode = RangeUtils.getSelectedNode;
+
+       function getVisualCaretPosition(walkFn, caretPosition) {
+               while ((caretPosition = walkFn(caretPosition))) {
+                       if (caretPosition.isVisible()) {
+                               return caretPosition;
+                       }
+               }
+
+               return caretPosition;
+       }
+
+       function SelectionOverrides(editor) {
+               var rootNode = editor.getBody(), caretWalker = new CaretWalker(rootNode);
+               var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);
+               var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev),
+                       fakeCaret = new FakeCaret(editor.getBody(), isBlock),
+                       realSelectionId = 'sel-' + editor.dom.uniqueId(),
+                       selectedContentEditableNode, $ = editor.$;
+
+               function isBlock(node) {
+                       return editor.dom.isBlock(node);
+               }
+
+               function setRange(range) {
+                       //console.log('setRange', range);
+                       if (range) {
+                               editor.selection.setRng(range);
+                       }
+               }
+
+               function getRange() {
+                       return editor.selection.getRng();
+               }
+
+               function scrollIntoView(node, alignToTop) {
+                       editor.selection.scrollIntoView(node, alignToTop);
+               }
+
+               function showCaret(direction, node, before) {
+                       var e;
+
+                       e = editor.fire('ShowCaret', {
+                               target: node,
+                               direction: direction,
+                               before: before
+                       });
+
+                       if (e.isDefaultPrevented()) {
+                               return null;
+                       }
+
+                       scrollIntoView(node, direction === -1);
+
+                       return fakeCaret.show(before, node);
+               }
+
+               function selectNode(node) {
+                       var e;
+
+                       e = editor.fire('ObjectSelected', {target: node});
+                       if (e.isDefaultPrevented()) {
+                               return null;
+                       }
+
+                       fakeCaret.hide();
+                       return getNodeRange(node);
+               }
+
+               function getNodeRange(node) {
+                       var rng = node.ownerDocument.createRange();
+
+                       rng.selectNode(node);
+
+                       return rng;
+               }
+
+               function isMoveInsideSameBlock(fromCaretPosition, toCaretPosition) {
+                       var inSameBlock = CaretUtils.isInSameBlock(fromCaretPosition, toCaretPosition);
+
+                       // Handle bogus BR <p>abc|<br></p>
+                       if (!inSameBlock && NodeType.isBr(fromCaretPosition.getNode())) {
+                               return true;
+                       }
+
+                       return inSameBlock;
+               }
+
+               function getNormalizedRangeEndPoint(direction, range) {
+                       range = CaretUtils.normalizeRange(direction, rootNode, range);
+
+                       if (direction == -1) {
+                               return CaretPosition.fromRangeStart(range);
+                       }
+
+                       return CaretPosition.fromRangeEnd(range);
+               }
+
+               function isRangeInCaretContainerBlock(range) {
+                       return CaretContainer.isCaretContainerBlock(range.startContainer);
+               }
+
+               function moveToCeFalseHorizontally(direction, getNextPosFn, isBeforeContentEditableFalseFn, range) {
+                       var node, caretPosition, peekCaretPosition, rangeIsInContainerBlock;
+
+                       if (!range.collapsed) {
+                               node = getSelectedNode(range);
+                               if (isContentEditableFalse(node)) {
+                                       return showCaret(direction, node, direction == -1);
+                               }
+                       }
+
+                       rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);
+                       caretPosition = getNormalizedRangeEndPoint(direction, range);
+
+                       if (isBeforeContentEditableFalseFn(caretPosition)) {
+                               return selectNode(caretPosition.getNode(direction == -1));
+                       }
+
+                       caretPosition = getNextPosFn(caretPosition);
+                       if (!caretPosition) {
+                               if (rangeIsInContainerBlock) {
+                                       return range;
+                               }
+
+                               return null;
+                       }
+
+                       if (isBeforeContentEditableFalseFn(caretPosition)) {
+                               return showCaret(direction, caretPosition.getNode(direction == -1), direction == 1);
+                       }
+
+                       // Peek ahead for handling of ab|c<span cE=false> -> abc|<span cE=false>
+                       peekCaretPosition = getNextPosFn(caretPosition);
+                       if (isBeforeContentEditableFalseFn(peekCaretPosition)) {
+                               if (isMoveInsideSameBlock(caretPosition, peekCaretPosition)) {
+                                       return showCaret(direction, peekCaretPosition.getNode(direction == -1), direction == 1);
+                               }
+                       }
+
+                       if (rangeIsInContainerBlock) {
+                               return renderRangeCaret(caretPosition.toRange());
+                       }
+
+                       return null;
+               }
+
+               function moveToCeFalseVertically(direction, walkerFn, range) {
+                       var caretPosition, linePositions, nextLinePositions,
+                               closestNextLineRect, caretClientRect, clientX,
+                               dist1, dist2, contentEditableFalseNode;
+
+                       contentEditableFalseNode = getSelectedNode(range);
+                       caretPosition = getNormalizedRangeEndPoint(direction, range);
+                       linePositions = walkerFn(rootNode, LineWalker.isAboveLine(1), caretPosition);
+                       nextLinePositions = Arr.filter(linePositions, LineWalker.isLine(1));
+                       caretClientRect = Arr.last(caretPosition.getClientRects());
+
+                       if (isBeforeContentEditableFalse(caretPosition)) {
+                               contentEditableFalseNode = caretPosition.getNode();
+                       }
+
+                       if (isAfterContentEditableFalse(caretPosition)) {
+                               contentEditableFalseNode = caretPosition.getNode(true);
+                       }
+
+                       if (!caretClientRect) {
+                               return null;
+                       }
+
+                       clientX = caretClientRect.left;
+
+                       closestNextLineRect = LineUtils.findClosestClientRect(nextLinePositions, clientX);
+                       if (closestNextLineRect) {
+                               if (isContentEditableFalse(closestNextLineRect.node)) {
+                                       dist1 = Math.abs(clientX - closestNextLineRect.left);
+                                       dist2 = Math.abs(clientX - closestNextLineRect.right);
+
+                                       return showCaret(direction, closestNextLineRect.node, dist1 < dist2);
+                               }
+                       }
+
+                       if (contentEditableFalseNode) {
+                               var caretPositions = LineWalker.positionsUntil(direction, rootNode, LineWalker.isAboveLine(1), contentEditableFalseNode);
+
+                               closestNextLineRect = LineUtils.findClosestClientRect(Arr.filter(caretPositions, LineWalker.isLine(1)), clientX);
+                               if (closestNextLineRect) {
+                                       return renderRangeCaret(closestNextLineRect.position.toRange());
+                               }
+
+                               closestNextLineRect = Arr.last(Arr.filter(caretPositions, LineWalker.isLine(0)));
+                               if (closestNextLineRect) {
+                                       return renderRangeCaret(closestNextLineRect.position.toRange());
+                               }
+                       }
+               }
+
+               function exitPreBlock(direction, range) {
+                       var pre, caretPos, newBlock;
+
+                       function createTextBlock() {
+                               var textBlock = editor.dom.create(editor.settings.forced_root_block);
+
+                               if (!Env.ie || Env.ie >= 11) {
+                                       textBlock.innerHTML = '<br data-mce-bogus="1">';
+                               }
+
+                               return textBlock;
+                       }
+
+                       if (range.collapsed && editor.settings.forced_root_block) {
+                               pre = editor.dom.getParent(range.startContainer, 'PRE');
+                               if (!pre) {
+                                       return;
+                               }
+
+                               if (direction == 1) {
+                                       caretPos = getNextVisualCaretPosition(CaretPosition.fromRangeStart(range));
+                               } else {
+                                       caretPos = getPrevVisualCaretPosition(CaretPosition.fromRangeStart(range));
+                               }
+
+                               if (!caretPos) {
+                                       newBlock = createTextBlock();
+
+                                       if (direction == 1) {
+                                               editor.$(pre).after(newBlock);
+                                       } else {
+                                               editor.$(pre).before(newBlock);
+                                       }
+
+                                       editor.selection.select(newBlock, true);
+                                       editor.selection.collapse();
+                               }
+                       }
+               }
+
+               function moveH(direction, getNextPosFn, isBeforeContentEditableFalseFn, range) {
+                       var newRange;
+
+                       newRange = moveToCeFalseHorizontally(direction, getNextPosFn, isBeforeContentEditableFalseFn, range);
+                       if (newRange) {
+                               return newRange;
+                       }
+
+                       newRange = exitPreBlock(direction, range);
+                       if (newRange) {
+                               return newRange;
+                       }
+
+                       return null;
+               }
+
+               function moveV(direction, walkerFn, range) {
+                       var newRange;
+
+                       newRange = moveToCeFalseVertically(direction, walkerFn, range);
+                       if (newRange) {
+                               return newRange;
+                       }
+
+                       newRange = exitPreBlock(direction, range);
+                       if (newRange) {
+                               return newRange;
+                       }
+
+                       return null;
+               }
+
+               function getBlockCaretContainer() {
+                       return $('*[data-mce-caret]')[0];
+               }
+
+               function showBlockCaretContainer(blockCaretContainer) {
+                       blockCaretContainer = $(blockCaretContainer);
+
+                       if (blockCaretContainer.attr('data-mce-caret')) {
+                               fakeCaret.hide();
+                               blockCaretContainer.removeAttr('data-mce-caret');
+                               blockCaretContainer.removeAttr('data-mce-bogus');
+                               blockCaretContainer.removeAttr('style');
+
+                               // Removes control rect on IE
+                               setRange(getRange());
+                               scrollIntoView(blockCaretContainer[0]);
+                       }
+               }
+
+               function renderCaretAtRange(range) {
+                       var caretPosition;
+
+                       range = CaretUtils.normalizeRange(1, rootNode, range);
+                       caretPosition = CaretPosition.fromRangeStart(range);
+
+                       if (isContentEditableFalse(caretPosition.getNode())) {
+                               return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd());
+                       }
+
+                       if (isContentEditableFalse(caretPosition.getNode(true))) {
+                               return showCaret(1, caretPosition.getNode(true), false);
+                       }
+
+                       fakeCaret.hide();
+
+                       return null;
+               }
+
+               function renderRangeCaret(range) {
+                       var caretRange;
+
+                       if (!range || !range.collapsed) {
+                               return range;
+                       }
+
+                       caretRange = renderCaretAtRange(range);
+                       if (caretRange) {
+                               return caretRange;
+                       }
+
+                       return range;
+               }
+
+               function deleteContentEditableNode(node) {
+                       var nextCaretPosition, prevCaretPosition, prevCeFalseElm, nextElement;
+
+                       if (!isContentEditableFalse(node)) {
+                               return null;
+                       }
+
+                       if (isContentEditableFalse(node.previousSibling)) {
+                               prevCeFalseElm = node.previousSibling;
+                       }
+
+                       prevCaretPosition = getPrevVisualCaretPosition(CaretPosition.before(node));
+                       if (!prevCaretPosition) {
+                               nextCaretPosition = getNextVisualCaretPosition(CaretPosition.after(node));
+                       }
+
+                       if (nextCaretPosition && isElement(nextCaretPosition.getNode())) {
+                               nextElement = nextCaretPosition.getNode();
+                       }
+
+                       CaretContainer.remove(node.previousSibling);
+                       CaretContainer.remove(node.nextSibling);
+                       editor.dom.remove(node);
+                       clearContentEditableSelection();
+
+                       if (editor.dom.isEmpty(editor.getBody())) {
+                               editor.setContent('');
+                               editor.focus();
+                               return;
+                       }
+
+                       if (prevCeFalseElm) {
+                               return CaretPosition.after(prevCeFalseElm).toRange();
+                       }
+
+                       if (nextElement) {
+                               return CaretPosition.before(nextElement).toRange();
+                       }
+
+                       if (prevCaretPosition) {
+                               return prevCaretPosition.toRange();
+                       }
+
+                       if (nextCaretPosition) {
+                               return nextCaretPosition.toRange();
+                       }
+
+                       return null;
+               }
+
+               function backspaceDelete(direction, beforeFn, range) {
+                       var node, caretPosition;
+
+                       if (!range.collapsed) {
+                               node = getSelectedNode(range);
+                               if (isContentEditableFalse(node)) {
+                                       return renderRangeCaret(deleteContentEditableNode(node));
+                               }
+                       }
+
+                       caretPosition = getNormalizedRangeEndPoint(direction, range);
+
+                       if (beforeFn(caretPosition)) {
+                               return renderRangeCaret(deleteContentEditableNode(caretPosition.getNode(direction == -1)));
+                       }
+               }
+
+               function registerEvents() {
+                       var right = curry(moveH, 1, getNextVisualCaretPosition, isBeforeContentEditableFalse);
+                       var left = curry(moveH, -1, getPrevVisualCaretPosition, isAfterContentEditableFalse);
+                       var deleteForward = curry(backspaceDelete, 1, isBeforeContentEditableFalse);
+                       var backspace = curry(backspaceDelete, -1, isAfterContentEditableFalse);
+                       var up = curry(moveV, -1, LineWalker.upUntil);
+                       var down = curry(moveV, 1, LineWalker.downUntil);
+
+                       function override(moveFn) {
+                               var range = moveFn(getRange());
+
+                               if (range) {
+                                       setRange(range);
+                                       return true;
+                               }
+
+                               return false;
+                       }
+
+                       function getContentEditableRoot(node) {
+                               var root = editor.getBody();
+
+                               while (node && node != root) {
+                                       if (isContentEditableTrue(node) || isContentEditableFalse(node)) {
+                                               return node;
+                                       }
+
+                                       node = node.parentNode;
+                               }
+
+                               return null;
+                       }
+
+                       // Some browsers (Chrome) lets you place the caret after a cE=false
+                       // Make sure we render the caret container in this case
+                       editor.on('mouseup', function() {
+                               var range = getRange();
+
+                               if (range.collapsed) {
+                                       setRange(renderCaretAtRange(range));
+                               }
+                       });
+
+                       editor.on('mousedown', function(e) {
+                               var contentEditableRoot;
+
+                               contentEditableRoot     = getContentEditableRoot(e.target);
+                               if (contentEditableRoot) {
+                                       if (isContentEditableFalse(contentEditableRoot)) {
+                                               e.preventDefault();
+                                               setContentEditableSelection(selectNode(contentEditableRoot), false);
+                                       } else {
+                                               editor.selection.placeCaretAt(e.clientX, e.clientY);
+                                       }
+                               } else {
+                                       clearContentEditableSelection();
+                                       fakeCaret.hide();
+
+                                       var caretInfo = LineUtils.closestCaret(rootNode, e.clientX, e.clientY);
+                                       if (caretInfo) {
+                                               e.preventDefault();
+                                               editor.getBody().focus();
+                                               setRange(showCaret(1, caretInfo.node, caretInfo.before));
+                                       }
+                               }
+                       });
+
+                       editor.on('keydown', function(e) {
+                               var prevent;
+
+                               if (VK.modifierPressed(e)) {
+                                       return;
+                               }
+
+                               switch (e.keyCode) {
+                                       case VK.RIGHT:
+                                               prevent = override(right);
+                                               break;
+
+                                       case VK.DOWN:
+                                               prevent = override(down);
+                                               break;
+
+                                       case VK.LEFT:
+                                               prevent = override(left);
+                                               break;
+
+                                       case VK.UP:
+                                               prevent = override(up);
+                                               break;
+
+                                       case VK.DELETE:
+                                               prevent = override(deleteForward);
+                                               break;
+
+                                       case VK.BACKSPACE:
+                                               prevent = override(backspace);
+                                               break;
+
+                                       default:
+                                               prevent = isContentEditableFalse(editor.selection.getNode());
+                                               break;
+                               }
+
+                               if (prevent) {
+                                       e.preventDefault();
+                               }
+                       });
+
+                       function paddEmptyContentEditableArea() {
+                               var br, ceRoot = getContentEditableRoot(editor.selection.getNode());
+
+                               if (isContentEditableTrue(ceRoot) && isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {
+                                       br = editor.dom.create('br', {"data-mce-bogus": "1"});
+                                       editor.$(ceRoot).empty().append(br);
+                                       editor.selection.setRng(CaretPosition.before(br).toRange());
+                               }
+                       }
+
+                       function handleBlockContainer(e) {
+                               var blockCaretContainer = getBlockCaretContainer();
+
+                               if (!blockCaretContainer) {
+                                       return;
+                               }
+
+                               if (e.type == 'compositionstart') {
+                                       e.preventDefault();
+                                       e.stopPropagation();
+                                       showBlockCaretContainer(blockCaretContainer);
+                                       return;
+                               }
+
+                               if (blockCaretContainer.innerHTML != '&nbsp;') {
+                                       showBlockCaretContainer(blockCaretContainer);
+                               }
+                       }
+
+                       function handleEmptyBackspaceDelete(e) {
+                               var prevent;
+
+                               switch (e.keyCode) {
+                                       case VK.DELETE:
+                                               prevent = paddEmptyContentEditableArea();
+                                               break;
+
+                                       case VK.BACKSPACE:
+                                               prevent = paddEmptyContentEditableArea();
+                                               break;
+                               }
+
+                               if (prevent) {
+                                       e.preventDefault();
+                               }
+                       }
+
+                       // Must be added to "top" since undoManager needs to be executed after
+                       editor.on('keyup compositionstart', function(e) {
+                               handleBlockContainer(e);
+                               handleEmptyBackspaceDelete(e);
+                       }, true);
+
+                       editor.on('cut', function() {
+                               var node = editor.selection.getNode();
+
+                               if (isContentEditableFalse(node)) {
+                                       Delay.setEditorTimeout(editor, function() {
+                                               setRange(renderRangeCaret(deleteContentEditableNode(node)));
+                                       });
+                               }
+                       });
+
+                       editor.on('getSelectionRange', function(e) {
+                               var rng = e.range;
+
+                               if (selectedContentEditableNode) {
+                                       if (!selectedContentEditableNode.parentNode) {
+                                               selectedContentEditableNode = null;
+                                               return;
+                                       }
+
+                                       rng = rng.cloneRange();
+                                       rng.selectNode(selectedContentEditableNode);
+                                       e.range = rng;
+                               }
+                       });
+
+                       editor.on('setSelectionRange', function(e) {
+                               var rng;
+
+                               rng = setContentEditableSelection(e.range);
+                               if (rng) {
+                                       e.range = rng;
+                               }
+                       });
+
+                       editor.on('focus', function() {
+                               // Make sure we have a proper fake caret on focus
+                               Delay.setEditorTimeout(editor, function() {
+                                       editor.selection.setRng(renderRangeCaret(editor.selection.getRng()));
+                               });
+                       });
+
+                       DragDropOverrides.init(editor);
+               }
+
+               function addCss() {
+                       var styles = editor.contentStyles, rootClass = '.mce-content-body';
+
+                       styles.push(fakeCaret.getCss());
+                       styles.push(
+                               rootClass + ' .mce-offscreen-selection {' +
+                                       'position: absolute;' +
+                                       'left: -9999999999px;' +
+                                       'width: 100px' +
+                                       'height: 100px' +
+                               '}' +
+                               rootClass + ' *[contentEditable=false] {' +
+                                       'cursor: default;' +
+                               '}' +
+                               rootClass + ' *[contentEditable=true] {' +
+                                       'cursor: text;' +
+                               '}'
+                       );
+               }
+
+               function isRangeInCaretContainer(rng) {
+                       return CaretContainer.isCaretContainer(rng.startContainer) || CaretContainer.isCaretContainer(rng.endContainer);
+               }
+
+               function setContentEditableSelection(range, fireEvent) {
+                       var node, $ = editor.$, dom = editor.dom, $realSelectionContainer, sel,
+                               startContainer, startOffset, endOffset, e, caretPosition;
+
+                       if (!range) {
+                               clearContentEditableSelection();
+                               return null;
+                       }
+
+                       if (range.collapsed) {
+                               clearContentEditableSelection();
+
+                               if (!isRangeInCaretContainer(range)) {
+                                       caretPosition = getNormalizedRangeEndPoint(1, range);
+
+                                       if (isContentEditableFalse(caretPosition.getNode())) {
+                                               return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd());
+                                       }
+
+                                       if (isContentEditableFalse(caretPosition.getNode(true))) {
+                                               return showCaret(1, caretPosition.getNode(true), false);
+                                       }
+                               }
+
+                               return null;
+                       }
+
+                       startContainer = range.startContainer;
+                       startOffset = range.startOffset;
+                       endOffset = range.endOffset;
+
+                       // Normalizes <span cE=false>[</span>] to [<span cE=false></span>]
+                       if (startContainer.nodeType == 3 && startOffset == 0 && isContentEditableFalse(startContainer.parentNode)) {
+                               startContainer = startContainer.parentNode;
+                               startOffset = dom.nodeIndex(startContainer);
+                               startContainer = startContainer.parentNode;
+                       }
+
+                       if (startContainer.nodeType != 1) {
+                               clearContentEditableSelection();
+                               return null;
+                       }
+
+                       if (endOffset == startOffset + 1) {
+                               node = startContainer.childNodes[startOffset];
+                       }
+
+                       if (isContentEditableFalse(node)) {
+                               if (fireEvent !== false) {
+                                       e = editor.fire('ObjectSelected', {target: node});
+                                       if (e.isDefaultPrevented()) {
+                                               clearContentEditableSelection();
+                                               return null;
+                                       }
+                               }
+
+                               $realSelectionContainer = $('#' + realSelectionId);
+                               if ($realSelectionContainer.length === 0) {
+                                       $realSelectionContainer = $(
+                                               '<div data-mce-bogus="all" class="mce-offscreen-selection"></div>'
+                                       ).attr('id', realSelectionId);
+
+                                       $realSelectionContainer.appendTo(editor.getBody());
+                               }
+
+                               $realSelectionContainer.empty().append('\u00a0').append(node.cloneNode(true)).append('\u00a0').css({
+                                       top: dom.getPos(node, editor.getBody()).y
+                               });
+
+                               range = editor.dom.createRng();
+                               range.setStart($realSelectionContainer[0].firstChild, 1);
+                               range.setEnd($realSelectionContainer[0].lastChild, 0);
+
+                               editor.getBody().focus();
+                               $realSelectionContainer[0].focus();
+                               sel = editor.selection.getSel();
+                               sel.removeAllRanges();
+                               sel.addRange(range);
+
+                               editor.$('*[data-mce-selected]').removeAttr('data-mce-selected');
+                               node.setAttribute('data-mce-selected', 1);
+                               selectedContentEditableNode = node;
+
+                               return range;
+                       }
+
+                       clearContentEditableSelection();
+                       return null;
+               }
+
+               function clearContentEditableSelection() {
+                       if (selectedContentEditableNode) {
+                               selectedContentEditableNode.removeAttribute('data-mce-selected');
+                               editor.$('#' + realSelectionId).remove();
+                               selectedContentEditableNode = null;
+                       }
+               }
+
+               function destroy() {
+                       fakeCaret.destroy();
+                       selectedContentEditableNode = null;
+               }
+
+               if (Env.ceFalse) {
+                       registerEvents();
+                       addCss();
+               }
+
+               return {
+                       showBlockCaretContainer: showBlockCaretContainer,
+                       destroy: destroy
+               };
+       }
+
+       return SelectionOverrides;
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/Editor.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30780,19 +35507,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/ScriptLoader",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/EventUtils",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/WindowManager",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/NotificationManager",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/html/Schema",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/html/DomParser",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Quirks",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/Env",
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/util/Tools",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/util/Delay",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/EditorObservable",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/Mode",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/Shortcuts",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/EditorUpload"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/EditorUpload",
+       "tinymce/SelectionOverrides"
</ins><span class="cx" style="display: block; padding: 0 10px"> ], function(
</span><span class="cx" style="display: block; padding: 0 10px">        DOMUtils, DomQuery, AddOnManager, NodeChange, Node, DomSerializer, Serializer,
</span><span class="cx" style="display: block; padding: 0 10px">        Selection, Formatter, UndoManager, EnterKey, ForceBlocks, EditorCommands,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        URI, ScriptLoader, EventUtils, WindowManager,
-       Schema, DomParser, Quirks, Env, Tools, EditorObservable, Shortcuts, EditorUpload
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ URI, ScriptLoader, EventUtils, WindowManager, NotificationManager,
+       Schema, DomParser, Quirks, Env, Tools, Delay, EditorObservable, Mode, Shortcuts, EditorUpload,
+       SelectionOverrides
</ins><span class="cx" style="display: block; padding: 0 10px"> ) {
</span><span class="cx" style="display: block; padding: 0 10px">        // Shorten these names
</span><span class="cx" style="display: block; padding: 0 10px">        var DOM = DOMUtils.DOM, ThemeManager = AddOnManager.ThemeManager, PluginManager = AddOnManager.PluginManager;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30861,9 +35593,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        convert_fonts_to_spans: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: 'simple',
</span><span class="cx" style="display: block; padding: 0 10px">                        indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         'tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
</ins><span class="cx" style="display: block; padding: 0 10px">                         indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                'tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         'tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',
</ins><span class="cx" style="display: block; padding: 0 10px">                         validate: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        entity_encoding: 'named',
</span><span class="cx" style="display: block; padding: 0 10px">                        url_converter: self.convertURL,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30889,17 +35621,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @property isNotDirty
</span><span class="cx" style="display: block; padding: 0 10px">                 * @type Boolean
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @example
-                * function ajaxSave() {
-                *     var ed = tinymce.get('elm1');
-                *
-                *     // Save contents using some XHR call
-                *     alert(ed.getContent());
-                *
-                *     ed.isNotDirty = true; // Force not dirty state
-                * }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @deprecated Use editor.setDirty instead.
</ins><span class="cx" style="display: block; padding: 0 10px">                  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                self.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         self.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Name/Value object containing plugin instances.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31065,7 +35789,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        form._mceOldSubmit = form.submit;
</span><span class="cx" style="display: block; padding: 0 10px">                                        form.submit = function() {
</span><span class="cx" style="display: block; padding: 0 10px">                                                self.editorManager.triggerSave();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                self.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         self.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                return form._mceOldSubmit(form);
</span><span class="cx" style="display: block; padding: 0 10px">                                        };
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31093,6 +35817,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                         */
</span><span class="cx" style="display: block; padding: 0 10px">                        self.windowManager = new WindowManager(self);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        /**
+                        * Notification manager reference, use this to open new windows and dialogs.
+                        *
+                        * @property notificationManager
+                        * @type tinymce.NotificationManager
+                        * @example
+                        * // Shows a notification info message.
+                        * tinymce.activeEditor.notificationManager.open({text: 'Hello world!', type: 'info'});
+                        */
+                       self.notificationManager = new NotificationManager(self);
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (settings.encoding == 'xml') {
</span><span class="cx" style="display: block; padding: 0 10px">                                self.on('GetContent', function(e) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (e.save) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31242,6 +35977,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                initPlugin(dep);
</span><span class="cx" style="display: block; padding: 0 10px">                                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        if (self.plugins[plugin]) {
+                                               return;
+                                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                         pluginInstance = new Plugin(self, pluginUrl, self.$);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        self.plugins[plugin] = pluginInstance;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31489,8 +36228,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        // It will not steal focus while setting contentEditable
</span><span class="cx" style="display: block; padding: 0 10px">                        body = self.getBody();
</span><span class="cx" style="display: block; padding: 0 10px">                        body.disabled = true;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        self.readonly = settings.readonly;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (!settings.readonly) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (!self.readonly) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (self.inline && DOM.getStyle(body, 'position', true) == 'static') {
</span><span class="cx" style="display: block; padding: 0 10px">                                        body.style.position = 'relative';
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31663,6 +36403,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        self.forceBlocks = new ForceBlocks(self);
</span><span class="cx" style="display: block; padding: 0 10px">                        self.enterKey = new EnterKey(self);
</span><span class="cx" style="display: block; padding: 0 10px">                        self._nodeChangeDispatcher = new NodeChange(self);
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        self._selectionOverrides = new SelectionOverrides(self);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        self.fire('PreInit');
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31746,7 +36487,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Handle auto focus
</span><span class="cx" style="display: block; padding: 0 10px">                        if (settings.auto_focus) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         Delay.setEditorTimeout(self, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         var editor;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (settings.auto_focus === true) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31774,8 +36515,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                focus: function(skipFocus) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, selection = self.selection, contentEditable = self.settings.content_editable, rng;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var controlElm, doc = self.getDoc(), body;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var controlElm, doc = self.getDoc(), body = self.getBody(), contentEditableHost;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        function getContentEditableHost(node) {
+                               return self.dom.getParent(node, function(node) {
+                                       return self.dom.getContentEditable(node) === "true";
+                               });
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (!skipFocus) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // Get selected control element
</span><span class="cx" style="display: block; padding: 0 10px">                                rng = selection.getRng();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31785,6 +36532,15 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                self._refreshContentEditable();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                // Move focus to contentEditable=true child if needed
+                               contentEditableHost = getContentEditableHost(selection.getNode());
+                               if (self.$.contains(body, contentEditableHost)) {
+                                       contentEditableHost.focus();
+                                       selection.normalize();
+                                       self.editorManager.setActive(self);
+                                       return;
+                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // Focus the window iframe
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!contentEditable) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // WebKit needs this call to fire focusin event properly see #5948
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -31798,8 +36554,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // Focus the body as well since it's contentEditable
</span><span class="cx" style="display: block; padding: 0 10px">                                if (isGecko || contentEditable) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        body = self.getBody();
-
</del><span class="cx" style="display: block; padding: 0 10px">                                         // Check for setActive since it doesn't scroll to the element
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (body.setActive) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                // IE 11 sometimes throws "Invalid function" then fallback to focus
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32361,7 +37115,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        args.element = elm = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (args.set_dirty !== false) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                self.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         self.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        return html;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32494,7 +37248,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Get raw contents or by default the cleaned contents
</span><span class="cx" style="display: block; padding: 0 10px">                        if (args.format == 'raw') {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                content = body.innerHTML;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         content = self.serializer.getTrimmedContent();
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else if (args.format == 'text') {
</span><span class="cx" style="display: block; padding: 0 10px">                                content = body.innerText || body.textContent;
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32534,6 +37288,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Returns true/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 * The dirty state is automatically set to true if you do modifications to the content in other
+                * words when new undo levels is created or if you undo/redo to update the contents of the editor. It will also be set
+                * to false if you call editor.save().
+                *
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @method isDirty
</span><span class="cx" style="display: block; padding: 0 10px">                 * @return {Boolean} True/false if the editor is dirty or not. It will get dirty if the user has made modifications to the contents.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @example
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32545,6 +37303,42 @@
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 * Explicitly sets the dirty state. This will fire the dirty event if the editor dirty state is changed from false to true
+                * by invoking this method.
+                *
+                * @method setDirty
+                * @param {Boolean} state True/false if the editor is considered dirty.
+                * @example
+                * function ajaxSave() {
+                *     var editor = tinymce.get('elm1');
+                *
+                *     // Save contents using some XHR call
+                *     alert(editor.getContent());
+                *
+                *     editor.setDirty(false); // Force not dirty state
+                * }
+                */
+               setDirty: function(state) {
+                       var oldState = !this.isNotDirty;
+
+                       this.isNotDirty = !state;
+
+                       if (state && state != oldState) {
+                               this.fire('dirty');
+                       }
+               },
+
+               /**
+                * Sets the editor mode. Mode can be for example "design", "code" or "readonly".
+                *
+                * @method setMode
+                * @param {String} mode Mode to set the editor in.
+                */
+               setMode: function(mode) {
+                       Mode.setMode(this, mode);
+               },
+
+               /**
</ins><span class="cx" style="display: block; padding: 0 10px">                  * Returns the editors container element. The container element wrappes in
</span><span class="cx" style="display: block; padding: 0 10px">                 * all the elements added to the page for the editor. Such as UI, iframe etc.
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32755,6 +37549,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                self.editorManager.remove(self);
</span><span class="cx" style="display: block; padding: 0 10px">                                DOM.remove(self.getContainer());
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                self._selectionOverrides.destroy();
</ins><span class="cx" style="display: block; padding: 0 10px">                                 self.editorUpload.destroy();
</span><span class="cx" style="display: block; padding: 0 10px">                                self.destroy();
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32837,7 +37632,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                _refreshContentEditable: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, body, parent;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Check if the editor was hidden and the re-initialize contentEditable mode by removing and adding the body again
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (self._isHidden()) {
</span><span class="cx" style="display: block; padding: 0 10px">                                body = self.getBody();
</span><span class="cx" style="display: block; padding: 0 10px">                                parent = body.parentNode;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33009,8 +37804,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/FocusManager", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/DOMUtils",
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        "tinymce/util/Delay",
</ins><span class="cx" style="display: block; padding: 0 10px">         "tinymce/Env"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-], function(DOMUtils, Env) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+], function(DOMUtils, Delay, Env) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var selectionChangeHandler, documentFocusInHandler, documentMouseUpHandler, DOM = DOMUtils.DOM;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33139,11 +37935,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.on('focusin', function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                var focusedEditor = editorManager.focusedEditor;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         var focusedEditor = editorManager.focusedEditor, lastRng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (editor.selection.lastFocusBookmark) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        editor.selection.setRng(bookmarkToRng(editor, editor.selection.lastFocusBookmark));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 lastRng = bookmarkToRng(editor, editor.selection.lastFocusBookmark);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         editor.selection.lastFocusBookmark = null;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        editor.selection.setRng(lastRng);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (focusedEditor != editor) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33161,10 +37958,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.on('focusout', function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         Delay.setEditorTimeout(editor, function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         var focusedEditor = editorManager.focusedEditor;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // Still the same editor the the blur was outside any editor UI
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 // Still the same editor the blur was outside any editor UI
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (!isUIElement(getActiveElement()) && focusedEditor == editor) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                editor.fire('blur', {focusedEditor: null});
</span><span class="cx" style="display: block; padding: 0 10px">                                                editorManager.focusedEditor = null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33174,7 +37971,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        editor.selection.lastFocusBookmark = null;
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         });
</ins><span class="cx" style="display: block; padding: 0 10px">                         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Check if focus is moved to an element outside the active editor by checking if the target node
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33369,7 +38166,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @property minorVersion
</span><span class="cx" style="display: block; padding: 0 10px">                 * @type String
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                minorVersion: '2.8',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         minorVersion: '3.3',
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Release date of TinyMCE build.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33377,7 +38174,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 * @property releaseDate
</span><span class="cx" style="display: block; padding: 0 10px">                 * @type String
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                releaseDate: '2015-11-13',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         releaseDate: '2016-01-14',
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="cx" style="display: block; padding: 0 10px">                 * Collection of editor instances.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34085,6 +38882,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        settings.async = settings.async === false ? false : true;
</span><span class="cx" style="display: block; padding: 0 10px">                        settings.data = settings.data || '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        XHR.fire('beforeInitialize', {settings: settings});
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         xhr = new XMLHttpRequest();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (xhr) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34893,236 +39692,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// Included from: js/tinymce/classes/ui/Tooltip.js
-
-/**
- * Tooltip.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Creates a tooltip instance.
- *
- * @-x-less ToolTip.less
- * @class tinymce.ui.ToolTip
- * @extends tinymce.ui.Control
- * @mixes tinymce.ui.Movable
- */
-define("tinymce/ui/Tooltip", [
-       "tinymce/ui/Control",
-       "tinymce/ui/Movable"
-], function(Control, Movable) {
-       return Control.extend({
-               Mixins: [Movable],
-
-               Defaults: {
-                       classes: 'widget tooltip tooltip-n'
-               },
-
-               /**
-                * Renders the control as a HTML string.
-                *
-                * @method renderHtml
-                * @return {String} HTML representing the control.
-                */
-               renderHtml: function() {
-                       var self = this, prefix = self.classPrefix;
-
-                       return (
-                               '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' +
-                                       '<div class="' + prefix + 'tooltip-arrow"></div>' +
-                                       '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' +
-                               '</div>'
-                       );
-               },
-
-               bindStates: function() {
-                       var self = this;
-
-                       self.state.on('change:text', function(e) {
-                               self.getEl().lastChild.innerHTML = self.encode(e.value);
-                       });
-
-                       return self._super();
-               },
-
-               /**
-                * Repaints the control after a layout operation.
-                *
-                * @method repaint
-                */
-               repaint: function() {
-                       var self = this, style, rect;
-
-                       style = self.getEl().style;
-                       rect = self._layoutRect;
-
-                       style.left = rect.x + 'px';
-                       style.top = rect.y + 'px';
-                       style.zIndex = 0xFFFF + 0xFFFF;
-               }
-       });
-});
-
-// Included from: js/tinymce/classes/ui/Widget.js
-
-/**
- * Widget.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Widget base class a widget is a control that has a tooltip and some basic states.
- *
- * @class tinymce.ui.Widget
- * @extends tinymce.ui.Control
- */
-define("tinymce/ui/Widget", [
-       "tinymce/ui/Control",
-       "tinymce/ui/Tooltip"
-], function(Control, Tooltip) {
-       "use strict";
-
-       var tooltip;
-
-       var Widget = Control.extend({
-               /**
-                * Constructs a instance with the specified settings.
-                *
-                * @constructor
-                * @param {Object} settings Name/value object with settings.
-                * @setting {String} tooltip Tooltip text to display when hovering.
-                * @setting {Boolean} autofocus True if the control should be focused when rendered.
-                * @setting {String} text Text to display inside widget.
-                */
-               init: function(settings) {
-                       var self = this;
-
-                       self._super(settings);
-                       settings = self.settings;
-                       self.canFocus = true;
-
-                       if (settings.tooltip && Widget.tooltips !== false) {
-                               self.on('mouseenter', function(e) {
-                                       var tooltip = self.tooltip().moveTo(-0xFFFF);
-
-                                       if (e.control == self) {
-                                               var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), ['bc-tc', 'bc-tl', 'bc-tr']);
-
-                                               tooltip.classes.toggle('tooltip-n', rel == 'bc-tc');
-                                               tooltip.classes.toggle('tooltip-nw', rel == 'bc-tl');
-                                               tooltip.classes.toggle('tooltip-ne', rel == 'bc-tr');
-
-                                               tooltip.moveRel(self.getEl(), rel);
-                                       } else {
-                                               tooltip.hide();
-                                       }
-                               });
-
-                               self.on('mouseleave mousedown click', function() {
-                                       self.tooltip().hide();
-                               });
-                       }
-
-                       self.aria('label', settings.ariaLabel || settings.tooltip);
-               },
-
-               /**
-                * Returns the current tooltip instance.
-                *
-                * @method tooltip
-                * @return {tinymce.ui.Tooltip} Tooltip instance.
-                */
-               tooltip: function() {
-                       if (!tooltip) {
-                               tooltip = new Tooltip({type: 'tooltip'});
-                               tooltip.renderTo();
-                       }
-
-                       return tooltip;
-               },
-
-               /**
-                * Called after the control has been rendered.
-                *
-                * @method postRender
-                */
-               postRender: function() {
-                       var self = this, settings = self.settings;
-
-                       self._super();
-
-                       if (!self.parent() && (settings.width || settings.height)) {
-                               self.initLayoutRect();
-                               self.repaint();
-                       }
-
-                       if (settings.autofocus) {
-                               self.focus();
-                       }
-               },
-
-               bindStates: function() {
-                       var self = this;
-
-                       function disable(state) {
-                               self.aria('disabled', state);
-                               self.classes.toggle('disabled', state);
-                       }
-
-                       function active(state) {
-                               self.aria('pressed', state);
-                               self.classes.toggle('active', state);
-                       }
-
-                       self.state.on('change:disabled', function(e) {
-                               disable(e.value);
-                       });
-
-                       self.state.on('change:active', function(e) {
-                               active(e.value);
-                       });
-
-                       if (self.state.get('disabled')) {
-                               disable(true);
-                       }
-
-                       if (self.state.get('active')) {
-                               active(true);
-                       }
-
-                       return self._super();
-               },
-
-               /**
-                * Removes the current control from DOM and from UI collections.
-                *
-                * @method remove
-                * @return {tinymce.ui.Control} Current control instance.
-                */
-               remove: function() {
-                       this._super();
-
-                       if (tooltip) {
-                               tooltip.remove();
-                               tooltip = null;
-                       }
-               }
-       });
-
-       return Widget;
-});
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/ui/Button.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -35241,7 +39810,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                renderHtml: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, id = self._id, prefix = self.classPrefix;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var icon = self.state.get('icon'), image, text = self.state.get('text');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var icon = self.state.get('icon'), image, text = self.state.get('text'), textHtml = '';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        image = self.settings.image;
</span><span class="cx" style="display: block; padding: 0 10px">                        if (image) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -35259,6 +39828,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (text) {
</span><span class="cx" style="display: block; padding: 0 10px">                                self.classes.add('btn-has-text');
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -35267,22 +39837,27 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                '<div id="' + id + '" class="' + self.classes + '" tabindex="-1" aria-labelledby="' + id + '">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button role="presentation" type="button" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                (icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                (text ? self.encode(text) : '') +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         textHtml +
</ins><span class="cx" style="display: block; padding: 0 10px">                                         '</button>' +
</span><span class="cx" style="display: block; padding: 0 10px">                                '</div>'
</span><span class="cx" style="display: block; padding: 0 10px">                        );
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                bindStates: function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var self = this;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var self = this, $ = self.$, textCls = self.classPrefix + 'txt';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        function setButtonText(text) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                var node = self.getEl().firstChild.firstChild;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         var $span = $('span.' + textCls, self.getEl());
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                for (; node; node = node.nextSibling) {
-                                       if (node.nodeType == 3) {
-                                               node.data = self.translate(text);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (text) {
+                                       if (!$span[0]) {
+                                               $('button:first', self.getEl()).append('<span class="' + textCls + '"></span>');
+                                               $span = $('span.' + textCls, self.getEl());
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                                       $span.html(self.encode(text));
+                               } else {
+                                       $span.remove();
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                self.classes.toggle('btn-has-text', !!text);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36129,14 +40704,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">                renderHtml: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
</span><span class="cx" style="display: block; padding: 0 10px">                        var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '',
+                               textHtml = '';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (text) {
+                               self.classes.add('btn-has-text');
+                               textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return (
</span><span class="cx" style="display: block; padding: 0 10px">                                '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                (icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
</span><span class="cx" style="display: block; padding: 0 10px">                                                '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                (text ? (icon ? ' ' : '') + (text) : '') +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         textHtml +
</ins><span class="cx" style="display: block; padding: 0 10px">                                         '</button>' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                ' <i class="' + prefix + 'caret"></i>' +
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -37868,8 +42449,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                self.disabled(!checkState());
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                editor.on('Undo Redo AddUndo TypingUndo ClearUndos', function() {
-                                       self.disabled(!checkState());
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function() {
+                                       self.disabled(editor.readonly || !checkState());
</ins><span class="cx" style="display: block; padding: 0 10px">                                 });
</span><span class="cx" style="display: block; padding: 0 10px">                        };
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38346,8 +42927,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * @extends tinymce.ui.Widget
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/ui/Iframe", [
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/ui/Widget"
-], function(Widget) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/ui/Widget",
+       "tinymce/util/Delay"
+], function(Widget, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        return Widget.extend({
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38393,9 +42975,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Wait for iframe to initialize IE 10 takes time
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!body) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         self.html(html);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                }, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         });
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                body.innerHTML = html;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38785,7 +43367,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                renderHtml: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, id = self._id, prefix = self.classPrefix;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var icon = self.settings.icon, image, text = self.state.get('text');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var icon = self.settings.icon, image, text = self.state.get('text'),
+                               textHtml = '';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        image = self.settings.image;
</span><span class="cx" style="display: block; padding: 0 10px">                        if (image) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38801,6 +43384,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                image = '';
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (text) {
+                               self.classes.add('btn-has-text');
+                               textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38809,7 +43397,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                '<div id="' + id + '" class="' + self.classes + '" tabindex="-1" aria-labelledby="' + id + '">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                (icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                (text ? (icon ? '\u00a0' : '') + self.encode(text) : '') +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         textHtml +
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 ' <i class="' + prefix + 'caret"></i>' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '</button>' +
</span><span class="cx" style="display: block; padding: 0 10px">                                '</div>'
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39408,7 +43996,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                self.state.set('menu', values);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        self.state.set('text', settings.text || selectedText || values[0].text);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 self.state.set('text', settings.text || selectedText);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        self.classes.add('listbox');
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39521,199 +44109,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// Included from: js/tinymce/classes/ui/Rect.js
-
-/**
- * Rect.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Contains various tools for rect/position calculation.
- *
- * @class tinymce.ui.Rect
- */
-define("tinymce/ui/Rect", [
-], function() {
-       "use strict";
-
-       var min = Math.min, max = Math.max, round = Math.round;
-
-       /**
-        * Returns the rect positioned based on the relative position name
-        * to the target rect.
-        *
-        * @method relativePosition
-        * @param {Rect} rect Source rect to modify into a new rect.
-        * @param {Rect} targetRect Rect to move relative to based on the rel option.
-        * @param {String} rel Relative position. For example: tr-bl.
-        */
-       function relativePosition(rect, targetRect, rel) {
-               var x, y, w, h, targetW, targetH;
-
-               x = targetRect.x;
-               y = targetRect.y;
-               w = rect.w;
-               h = rect.h;
-               targetW = targetRect.w;
-               targetH = targetRect.h;
-
-               rel = (rel || '').split('');
-
-               if (rel[0] === 'b') {
-                       y += targetH;
-               }
-
-               if (rel[1] === 'r') {
-                       x += targetW;
-               }
-
-               if (rel[0] === 'c') {
-                       y += round(targetH / 2);
-               }
-
-               if (rel[1] === 'c') {
-                       x += round(targetW / 2);
-               }
-
-               if (rel[3] === 'b') {
-                       y -= h;
-               }
-
-               if (rel[4] === 'r') {
-                       x -= w;
-               }
-
-               if (rel[3] === 'c') {
-                       y -= round(h / 2);
-               }
-
-               if (rel[4] === 'c') {
-                       x -= round(w / 2);
-               }
-
-               return {x: x, y: y, w: w, h: h};
-       }
-
-       /**
-        * Tests various positions to get the most suitable one.
-        *
-        * @method findBestRelativePosition
-        * @param {Rect} rect Rect to use as source.
-        * @param {Rect} targetRect Rect to move relative to.
-        * @param {Rect} constrainRect Rect to constrain within.
-        * @param {Array} rels Array of relative positions to test against.
-        */
-       function findBestRelativePosition(rect, targetRect, constrainRect, rels) {
-               var pos, i;
-
-               for (i = 0; i < rels.length; i++) {
-                       pos = relativePosition(rect, targetRect, rels[i]);
-
-                       if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x &&
-                               pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {
-                               return rels[i];
-                       }
-               }
-       }
-
-       /**
-        * Inflates the rect in all directions.
-        *
-        * @method inflate
-        * @param {Rect} rect Rect to expand.
-        * @param {Number} w Relative width to expand by.
-        * @param {Number} h Relative height to expand by.
-        * @return {Rect} New expanded rect.
-        */
-       function inflate(rect, w, h) {
-               return {
-                       x: rect.x - w,
-                       y: rect.y - h,
-                       w: rect.w + w * 2,
-                       h: rect.h + h * 2
-               };
-       }
-
-       /**
-        * Returns the intersection of the specified rectangles.
-        *
-        * @method intersect
-        * @param {Rect} rect The first rectangle to compare.
-        * @param {Rect} cropRect The second rectangle to compare.
-        * @return {Rect} The intersection of the two rectangles or null if they don't intersect.
-        */
-       function intersect(rect, cropRect) {
-               var x1, y1, x2, y2;
-
-               x1 = max(rect.x, cropRect.x);
-               y1 = max(rect.y, cropRect.y);
-               x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);
-               y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);
-
-               if (x2 - x1 < 0 || y2 - y1 < 0) {
-                       return null;
-               }
-
-               return {x: x1, y: y1, w: x2 - x1, h: y2 - y1};
-       }
-
-       /**
-        * Returns a rect clamped within the specified clamp rect. This forces the
-        * rect to be inside the clamp rect.
-        *
-        * @method clamp
-        * @param {Rect} rect Rectangle to force within clamp rect.
-        * @param {Rect} clampRect Rectable to force within.
-        * @param {Boolean} fixedSize True/false if size should be fixed.
-        * @return {Rect} Clamped rect.
-        */
-       function clamp(rect, clampRect, fixedSize) {
-               var underflowX1, underflowY1, overflowX2, overflowY2,
-                       x1, y1, x2, y2, cx2, cy2;
-
-               x1 = rect.x;
-               y1 = rect.y;
-               x2 = rect.x + rect.w;
-               y2 = rect.y + rect.h;
-               cx2 = clampRect.x + clampRect.w;
-               cy2 = clampRect.y + clampRect.h;
-
-               underflowX1 = max(0, clampRect.x - x1);
-               underflowY1 = max(0, clampRect.y - y1);
-               overflowX2 = max(0, x2 - cx2);
-               overflowY2 = max(0, y2 - cy2);
-
-               x1 += underflowX1;
-               y1 += underflowY1;
-
-               if (fixedSize) {
-                       x2 += underflowX1;
-                       y2 += underflowY1;
-                       x1 -= overflowX2;
-                       y1 -= overflowY2;
-               }
-
-               x2 -= overflowX2;
-               y2 -= overflowY2;
-
-               return {x: x1, y: y1, w: x2 - x1, h: y2 - y1};
-       }
-
-       return {
-               inflate: inflate,
-               relativePosition: relativePosition,
-               findBestRelativePosition: findBestRelativePosition,
-               intersect: intersect,
-               clamp: clamp
-       };
-});
-
</del><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/ui/ResizeHandle.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39803,6 +44198,115 @@
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Included from: js/tinymce/classes/ui/SelectBox.js
+
+/**
+ * SelectBox.js
+ *
+ * Released under LGPL License.
+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * Creates a new select box control.
+ *
+ * @-x-less SelectBox.less
+ * @class tinymce.ui.SelectBox
+ * @extends tinymce.ui.Widget
+ */
+define("tinymce/ui/SelectBox", [
+       "tinymce/ui/Widget"
+], function(Widget) {
+       "use strict";
+
+       function createOptions(options) {
+               var strOptions = '';
+               if (options) {
+                       for (var i = 0; i < options.length; i++) {
+                               strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
+                       }
+               }
+               return strOptions;
+       }
+
+       return Widget.extend({
+               Defaults: {
+                       classes: "selectbox",
+                       role: "selectbox",
+                       options: []
+               },
+               /**
+                * Constructs a instance with the specified settings.
+                *
+                * @constructor
+                * @param {Object} settings Name/value object with settings.
+                * @setting {Array} values Array with values to add to list box.
+                */
+               init: function(settings) {
+                       var self = this;
+
+                       self._super(settings);
+
+                       if (self.settings.size) {
+
+                               self.size = self.settings.size;
+
+                       }
+
+                       if (self.settings.options) {
+                               self._options = self.settings.options;
+                       }
+
+               },
+
+               /**
+                * Getter/setter function for the options state.
+                *
+                * @method options
+                * @param {Array} [state] State to be set.
+                * @return {Array|tinymce.ui.SelectBox} Array of string options.
+                */
+               options: function(state) {
+                       if (!arguments.length) {
+                               return this.state.get('options');
+                       }
+
+                       this.state.set('options', state);
+
+                       return this;
+               },
+
+               renderHtml: function() {
+                       var self = this, options, size = '';
+
+                       options = createOptions(self._options);
+
+                       if (self.size) {
+                               size = ' size = "' + self.size + '"';
+                       }
+
+                       return (
+                               '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' +
+                                       options +
+                               '</select>'
+                       );
+               },
+
+               bindStates: function() {
+                       var self = this;
+
+                       self.state.on('change:options', function(e) {
+                               self.getEl().innerHTML = createOptions(e.value);
+                       });
+
+                       return self._super();
+               }
+       });
+});
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // Included from: js/tinymce/classes/ui/Slider.js
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40083,7 +44587,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><span class="cx" style="display: block; padding: 0 10px">                renderHtml: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var self = this, id = self._id, prefix = self.classPrefix, image;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var icon = self.state.get('icon'), text = self.state.get('text');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var icon = self.state.get('icon'), text = self.state.get('text'),
+                               textHtml = '';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        image = self.settings.image;
</span><span class="cx" style="display: block; padding: 0 10px">                        if (image) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40101,11 +44606,16 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if (text) {
+                               self.classes.add('btn-has-text');
+                               textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
+                       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         return (
</span><span class="cx" style="display: block; padding: 0 10px">                                '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button type="button" hidefocus="1" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                (icon ? '<i class="' + icon + '"' + image + '></i>' : '') +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                (text ? (icon ? ' ' : '') + text : '') +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         textHtml +
</ins><span class="cx" style="display: block; padding: 0 10px">                                         '</button>' +
</span><span class="cx" style="display: block; padding: 0 10px">                                        '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' +
</span><span class="cx" style="display: block; padding: 0 10px">                                                //(icon ? '<i class="' + icon + '"></i>' : '') +
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40601,8 +45111,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> define("tinymce/ui/Throbber", [
</span><span class="cx" style="display: block; padding: 0 10px">        "tinymce/dom/DomQuery",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        "tinymce/ui/Control"
-], function($, Control) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "tinymce/ui/Control",
+       "tinymce/util/Delay"
+], function($, Control, Delay) {
</ins><span class="cx" style="display: block; padding: 0 10px">         "use strict";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40628,7 +45139,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        state = true;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (state) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        $(elm).append(
</span><span class="cx" style="display: block; padding: 0 10px">                                                '<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>'
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40638,7 +45149,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                callback();
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        }, time || 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 }, time);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        return self;
</span><span class="cx" style="display: block; padding: 0 10px">                };
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -40663,5 +45174,5 @@
</span><span class="cx" style="display: block; padding: 0 10px">        };
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-expose(["tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/Env","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/html/Entities","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/dom/RangeUtils","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/BookmarkManager","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EditorCommands","tinymce/util/URI&q
 uot;,"tinymce/util/Class","tinymce/util/EventDispatcher","tinymce/util/Observable","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/ReflowQueue","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/EditorObservable","tinymce/Shortcuts","tinymce/util/Promise","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP",&q
 uot;tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/ComboBox","tinymce/ui/ColorBox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/util/Color","tinymce/ui/ColorPicker","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButt
 on","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/ListBox","tinymce/ui/Radio","tinymce/ui/Rect","tinymce/ui/ResizeHandle","tinymce/ui/Slider","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+expose(["tinymce/geom/Rect","tinymce/util/Promise","tinymce/util/Delay","tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/Env","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/html/Entities","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/dom/RangeUtils","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/BookmarkManager","tinymce/dom/Selection","tinymce/Formatter&quot
 ;,"tinymce/UndoManager","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/util/EventDispatcher","tinymce/util/Observable","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/ReflowQueue","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Progress","tinymce/ui/Notification","tinymce/NotificationManager","tinymce/EditorObservable","tinymce/Shortcuts","tinymce/Editor&quo
 t;,"tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/ComboBox","tinymce/ui/ColorBox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/util/Color","tinymce/ui/ColorPicker","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymc
 e/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/ListBox","tinymce/ui/Radio","tinymce/ui/ResizeHandle","tinymce/ui/SelectBox","tinymce/ui/Slider","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]);
</ins><span class="cx" style="display: block; padding: 0 10px"> })(this);
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcetinymceminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/tinymce.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/tinymce.min.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/js/tinymce/tinymce.min.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,12 +1,13 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// 4.2.8 (2015-11-13)
-!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i<e.length;++i){if(n=s[e[i]]||o(e[i]),!n)throw"module definition dependecy not found: "+e[i];r.push(n)}t.apply(null,r)}function r(e,r,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(r===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(r,function(){s[e]=i.apply(null,arguments)})}function i(e){return!!s[e]}function o(t){for(var n=e,r=t.split(/[.\/]/),i=0;i<r.length;++i){if(!n[r[i]])return;n=n[r[i]]}return n}function a(n){var r,i,o,a,l;for(r=0;r<n.length;r++){i=e,o=n[r],a=o.split(/[.\/]/);for(var c=0;c<a.length-1;++c)i[a[c]]===t&&(i[a[c]]={}),i=i[a[c]];i[a[a.length-1]]=s[o]}if(e.AMDLC_TESTS){l=e.privateModules||{};for(o in s)l[o]=s[o];for(r=0;r<n.length;r++)delete l[n[r]];e.privateModules
 =l}}var s={},l="tinymce/dom/EventUtils",c="tinymce/dom/Sizzle",u="tinymce/Env",d="tinymce/util/Arr",f="tinymce/util/Tools",h="tinymce/dom/DomQuery",p="tinymce/html/Styles",m="tinymce/dom/TreeWalker",g="tinymce/dom/Range",v="tinymce/html/Entities",y="tinymce/dom/StyleSheetLoader",b="tinymce/dom/DOMUtils",x="tinymce/dom/ScriptLoader",C="tinymce/AddOnManager",w="tinymce/dom/RangeUtils",_="tinymce/NodeChange",E="tinymce/html/Node",N="tinymce/html/Schema",S="tinymce/html/SaxParser",k="tinymce/html/DomParser",T="tinymce/html/Writer",R="tinymce/html/Serializer",A="tinymce/dom/Serializer",B="tinymce/dom/TridentSelection",D="tinymce/util/VK",L="tinymce/dom/ControlSelection",M="tinymce/dom/BookmarkManager",H="tinymce/dom/S
 election",P="tinymce/dom/ElementUtils",O="tinymce/fmt/Preview",I="tinymce/Formatter",F="tinymce/UndoManager",z="tinymce/EnterKey",W="tinymce/ForceBlocks",V="tinymce/EditorCommands",U="tinymce/util/URI",$="tinymce/util/Class",q="tinymce/util/EventDispatcher",j="tinymce/data/Binding",K="tinymce/util/Observable",Y="tinymce/data/ObservableObject",G="tinymce/ui/Selector",X="tinymce/ui/Collection",J="tinymce/ui/DomUtils",Q="tinymce/ui/BoxUtils",Z="tinymce/ui/ClassList",ee="tinymce/ui/ReflowQueue",te="tinymce/ui/Control",ne="tinymce/ui/Factory",re="tinymce/ui/KeyboardNavigation",ie="tinymce/ui/Container",oe="tinymce/ui/DragHelper",ae="tinymce/ui/Scrollable",se="tinymce/ui/Panel",le="tinymce/ui/Movable",ce="tinymce/
 ui/Resizable",ue="tinymce/ui/FloatPanel",de="tinymce/ui/Window",fe="tinymce/ui/MessageBox",he="tinymce/WindowManager",pe="tinymce/dom/NodePath",me="tinymce/util/Quirks",ge="tinymce/EditorObservable",ve="tinymce/Shortcuts",ye="tinymce/util/Promise",be="tinymce/util/Fun",xe="tinymce/file/Uploader",Ce="tinymce/file/Conversions",we="tinymce/file/ImageScanner",_e="tinymce/file/BlobCache",Ee="tinymce/EditorUpload",Ne="tinymce/Editor",Se="tinymce/util/I18n",ke="tinymce/FocusManager",Te="tinymce/EditorManager",Re="tinymce/LegacyInput",Ae="tinymce/util/XHR",Be="tinymce/util/JSON",De="tinymce/util/JSONRequest",Le="tinymce/util/JSONP",Me="tinymce/util/LocalStorage",He="tinymce/Compat",Pe="tinymce/ui/Layout",Oe="tinymce
 /ui/AbsoluteLayout",Ie="tinymce/ui/Tooltip",Fe="tinymce/ui/Widget",ze="tinymce/ui/Button",We="tinymce/ui/ButtonGroup",Ve="tinymce/ui/Checkbox",Ue="tinymce/ui/ComboBox",$e="tinymce/ui/ColorBox",qe="tinymce/ui/PanelButton",je="tinymce/ui/ColorButton",Ke="tinymce/util/Color",Ye="tinymce/ui/ColorPicker",Ge="tinymce/ui/Path",Xe="tinymce/ui/ElementPath",Je="tinymce/ui/FormItem",Qe="tinymce/ui/Form",Ze="tinymce/ui/FieldSet",et="tinymce/ui/FilePicker",tt="tinymce/ui/FitLayout",nt="tinymce/ui/FlexLayout",rt="tinymce/ui/FlowLayout",it="tinymce/ui/FormatControls",ot="tinymce/ui/GridLayout",at="tinymce/ui/Iframe",st="tinymce/ui/Label",lt="tinymce/ui/Toolbar",ct="tinymce/ui/MenuBar",ut="tinymce/ui/MenuButton",dt="tinymce
 /ui/MenuItem",ft="tinymce/ui/Menu",ht="tinymce/ui/ListBox",pt="tinymce/ui/Radio",mt="tinymce/ui/Rect",gt="tinymce/ui/ResizeHandle",vt="tinymce/ui/Slider",yt="tinymce/ui/Spacer",bt="tinymce/ui/SplitButton",xt="tinymce/ui/StackLayout",Ct="tinymce/ui/TabPanel",wt="tinymce/ui/TextBox",_t="tinymce/ui/Throbber";r(l,[],function(){function e(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function t(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function n(e,t){function n(){return!1}function r(){return!0}var i,o=t||{},l;for(i in e)s[i]||(o[i]=e[i]);if(o.target||(o.target=o.srcElement||document),e&&a.test(e.type)&&e.pageX===l&&e.clientX!==l){var c=o.target.ownerDocument||document,u=c.documentElement,d=c.bod
 y;o.pageX=e.clientX+(u&&u.scrollLeft||d&&d.scrollLeft||0)-(u&&u.clientLeft||d&&d.clientLeft||0),o.pageY=e.clientY+(u&&u.scrollTop||d&&d.scrollTop||0)-(u&&u.clientTop||d&&d.clientTop||0)}return o.preventDefault=function(){o.isDefaultPrevented=r,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},o.stopPropagation=function(){o.isPropagationStopped=r,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},o.stopImmediatePropagation=function(){o.isImmediatePropagationStopped=r,o.stopPropagation()},o.isDefaultPrevented||(o.isDefaultPrevented=n,o.isPropagationStopped=n,o.isImmediatePropagationStopped=n),"undefined"==typeof o.metaKey&&(o.metaKey=!1),o}function r(n,r,i){function o(){i.domLoaded||(i.domLoaded=!0,r(c))}function a(){("complete"===l.readyState||"interactive"===l.readyState&&l.body)&&(t(l,"readystatechange",a),o())}function 
 s(){try{l.documentElement.doScroll("left")}catch(e){return void setTimeout(s,0)}o()}var l=n.document,c={type:"ready"};return i.domLoaded?void r(c):(l.addEventListener?"complete"===l.readyState?o():e(n,"DOMContentLoaded",o):(e(l,"readystatechange",a),l.documentElement.doScroll&&n.self===n.top&&s()),void e(n,"load",o))}function i(){function i(e,t){var n,r,i,o,a=s[t];if(n=a&&a[e.type])for(r=0,i=n.length;i>r;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,h,p){function m(e){i(n(e||_.event),g)}var g,v,y,b,x,C,w,_=window;if(t&&3!==t.nodeType&&am
 p;8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),p=p||t,o=o.split(" "),y=o.length;y--;)b=o[y],C=m,x=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?h.call(p,n({type:b})):(d||(x=f[b],x&&(C=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,x="focusin"===b?"focus":"blur",C=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?h({type:b}):v.push({func:h,scope:p}):(s[g][b]=v=[{func:h,scope:p}],v.fakeName=x,v.capture=w,v.nativeHandler=C,&q
 uot;ready"===b?r(t,C,a):e(t,x||b,C,w)));return t=v=0,h}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var h=o.nativeHandler,p=o.fakeName,m=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=h,o.fakeName=p,o.capture=m,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&a
 mp;&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e,t,n,r){var i,o,a,s,l,c,d,h,p,m;if((t?t.ownerDocument||t:z)!==D&&B(t),t=t||D,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(M&&!r){if(i=ve.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&I(t,o)&&o.id===a)return n.pus
 h(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&C.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(C.qsa&&(!H||!H.test(e))){if(h=d=F,p=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=N(e),(d=t.getAttribute("id"))?h=d.replace(be,"\\$&"):t.setAttribute("id",h),h="[id='"+h+"'] ",l=c.length;l--;)c[l]=h+f(c[l]);p=ye.test(e)&&u(t.parentNode)||t,m=c.join(",")}if(m)try{return Z.apply(n,p.querySelectorAll(m)),n}catch(g){}finally{d||t.removeAttribute("id")}}}return k(e.replace(se,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNo
 de.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=e.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||Y)-(~e.sourceIndex||Y);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&typeof e.getElementsByTagName!==K&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function h(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?funct
 ion(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c=[W,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(l=t[F]||(t[F]={}),(s=l[r])&&s[0]===W&&s[1]===o)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(t,n,r){for(var i=0,o=n.length;o>i;i++)e(t,n[i],r);return r}function g(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function v(e,t,n,i,o,a){return i&&!i[F]&&(i=v(i)),o&&!o[F]&&(o=v(o,a)),r(function(r,a,s,l){var c,u,d,f=[],h=[],p=a.length,v=r||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:g(v,f,e,s,l),b=n?o||(r?e:p||i)?[]:a:y;if(n&&n(y,b,s,l),i)for(c=g(b,h),i(c,[],s,l),u=c.length;u--;)(d=c
 [u])&&(b[h[u]]=!(y[h[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?te.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=g(b===a?b.splice(p,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,l=h(function(e){return e===t},a,!0),c=h(function(e){return te.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=w.relative[e[s].type])u=[h(p(u),n)];else{if(n=w.filter[e[s].type].apply(null,e[s].matches),n[F]){for(r=++s;i>r&&!w.relative[e[r].type];r++);return v(s>1&&p(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&f(e))}u.push(n)
 }return p(u)}function b(t,n){var i=n.length>0,o=t.length>0,a=function(r,a,s,l,c){var u,d,f,h=0,p="0",m=r&&[],v=[],y=T,b=r||o&&w.find.TAG("*",c),x=W+=null==y?1:Math.random()||.1,C=b.length;for(c&&(T=a!==D&&a);p!==C&&null!=(u=b[p]);p++){if(o&&u){for(d=0;f=t[d++];)if(f(u,a,s)){l.push(u);break}c&&(W=x)}i&&((u=!f&&u)&&h--,r&&m.push(u))}if(h+=p,i&&p!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(h>0)for(;p--;)m[p]||v[p]||(v[p]=J.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&h+n.length>1&&e.uniqueSort(l)}return c&&(W=x,T=y),m};return i?r(a):a}var x,C,w,_,E,N,S,k,T,R,A,B,D,L,M,H,P,O,I,F="sizzle"+-new Date,z=window.document,W=0,V=0,U=n(),$=n(),q=n(),j=function(e,t){return e===t&&(A=!0),0},K=typeof t,Y=1<<31,G={}.hasOwnProperty,X=[],J=X.pop,Q=X.push,Z=X.push,ee=X.slice,te=X.indexOf||function(e){for(var 
 t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe="\\["+re+"*("+ie+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+re+"*\\]",ae=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+oe+")*)|.*)\\)|)",se=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),le=new RegExp("^"+re+"*,"+re+"*"),ce=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),ue=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]&quo
 t;,"g"),de=new RegExp(ae),fe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)&q
 uot;,"ig"),Ce=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(X=ee.call(z.childNodes),z.childNodes),X[z.childNodes.length].nodeType}catch(we){Z={apply:X.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}C=e.support={},E=e.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},B=e.setDocument=function(e){var t,n=e?e.ownerDocument||e:z,r=n.defaultView;return n!==D&&9===n.nodeType&&n.documentElement?(D=n,L=n.documentElement,M=!E(n),r&&r!==r.top&&(r.addEventListener?r.addEventListener("unload",function(){B()},!1):r.attachEvent&&r.attachEvent("onunload",function(){B()})),C.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),C.getElemen
 tsByTagName=i(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),C.getElementsByClassName=ge.test(n.getElementsByClassName),C.getById=i(function(e){return L.appendChild(e).id=F,!n.getElementsByName||!n.getElementsByName(F).length}),C.getById?(w.find.ID=function(e,t){if(typeof t.getElementById!==K&&M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(xe,Ce);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(xe,Ce);return function(e){var n=typeof e.getAttributeNode!==K&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=C.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==K?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);r
 eturn r}return o},w.find.CLASS=C.getElementsByClassName&&function(e,t){return M?t.getElementsByClassName(e):void 0},P=[],H=[],(C.qsa=ge.test(n.querySelectorAll))&&(i(function(e){e.innerHTML="<select msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&H.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||H.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||H.push(":checked")}),i(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&H.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||H.push(":enabled",&qu
 ot;:disabled"),e.querySelectorAll("*,:x"),H.push(",.*:")})),(C.matchesSelector=ge.test(O=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){C.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),P.push("!=",ae)}),H=H.length&&new RegExp(H.join("|")),P=P.length&&new RegExp(P.join("|")),t=ge.test(L.compareDocumentPosition),I=t||ge.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return A=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&r|
 |!C.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===z&&I(z,e)?-1:t===n||t.ownerDocument===z&&I(z,t)?1:R?te.call(R,e)-te.call(R,t):0:4&r?-1:1)}:function(e,t){if(e===t)return A=!0,0;var r,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!o||!s)return e===n?-1:t===n?1:o?-1:s?1:R?te.call(R,e)-te.call(R,t):0;if(o===s)return a(e,t);for(r=e;r=r.parentNode;)l.unshift(r);for(r=t;r=r.parentNode;)c.unshift(r);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===z?-1:c[i]===z?1:0},n):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&B(t),n=n.replace(ue,"='$1']"),C.matchesSelector&&M&&(!P||!P.test(n))&&(!H||!H.test(n)))try{var r=O.call(t,n);if(r||C.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(i){}return e(n,D,null,[t]).length>0},e.contains=function(e,t){return(e.ownerDocument||e)!==D&&B(e),I(e,t)},e
 .attr=function(e,n){(e.ownerDocument||e)!==D&&B(e);var r=w.attrHandle[n.toLowerCase()],i=r&&G.call(w.attrHandle,n.toLowerCase())?r(e,n,!M):t;return i!==t?i:C.attributes||!M?e.getAttribute(n):(i=e.getAttributeNode(n))&&i.specified?i.value:null},e.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},e.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!C.detectDuplicates,R=!C.sortStable&&e.slice(0),e.sort(j),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return R=null,e},_=e.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=_(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=_(t);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0},"
  ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,Ce),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,Ce),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=N(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,Ce).toLowerCase();return"*"===e?function(){return!0}:function(e
 ){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==K&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:n?(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o+" ").indexOf(r)>-1:"|="===n?o===r||o.slice(0,r.length+1)===r+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e)
 {return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],h=c[0]===W&&c[1],f=c[0]===W&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,h,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++h&&d&&d[m]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerC
 ase()]||e.error("unsupported pseudo: "+t);return o[F]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=te.call(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(e){return e=e.replace(xe,Ce),function(t){return(t.textContent||t.innerText||_(t)).indexOf(e)>-1}}),lang:r(function(t){return fe.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xe,Ce).toLowerCase(),function(e){var n;do if(n=M?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-&qu
 ot;);while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"==
 =e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e})}},w.pseudos.nth=w.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[x]=s(x);for(x in{submit:!0,reset:!0})w.pseudos[x]=l(x);return d.prototype=w.filters=w.pseudos,w.setFilters=new d,N=e.tokenize=function(t,n){var r,i,o,a,s,l,c,u=$[t+" "];if(u)return n?0:u.slice(0);for(s=t,l=[],c=w.preFilter;s;){(!r||(i=le.exec(s)))&&(i&amp
 ;&(s=s.slice(i[0].length)||s),l.push(o=[])),r=!1,(i=ce.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(se," ")}),s=s.slice(r.length));for(a in w.filter)!(i=he[a].exec(s))||c[a]&&!(i=c[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?e.error(t):$(t,l).slice(0)},S=e.compile=function(e,t){var n,r=[],i=[],o=q[e+" "];if(!o){for(t||(t=N(e)),n=t.length;n--;)o=y(t[n]),o[F]?r.push(o):i.push(o);o=q(e,b(i,r)),o.selector=e}return o},k=e.select=function(e,t,n,r){var i,o,a,s,l,c="function"==typeof e&&e,d=!r&&N(e=c.selector||e);if(n=n||[],1===d.length){if(o=d[0]=d[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&C.getById&&9===t.nodeType&&M&&w.relative[o[1].type]){if(t=(w.find.ID(a.matches[0].replace(xe,Ce),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.tes
 t(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((l=w.find[s])&&(r=l(a.matches[0].replace(xe,Ce),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!M,n,ye.test(e)&&u(t.parentNode)||t),n},C.sortStable=F.split("").sort(j).join("")===F,C.detectDuplicates=!!A,B(),C.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),i(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),C.attributes&&i(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value&quot
 ;,function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;return n?void 0:e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),e}),r(u,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l,c,u,d;n=window.opera&&window.opera.buildNumber,u=/Android/.test(t),r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,a=-1==t.indexOf("Edge/")||i||o?!1:12,i=i||o||a,s=!r&&!o&&/Gecko/.test(t),l=-1!=t.indexOf("Mac"),c=/(iPad|iPhone)/.test(t),d="FormData"in window&&"FileReader"in window&&"URL"in window&&!!URL.createObjectU
 RL,a&&(r=!1);var f=!c||d||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:s,mac:l,iOS:c,android:u,contentEditable:f,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i&&!a?document.documentMode||7:10,fileApi:d}}),r(d,[],function(){function e(e){var t=e,n,r;if(!s(e))for(t=[],n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function n(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function r(e,t){var r=[];return n(e,function(n,i){r.push(t(n,i,e))}),r}function i(e,t){var r=[];return n(e,function(e){(!t||t(e))&&r.push(e)}),r}function o(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function a(e,t,n,r){var
  i=0;for(arguments.length<3&&(n=e[0],i=1);i<e.length;i++)n=t.call(r,n,e[i],i);return n}var s=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{isArray:s,toArray:e,each:n,map:r,filter:i,indexOf:o,reduce:a}}),r(f,[u,d],function(e,n){function r(e){return null===e||e===t?"":(""+e).replace(h,"")}function i(e,r){return r?"array"==r&&n.isArray(e)?!0:typeof e==r:e!==t}function o(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function a(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&
 (i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],c?o[a]=function(){return i[s].apply(this,arguments)}:o[a]=function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function s(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function l(e,t,r,i){i=i||this,e&&(r&&(e=e[r]),n.each(e,function(e,n){return t.call(i,e,n,r)===!1?!1:void l(e,t,r,i)}))}function c(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;n<e.length;n++)r=e[n],t[r]||(t[r]={}),t=t[r];return t}function u(e,t){var n,r;for(t=t||window,e=e.split("."),n=0,r=e.length;r>n&&(t=t[e[n]],t);n++);return
  t}function d(e,t){return!e||i(e,"array")?e:n.map(e.split(t||","),r)}function f(t){var n=e.cacheSuffix;return n&&(t+=(-1===t.indexOf("?")?"?":"&")+n),t}var h=/^\s*|\s*$/g;return{trim:r,isArray:n.isArray,is:i,toArray:n.toArray,makeMap:o,each:n.each,map:n.map,grep:n.filter,inArray:n.indexOf,extend:s,create:a,walk:l,createNS:c,resolve:u,explode:d,_addCacheSuffix:f}}),r(h,[l,c,f,u],function(e,n,r,i){function o(e){return"undefined"!=typeof e}function a(e){return"string"==typeof e}function s(e){return e&&e==e.window}function l(e,t){var n,r,i;for(t=t||w,i=t.createElement("div"),n=t.createDocumentFragment(),i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return n}function c(e,t,n,r){var i;if(a(t))t=l(t,v(e[0]));else if(t.length&&!t.nodeType){if(t=f.makeArray(t),r)for(i=t.length-1;i>=0;i--)c(e,t[i],n,r);else for(i=0;i<t.length;i++)c(e,t[i],n,r);return e}if(t.nodeType)for(i=e.lengt
 h;i--;)n.call(e[i],t);return e}function u(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")}function d(e,t,n){var r,i;return t=f(t)[0],e.each(function(){var e=this;n&&r==e.parentNode?i.appendChild(e):(r=e.parentNode,i=t.cloneNode(!1),e.parentNode.insertBefore(i,e),i.appendChild(e))}),e}function f(e,t){return new f.fn.init(e,t)}function h(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===k?"":(""+e).replace(H,"")}function m(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,r,a)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,i,a)!==!1);i++);return e}function g(e,t){var n=[];return m(e,function(e,r){t(r,e)&&n.push(r)}),n}function v(e){return e?9==e.nodeType?e:e.ownerDocument:w}function y(e,n,r){var i=[],o=e[n];for("string&qu
 ot;!=typeof r&&r instanceof f&&(r=r[0]);o&&9!==o.nodeType;){if(r!==t){if(o===r)break;if("string"==typeof r&&f(o).is(r))break}1===o.nodeType&&i.push(o),o=o[n]}return i}function b(e,n,r,i){var o=[];for(i instanceof f&&(i=i[0]);e;e=e[n])if(!r||e.nodeType===r){if(i!==t){if(e===i)break;if("string"==typeof i&&f(e).is(i))break}o.push(e)}return o}function x(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType==n)return e;return null}function C(e,t,n){m(n,function(n,r){e[n]=e[n]||{},e[n][t]=r})}var w=document,_=Array.prototype.push,E=Array.prototype.slice,N=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,S=e.Event,k,T=r.makeMap("children,contents,next,prev"),R=r.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),A=r.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),B={
-"for":"htmlFor","class":"className",readonly:"readOnly"},D={"float":"cssFloat"},L={},M={},H=/^\s*|\s*$/g;return f.fn=f.prototype={constructor:f,selector:"",context:null,length:0,init:function(e,t){var n=this,r,i;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(t&&t.nodeType)n.context=t;else{if(t)return f(e).attr(t);n.context=t=document}if(a(e)){if(n.selector=e,r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!r)return f(t).find(e);if(r[1])for(i=l(e,v(t)).firstChild;i;)_.call(n,i),i=i.nextSibling;else{if(i=v(t).getElementById(r[2]),!i)return n;if(i.id!==r[2])return n.find(e);n.length=1,n[0]=i}}else this.add(e,!1);return n},toArray:function(){return r.toArray(this)},add:function(e,t){var n=this,r,i;if(a(e))return n.add(f(e));if(t!==!1)for(r=f.unique(n.toArray().concat(f.makeArray(e))),n.length=r.len
 gth,i=0;i<r.length;i++)n[i]=r[i];else _.apply(n,f.makeArray(e));return n},attr:function(e,t){var n=this,r;if("object"==typeof e)m(e,function(e,t){n.attr(e,t)});else{if(!o(t)){if(n[0]&&1===n[0].nodeType){if(r=L[e],r&&r.get)return r.get(n[0],e);if(A[e])return n.prop(e)?e:k;t=n[0].getAttribute(e,2),null===t&&(t=k)}return t}this.each(function(){var n;if(1===this.nodeType){if(n=L[e],n&&n.set)return void n.set(this,t);null===t?this.removeAttribute(e,2):this.setAttribute(e,t,2)}})}return n},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if(e=B[e]||e,"object"==typeof e)m(e,function(e,t){n.prop(e,t)});else{if(!o(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1==this.nodeType&&(this[e]=t)})}return n},css:function(e,t){function n(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})}function r(e){return e.replace(/[A-Z]/g,function(e){return"
 -"+e})}var i=this,a,s;if("object"==typeof e)m(e,function(e,t){i.css(e,t)});else if(o(t))e=n(e),"number"!=typeof t||R[e]||(t+="px"),i.each(function(){var n=this.style;if(s=M[e],s&&s.set)return void s.set(this,t);try{this.style[D[e]||e]=t}catch(i){}(null===t||""===t)&&(n.removeProperty?n.removeProperty(r(e)):n.removeAttribute(e))});else{if(a=i[0],s=M[e],s&&s.get)return s.get(a);if(a.ownerDocument.defaultView)try{return a.ownerDocument.defaultView.getComputedStyle(a,null).getPropertyValue(r(e))}catch(l){return k}else if(a.currentStyle)return a.currentStyle[n(e)]}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],S.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(o(e)){n=t.length;try{for(;n--;)t[n].innerHTML=e}catch(r){f(t[n]).
 empty().append(e)}return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(o(e)){for(n=t.length;n--;)"innerText"in t[n]?t[n].innerText=e:t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return c(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return c(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)},!0)},before:function(){var e=this;return e[0]&&e[0].parentNode?c(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?c(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):e},appendTo:function(e){return f(e).append(this),this},prependTo:function(e){return f(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return d(this,e)},wrapAll:function(e){return d(
 this,e,!0)},wrapInner:function(e){return this.each(function(){f(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){f(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),f(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return"string"!=typeof e?n:(-1!==e.indexOf(" ")?m(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n,r){var i,o;o=u(r,e),o!==t&&(i=r.className,o?r.className=p((" "+i+" ").replace(" "+e+" "," ")):r.className+=i?" "+e:e)}),n)},hasClass:function(e){return u(this[0],e)},each:function(e){return m(this,e)},on:function(e,t){return this.each(function(){S.bind(this,e,t)})},off:function(e,t){return this.each(function(){S.unbind(this,e,t)})},trigger:function(e){r
 eturn this.each(function(){"object"==typeof e?S.fire(this,e.type,e):S.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new f(E.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)f.find(e,this[t],r);return f(r)},filter:function(e){return f("function"==typeof e?g(this.toArray(),function(t,n){return e(n,t)}):f.filter(e,this.toArray()))},closest:function(e){var t=[];return e instanceof f&&(e=e[0]),this.each(function(n,r){for(;r;){if("string"==typeof e&&f(r).is(e)){t.push(r);break}if(r==e){t.push(r);break}r=r.parentNode}}),f(t)},offset:function(e){var t,n,r,i=0,o=0,a;return e?this.css(e):(t=this[0],t&&(n=t.ownerDocument,r=n.documentElement,t
 .getBoundingClientRect&&(a=t.getBoundingClientRect(),i=a.left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,o=a.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:o})},push:_,sort:[].sort,splice:[].splice},r.extend(f,{extend:r.extend,makeArray:function(e){return s(e)||e.nodeType?[e]:r.toArray(e)},inArray:h,isArray:r.isArray,each:m,trim:p,grep:g,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,contains:n.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!=t[r].nodeType&&t.splice(r,1);return t=1===t.length?f.find.matchesSelector(t[0],e)?[t[0]]:[]:f.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return y(e,"parentNode")},next:function(e){return x(e,"nextSibling",1)},prev:function(e){return x(e,"previousSibling",1)},children:function(e){return b(e.firstChild,"nextSibling",1)},con
 tents:function(e){return r.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){f.fn[e]=function(n){var r=this,i=[];return r.each(function(){var e=t.call(i,this,n,i);e&&(f.isArray(e)?i.push.apply(i,e):i.push(e))}),this.length>1&&(T[e]||(i=f.unique(i)),0===e.indexOf("parents")&&(i=i.reverse())),i=f(i),n?i.filter(n):i}}),m({parentsUntil:function(e,t){return y(e,"parentNode",t)},nextUntil:function(e,t){return b(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return b(e,"previousSibling",1,t).slice(1)}},function(e,t){f.fn[e]=function(n,r){var i=this,o=[];return i.each(function(){var e=t.call(o,this,n,o);e&&(f.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=f.unique(o),(0===e.indexOf("parents")||"prevUntil"===e)&&(o=o.reverse())),o=f(o),r?o.filter(r):o}}),f.fn.is=function(e){return!!e&&t
 his.filter(e).length>0},f.fn.init.prototype=f.fn,f.overrideDefaults=function(e){function t(r,i){return n=n||e(),0===arguments.length&&(r=n.element),i||(i=n.context),new t.fn.init(r,i)}var n;return f.extend(t,this),t},i.ie&&i.ie<8&&(C(L,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?k:t},size:function(e){var t=e.size;return 20===t?k:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?k:t}}),C(L,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),i.ie&&i.ie<9&&(D["float"]="styleFloat",C(M,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),f.attrHooks=L,f.cssHooks=M,f}),r(p,[],function(){return function(e,t){function n(e,t,n,r){function i
 (e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d,f,h="\ufeff";for(e=e||{},t&&(d=t.getValidStyles(),f=t.getInvalidStyles()),u=("\\\" \\' \\; \\: ; : "+h).split(" "),l=0;l<u.length;l++)c[u[l]]=h+l,c[h+l]=u[l];return{toHex:function(e){return e.replace(r,n)},parse:function(t){function s(e,t,n){var r,i,o,a;if(r=m[e+"-top"+t],r&&(i=m[e+"-right"+t],i&&(o=m[e+"-bottom"+t],o&&(a=m[e+"-left"+t])))){var s=[r,i,o,a];for(l=s.length-1;l--&&s[l]===s[l+1];);l>-1&&n||(m[e+t]=-1==l?s[0]:s.join(" "),delete m[e+"-top"+t],delete 
 m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function h(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function p(t,n,r,i,o,a){if(o=o||a)return o=h(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=h(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return x&&(n=x.call(C,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,
 x=e.url_converter,C=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,p),m[v]=b?h(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s(&
 quot;margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,t){function n(t){var n,r,o,a;if(n=d[t])for(r=0,o=n.length;o>r;r++)t=n[r],a=e[t],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+t+": "+a+";")}function r(e,t){var n;return n=f["*"],n&&n[e]?!1:(n=f[t],n&&n[e]?!1:!0)}var i="",o,a;if(t&&d)n("*"),n(t);else for(o in e)a=e[o],a!==s&&a.length>0&&(!f||r(o,t))&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(m,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parent
 Node;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(g,[f],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[$]=M[W]):(M[V]=M[U],M[W]=M[$]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function h(e,t){var n=M[V],r=M[W],i=M[U],o=M[$],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function p(){E(I)}function m(){return E(P)}function g(){return E(O)}fun
 ction v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return q(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[$],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function x(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function C(){return M[V]==M[U]&&M[W]==M[$]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;retu
 rn a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[$]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[$])>0&&M.collapse(e):M.collapse(e),M.collapsed=C(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function E(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return N(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentN
 ode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function N(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[$])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[$]),e!=O&&(o=M[V],c=M[W],u=M[$]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=x(M[V],M[W]),a=M[$]-M[W];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),
 o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[$]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=x(M[U],M[$]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=x(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o
 .appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[$],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",$="endOffset",q=e.extend,j=n.nodeIndex;return q(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNo
 de:d,selectNodeContents:f,compareBoundaryPoints:h,deleteContents:p,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(v,[f],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),o[r]||(i="&"+e[n+1]+";",a[r]=i,a[i]=r);return a}}var r=e.makeMap,i,o,a,s=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021
 ",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},a={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,no
 t,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,del
 ta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,nda
 sh,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decod
 e:function(e){return e.replace(u,function(e,n){return n?(n="x"===n.charAt(0).toLowerCase()?parseInt(n.substr(1),16):parseInt(n,10),n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):d[n]||String.fromCharCode(n)):a[e]||i[e]||t(e)})}};return f}),r(y,[f],function(e){return function(t,n){function r(e){t.getElementsByTagName("head")[0].appendChild(e)}function i(n,i,l){function c(){for(var e=y.passed,t=e.length;t--;)e[t]();y.status=2,y.passed=[],y.failed=[]}function u(){for(var e=y.failed,t=e.length;t--;)e[t]();y.status=3,y.passed=[],y.failed=[]}function d(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function f(e,t){e()||((new Date).getTime()-v<s?window.setTimeout(t,0):u())}function h(){f(function(){for(var e=t.styleSheets,n,r=e.length,i;r--;)if(n=e[r],i=n.ownerNode?n.ownerNode:n.owningElement,i&&i.id===m.id)return c(),!0},h)}function p(){f(function(){try{var e=g.sheet.cssRules;return c(),
 !!e}catch(t){}},p)}var m,g,v,y;if(n=e._addCacheSuffix(n),a[n]?y=a[n]:(y={passed:[],failed:[]},a[n]=y),i&&y.passed.push(i),l&&y.failed.push(l),1!=y.status){if(2==y.status)return void c();if(3==y.status)return void u();if(y.status=1,m=t.createElement("link"),m.rel="stylesheet",m.type="text/css",m.id="u"+o++,m.async=!1,m.defer=!1,v=(new Date).getTime(),"onload"in m&&!d())m.onload=h,m.onerror=u;else{if(navigator.userAgent.indexOf("Firefox")>0)return g=t.createElement("style"),g.textContent='@import "'+n+'"',p(),void r(g);h()}r(m),m.href=n}}var o=0,a={},s;n=n||{},s=n.maxLoadTime||5e3,this.load=i}}),r(b,[c,h,p,l,m,g,v,u,f,y],function(e,n,r,i,o,a,s,l,c,u){function d(e,t){var n={},r=t.keep_values,i;return i={set:function(n,r,i){t.url_converter&&(r=t.url_converter.call(t.url_converter_scope||e,r,i,n[0])),n.attr("data-mce-"+i,r).attr(i,r)},get:function(e,t){return e.att
 r("data-mce-"+t)||e.attr(t)}},n={style:{set:function(e,t){return null!==t&&"object"==typeof t?void e.css(t):(r&&e.attr("data-mce-style",t),void e.attr("style",t))},get:function(t){var n=t.attr("data-mce-style")||t.attr("style");return n=e.serializeStyle(e.parseStyle(n),t[0].nodeName)}}},r&&(n.href=n.src=i),n}function f(e,t){var n=t.attr("style");n=e.serializeStyle(e.parseStyle(n),t[0].nodeName),n||(n=null),t.attr("data-mce-style",n)}function h(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n}function p(e,t){var o=this,a;o.doc=e,o.win=window,o.files={},o.counter=0,o.stdMode=!b||e.documentMode>=8,o.boxModel=!b||"CSS1Compat"==e.compatMode||o.stdMode,o.styleSheetLoader=new u(e),o.boundEvents=[],o.settings=t=t||{},o.schema=t.schema,o.styles=new r({url_conve
 rter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),o.fixDoc(e),o.events=t.ownEvents?new i(t.proxy):i.Event,o.attrHooks=d(o,t),a=t.schema?t.schema.getBlockElements():{},o.$=n.overrideDefaults(function(){return{context:e,element:o.getRoot()}}),o.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!a[e.nodeName]):!!a[e]}}var m=c.each,g=c.is,v=c.grep,y=c.trim,b=l.ie,x=/^([a-z0-9],?)+$/i,C=/^[ \t\r\n]*$/;return p.prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){var t=this.settings,n;if(b&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!b||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.crea
 teElement(e.nodeName),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.settings.root_element||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.ge
 tRoot().nodeName?o.getRoot().parentNode:null),g(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.settings.root_element||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(x.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeT
 ype?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=g(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&"undefined"!=typeof t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"</"+e+">":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3
 ==e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&f(this,e)},getStyle:function(e,n,r){return e=this.$$(e),r?e.css(n):(n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=l.ie&&l.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[n]:t)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&f(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this,i,o,a=r.settings;""===n&&(n=null),e=r.$$(e),i=e.attr(t),e.length&&(o=r.attrHooks[t],o&&o.set?o.set(e,n,t):e.attr(t,n),i!=n&&a.onSetAttrib&&a.onSetAttrib({attrElm:e,
 attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.$$(e).each(function(e,r){m(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r=this,i,o;return e=r.$$(e),e.length&&(i=r.attrHooks[t],o=i&&i.get?i.get(e,t):e.attr(t)),"undefined"==typeof o&&(o=n||""),o},getPos:function(e,t){var r=this,i=0,o=0,a,s=r.doc,l=s.body,c;if(e=r.get(e),t=t||l,e){if(t===l&&e.getBoundingClientRect&&"static"===n(l).css("position"))return c=e.getBoundingClientRect(),t=r.boxModel?s.documentElement:l,i=c.left+(s.documentElement.scrollLeft||l.scrollLeft)-t.clientLeft,o=c.top+(s.documentElement.scrollTop||l.scrollTop)-t.clientTop,{x:i,y:o};for(a=e;a&&a!=t&&a.nodeType;)i+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=e.parentNode;a&&a!=t&&a.nodeType;)i-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode}return{x:i,y:o}},parseStyle:function(e){return this.styles.pars
 e(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==p.DOM&&n===document){var o=p.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,p.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==p.DOM&&n===document?void p.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void m(e.split(","),function(e){var i;e=c._addCacheSuffix(e),t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),b&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.on
 load=null}),r.appendChild(i))}))},addClass:function(e,t){this.$$(e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,r){this.$$(e).toggleClass(t,r).each(function(){""===this.className&&n(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"==this.$$(e).css("display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),b?e.each(function(e,r){if(r.canHaveHTML!==!1){for(;r.firstChild;)r.removeChild(r.firstChild);try{r.innerHTML="<br>"+t,r.removeChild(r.firstChild)}catch(i){n("<div>").html("<br>"+t).contents().slice(1).appendTo(r)}return t}}):e.html(t)},getOuterHTML:function(e){return e=this.get(e),1==e.nodeType&&"outerHTML"in e?e.outerHTML:n("<d
 iv>").append(n(e).clone()).html()},setOuterHTML:function(e,t){var r=this;r.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}r.remove(n(this).html(t),!0)})},decode:s.decode,encode:s.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return g(t,"array")&&(e=e.cloneNode(!0)),n&&m(v(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.
 documentElement:n},toHex:function(e){return this.styles.toHex(c.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],m(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(b){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;
-return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,i,a,s,l,c=0;if(e=e.firstChild){s=new o(e,e.parentNode),t=t||(n.schema?n.schema.getNonEmptyElements():null);do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(i=n.getAttribs(e),r=i.length;r--;)if(l=i[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!C.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new a(this)},nodeIndex:h,split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}v
 ar n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=y(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,
 n,r){var i=this;if(c.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(c.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function()
 {var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},p.DOM=new p(document),p.nodeIndex=h,p}),r(x,[b,f],function(e,t){function n(){function e(e,n){function i(){a.remove(l),s&&(s.onreadystatechange=s.onload=s=null),n()}function o(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var a=r,s,l;l=a.u
 niqueId(),s=document.createElement("script"),s.id=l,s.type="text/javascript",s.src=t._addCacheSuffix(e),"onreadystatechange"in s?s.onreadystatechange=function(){/loaded|complete/.test(s.readyState)&&i()}:s.onload=i,s.onerror=o,(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}var n=0,a=1,s=2,l={},c=[],u={},d=[],f=0,h;this.isDone=function(e){return l[e]==s},this.markDone=function(e){l[e]=s},this.add=this.load=function(e,t,r){var i=l[e];i==h&&(c.push(e),l[e]=n),t&&(u[e]||(u[e]=[]),u[e].push({func:t,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(c,e,t)},this.loadScripts=function(t,n,r){function c(e){i(u[e],function(e){e.func.call(e.scope)}),u[e]=h}var p;d.push({func:n,scope:r||this}),(p=function(){var n=o(t);t.length=0,i(n,function(t){return l[t]==s?void c(t):void(l[t]!=a&&(l[t]=a,f++,e(t,function(){l[t]=s,f--,c(t),p()})))}),f||(i(d,function(e){e.func.call(e.scope)}),d.length
 =0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[x,f],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n
 ,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(w,[f,m],function(e,t){function n(e,t){var n=e.childNodes;return t--,t>n.length-1?t=n.length-1:0>t&&(t=0),n[t]||e}function r(e){this.walk=function(t,r){function o(e){var t;return t=e[0],3===t.nodeType&&t===c&&u>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===f&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e}function a(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function s(e,t){do{i
 f(e.parentNode==t)return e;e=e.parentNode}while(e)}function l(e,t,n){var i=n?"nextSibling":"previousSibling";for(g=e,v=g.parentNode;g&&g!=t;g=v)v=g.parentNode,y=a(g==e?g:g[i],i),y.length&&(n||y.reverse(),r(o(y)))}var c=t.startContainer,u=t.startOffset,d=t.endContainer,f=t.endOffset,h,p,m,g,v,y,b;if(b=e.select("td.mce-item-selected,th.mce-item-selected"),b.length>0)return void i(b,function(e){r([e])});if(1==c.nodeType&&c.hasChildNodes()&&(c=c.childNodes[u]),1==d.nodeType&&d.hasChildNodes()&&(d=n(d,f)),c==d)return r(o([c]));for(h=e.findCommonAncestor(c,d),g=c;g;g=g.parentNode){if(g===d)return l(c,h,!0);if(g===h)break}for(g=d;g;g=g.parentNode){if(g===c)return l(d,h);if(g===h)break}p=s(c,h)||c,m=s(d,h)||d,l(c,p,!0),y=a(p==c?p:p.nextSibling,"nextSibling",m==d?m.nextSibling:m),y.length&&r(o(y)),l(d,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.st
 artOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&r<n.nodeValue.length&&(i=t(n,r),n=i.previousSibling,o>r?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r<n.nodeValue.length&&(n=t(n,r),r=0),3==i.nodeType&&o>0&&o<i.nodeValue.length&&(i=t(i,o).previousSibling,o=i.nodeValue.length)),{startContainer:n,startOffset:r,endContainer:i,endOffset:o}},this.normalize=function(n){function r(r){function a(e){return e&&/^(TD|TH|CAPTION)$/.test(e.nodeName)}function s(n,r){for(var i=new t(n,e.getParent(n.parentNode,e.isBlock)||h);n=i[r?"prev":"next"]();)if("BR"===n.nodeName)return!0}function l(e,t){return e.previousSibling&&e.previousSibling.nodeName==t}function c(n,r){var a,s,l;if(r=r||u,l=e.getParent(r.parentNode,e.isBlock)||h,n&&"BR"==r.nodeName&&v&&e.isEmpty(l))retur
 n u=r.parentNode,d=e.nodeIndex(r),void(i=!0);for(a=new t(r,l);p=a[n?"prev":"next"]();){if("false"===e.getContentEditableParent(p))return;if(3===p.nodeType&&p.nodeValue.length>0)return u=p,d=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||m[p.nodeName.toLowerCase()])return;s=p}o&&s&&(u=s,i=!0,d=0)}var u,d,f,h=e.getRoot(),p,m,g,v;if(u=n[(r?"start":"end")+"Container"],d=n[(r?"start":"end")+"Offset"],v=1==u.nodeType&&d===u.childNodes.length,m=e.schema.getNonEmptyElements(),g=r,1==u.nodeType&&d>u.childNodes.length-1&&(g=!1),9===u.nodeType&&(u=e.getRoot(),d=0),u===h){if(g&&(p=u.childNodes[d>0?d-1:0],p&&(m[p.nodeName]||"TABLE"==p.nodeName)))return;if(u.hasChildNodes()&&(d=Math.min(!g&&d>0?d-1:d,u.childNodes.length-1),u=u.childNodes[d],d=0,u.hasChildNodes()&&!/TABLE/.test(u.nodeName)
 )){p=u,f=new t(u,h);do{if(3===p.nodeType&&p.nodeValue.length>0){d=g?0:p.nodeValue.length,u=p,i=!0;break}if(m[p.nodeName.toLowerCase()]&&!a(p)){d=e.nodeIndex(p),u=p.parentNode,"IMG"!=p.nodeName||g||d++,i=!0;break}}while(p=g?f.next():f.prev())}}o&&(3===u.nodeType&&0===d&&c(!0),1===u.nodeType&&(p=u.childNodes[d],p||(p=u.childNodes[d-1]),!p||"BR"!==p.nodeName||l(p,"A")||s(p)||s(p,!0)||c(!0,p))),g&&!o&&3===u.nodeType&&d===u.nodeValue.length&&c(!1),i&&n["set"+(r?"Start":"End")](u,d)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var i=e.each;return r.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&
 &t.isEqual(e))return!0}return!1},r.getCaretRangeFromPoint=function(e,t,n){var r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(o){r.collapse(t<n.body.clientHeight)}}return r},r.getNode=function(e,t){return 1==e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},r}),r(_,[w,u],function(e,t){return function(n){function r(e){var t,r;if(r=n.$(e).parentsUntil(n.getBody()).add(e),r.length===o.length){for(t=r.length;t>=0&&r[t]===o[t];t--);if(-1===t)return o=r,!0}return o=r,!1}var i,o=[];"onselectionchange"in n.getDoc()||n.on("NodeChange Click MouseUp KeyUp Focus",function(t){var r,o;r=n.selection.getRng(),o={startContainer:r.startContain
 er,startOffset:r.startOffset,endContainer:r.endContainer,endOffset:r.endOffset},"nodechange"!=t.type&&e.compareRanges(o,i)||n.fire("SelectionChange"),i=o}),n.on("contextmenu",function(){n.fire("SelectionChange")}),n.on("SelectionChange",function(){var e=n.selection.getStart(!0);(t.range||!n.selection.isCollapsed())&&!r(e)&&n.dom.isChildOf(e,n.getBody())&&n.nodeChanged({selectionChange:!0})}),n.on("MouseUp",function(e){e.isDefaultPrevented()||("IMG"==n.selection.getNode().nodeName?setTimeout(function(){n.nodeChanged()},0):n.nodeChanged())}),this.nodeChanged=function(e){var t=n.selection,r,i,o;n.initialized&&t&&!n.settings.disable_nodechange&&!n.settings.readonly&&(o=n.getBody(),r=t.getStart()||o,r=r.ownerDocument!=n.getDoc()?n.getBody():r,"IMG"==r.nodeName&&t.isCollapsed()&&(r=r.parentNode),i=[],n.dom.getParent(r,function(e){r
 eturn e===o?!0:void i.push(e)}),e=e||{},e.element=r,e.parents=i,n.fire("NodeChange",e))}}}),r(E,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.len
 gth;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e
 ,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=fu
 nction(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(N,[f],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e,t){var n={},r,i;for(r=0,i=e.length;i>r;r++)n[e[r]]=t||{};return n}var s,c,u,d=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),c=3;c<d.length;c++)"string"==typeof d[c]&&(d[c]=t(d[c])),r.push.apply(r,d[c]);for(e=t(e),s=e.length;s--;)u=[].concat(l,t(n)),a[e[s]]={attributes:i(u),attributesOrder:u,children:i(r,o)}}function r(e,n){var r,i,o,s;for(e=t(e),r=e.length,n=t(n);r--;)for(i=a[e[r]],o=0,s=n.length;s>o;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},l,c,u,d,f,h;return i[e]?i[e]:(l=t("id accesskey class dir lang style tabindex title"),c=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),u=t("a abbr b bdo br button cite code del dfn em embed i
  iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(l.push.apply(l,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),c.push.apply(c,t("article aside details dialog figure header footer hgroup section nav")),u.push.apply(u,t("audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(l.push("xml:lang"),h=t("acronym applet basefont big font strike tt"),u.push.apply(u,h),s(h,function(e){n(e,"",u)}),f=t("center dir isindex noframes"),c.push.apply(c,f),d=[].concat(c,u),s(f,function(e){n(e,"",d)})),d=d||[].concat(c,u),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title
  hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",d),n("address dt dd div caption","",d),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",u),n("blockquote","cite",d),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",d),n("dl","","dt dd"),n("a","hre
 f target rel media hreflang type",u),n("q","cite",u),n("ins del","cite datetime",d),n("img","src sizes srcset alt usemap ismap width height"),n("iframe","src name width height",d),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",d,"param"),n("param","name value"),n("map","name",d,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan 
 headers",d),n("th","colspan rowspan headers scope abbr",d),n("form","accept-charset action autocomplete enctype method name novalidate target",d),n("fieldset","disabled form name",d,"legend"),n("label","form for",u),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?d:u),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled 
 form maxlength name readonly required rows wrap"),n("menu","type label",d,"li"),n("noscript","",d),"html4"!=e&&(n("wbr"),n("ruby","",u,"rt rp"),n("figcaption","",d),n("mark rt rp summary bdi","",u),n("canvas","width height",d),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",d,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",d,"track source"),n("picture","","img source"),n("source","src srcset type media sizes"),n("track","kind src srclang label default"),n("datalist","",u,"option"),n("article section nav aside header footer","&
 quot;,d),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",d,"figcaption"),n("time","datetime",u),n("dialog","open",d),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",u),n("progress","value max",u),n("meter","value min max low high optimum",u),n("details","open",d,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(r("script","language xml:space"),r("style","xml:space"),r("object","declare classid code codebase codetype archive standby align border hspace vspace"),r("embed","align name hspace vspace"),r("param","valuetype type"),r("a","charse
 t name rev shape coords"),r("br","clear"),r("applet","codebase archive code object alt name width height align hspace vspace"),r("img","name longdesc align border hspace vspace"),r("iframe","longdesc frameborder marginwidth marginheight scrolling align"),r("font basefont","size color face"),r("input","usemap align"),r("select","onchange"),r("textarea"),r("h1 h2 h3 h4 h5 h6 div p legend caption","align"),r("ul","type compact"),r("li","type"),r("ol dl menu dir","compact"),r("pre","width xml:space"),r("hr","align noshade size width"),r("isindex","prompt"),r("table","summary width frame rules cellspacing cellpadding align bgcolor"),r("col","width align char charo
 ff valign"),r("colgroup","width align char charoff valign"),r("thead","align char charoff valign"),r("tr","align char charoff valign bgcolor"),r("th","axis align char charoff valign nowrap bgcolor width height"),r("form","accept"),r("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),r("tfoot","align char charoff valign"),r("tbody","align char charoff valign"),r("area","nohref"),r("body","background bgcolor text link vlink alink")),"html4"!=e&&(r("input button select textarea","autofocus"),r("input textarea","placeholder"),r("a","download"),r("link script img","crossorigin"),r("iframe","sandbox seamless allowfullscreen")),s(t("a form m
 eter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,delete a.script,i[e]=a,a)}function r(e,t){var n;return e&&(n={},"string"==typeof e&&(e={"*":e}),s(e,function(e,r){n[r]=n[r.toUpperCase()]="map"==t?a(e,/[, ]/):c(e,/[, ]/)})),n}var i={},o={},a=e.makeMap,s=e.each,l=e.extend,c=e.explode,u=e.inArray;return function(e){function o(t,n,r){var o=e[t];return o?o=a(o,/[, ]/,a(o.toUpperCase(),/[, ]/)):(o=i[t],o||(o=a(n," ",a(n.toUpperCase()," ")),o=l(o,r),i[t]=o)),o}function d(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function f(e){var n,r,i,o,s,l,c,f,h,p,m,g,v,b,C,w,_,E,N,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),y["@"]&&(w=y["@"].attributes,_=y["@"].attributesOrder),n=0,r
 =e.length;r>n;n++)if(s=S.exec(e[n])){if(b=s[1],h=s[2],C=s[3],f=s[5],g={},v=[],l={attributes:g,attributesOrder:v},"#"===b&&(l.paddEmpty=!0),"-"===b&&(l.removeEmpty=!0),"!"===s[4]&&(l.removeEmptyAttrs=!0),w){for(E in w)g[E]=w[E];v.push.apply(v,_)}if(f)for(f=t(f,"|"),i=0,o=f.length;o>i;i++)if(s=k.exec(f[i])){if(c={},m=s[1],p=s[2].replace(/::/g,":"),b=s[3],N=s[4],"!"===m&&(l.attributesRequired=l.attributesRequired||[],l.attributesRequired.push(p),c.required=!0),"-"===m){delete g[p],v.splice(u(v,p),1);continue}b&&("="===b&&(l.attributesDefault=l.attributesDefault||[],l.attributesDefault.push({name:p,value:N}),c.defaultValue=N),":"===b&&(l.attributesForced=l.attributesForced||[],l.attributesForced.push({name:p,value:N}),c.forcedValue=N),"<"===b&&(c.validValues=a(N,"?"))),T.test(p)?(l.attributePatterns=l.attri
 butePatterns||[],c.pattern=d(p),l.attributePatterns.push(c)):(g[p]||v.push(p),g[p]=c)}w||"@"!=h||(w=g,_=v),C&&(l.outputName=h,y[C]=l),T.test(h)?(l.pattern=d(h),x.push(l)):y[h]=l}}function h(e){y={},x=[],f(e),s(_,function(e,t){b[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(i.text_block_elements=i.block_elements=null,s(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",o=t[2];if(b[o]=b[i],M[o]=i,r||(R[o.toUpperCase()]={},R[o]={}),!y[o]){var a=y[i];a=l({},a),delete a.removeEmptyAttrs,delete a.removeEmpty,y[o]=a}s(b,function(e,t){e[i]&&(b[t]=e=l({},b[t]),e[o]=e[i])})}))}function m(n){var r=/^([+\-]?)(\w+)\[([^\]]+)\]$/;i[e.schema]=null,n&&s(t(n,","),function(e){var n=r.exec(e),i,o;n&&(o=n[1],i=o?b[n[2]]:b[n[2]]={"#comment":{}},i=b[n[2]],s(t(n[3],"|"),function(e){"-"===o?delete i[e]:i[e]={}}))})}function g(e){var t=y[e],n;if(t)return t;
 for(n=x.length;n--;)if(t=x[n],t.pattern.test(e))return t}var v=this,y={},b={},x=[],C,w,_,E,N,S,k,T,R,A,B,D,L,M={},H={};e=e||{},_=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),C=r(e.valid_styles),w=r(e.invalid_styles,"map"),T=r(e.valid_classes,"map"),E=o("whitespace_elements","pre script noscript style textarea video audio iframe object"),N=o("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),S=o("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),k=o("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),A=o("non_empty_elements","td th iframe video audio object script",S),B=o("move_caret_before_on_enter_elements","table",A),D=o("
 text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),R=o("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",D),L=o("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),s((e.special||"script noscript style textarea").split(" "),function(e){H[e]=new RegExp("</"+e+"[^>]*>","gi")}),e.valid_elements?h(e.valid_elements):(s(_,function(e,t){y[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},b[t]=e.children}),"html5"!=e.schema&&s(t("strong/b em/i"),function(e){e=t(e,"/"),y[e[1]].outputName=e[0]}),y.img.attributesDefault=[{name:"alt",value:""}],s(t("ol ul sub sup blockquote span font 
 a table tbody tr strong em b i"),function(e){y[e]&&(y[e].removeEmpty=!0)}),s(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){y[e].paddEmpty=!0}),s(t("span"),function(e){y[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),f(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&s(c(e.invalid_elements),function(e){y[e]&&delete y[e]}),g("span")||f("span[!data-mce-type|*]"),v.children=b,v.getValidStyles=function(){return C},v.getInvalidStyles=function(){return w},v.getValidClasses=function(){return T},v.getBoolAttrs=function(){return k},v.getBlockElements=function(){return R},v.getTextBlockElements=function(){return D},v.getTextInlineElements=function(){return L},v.getShortEndedElements=function(){return S},v.getSelfClosingElements=function(){return N},v.getNonEmptyElements=function(){return A},v.getMoveCaretBeforeOnEnterElements=function(){return B},v.ge
 tWhiteSpaceElements=function(){return E},v.getSpecialElements=function(){return H},v.isValidChild=function(e,t){var n=b[e];return!(!n||!n[t])},v.isValid=function(e,t){var n,r,i=g(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},v.getElementRule=g,v.getCustomElements=function(){return M},v.addValidElements=f,v.setValidElements=h,v.addCustomElements=p,v.addValidChildren=m,v.elements=y}}),r(S,[N,v,f],function(e,t,n){function r(e,t,n){var r=1,i,o,a,s;for(s=e.getShortEndedElements(),a=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g,a.lastIndex=i=n;o=a.exec(t);){if(i=a.lastIndex,"/"===o[1])r--;else if(!o[1]){if(o[2]in s)continue;r++}if(0===r)break}return i}function i(i,a){function s(){}var l=this;i=i||{},l.schema=a=a||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),o("comment cdata text sta
 rt end pi doctype".split(" "),function(e){e&&(l[e]=i[e]||s)}),l.parse=function(e){function o(e){var t,n;for(t=h.length;t--&&h[t].name!==e;);if(t>=0){for(n=h.length-1;n>=t;n--)e=h[n],e.valid&&l.end(e.name);h.length=t}}function s(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:z(n||r||o||""),_&&!y&&0!==t.indexOf("data-")){if(a=T[t],!a&&R){for(s=R.length;s--&&(a=R[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(V[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{c=decodeURIComponent(c)}catch(u){c=unescape(c)}if(U.test(c))return;if(!i.allow_html_data_urls&&$.test(c)&&!/^data:image\//i.test(c))return}p.map[t]=n,p.push({name:t,value:n})}var l=this,c,u=0,d,f,h=[],p,m,g,v,y,b,x,C,w,_,E,N,S,k,T,R,A,B,D,L,M,H,P,O,I,F=0,z=t.decode,W,V=n.makeMap("src,href,data,
 background,formaction,poster"),U=/((java|vb)script|mhtml):/i,$=/^data:/i;for(H=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),P=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,x=a.getShortEndedElements(),M=i.self_closing_elements||a.getSelfClosingElements(),C=a.getBoolAttrs(),_=i.validate,b=i.remove_internals,W=i.fix_self_closing,O=a.getSpecialElements();c=H.exec(e);){if(u<c.index&&l.text(z(e.substr(u,c.index-u))),d=c[6])d=d.toLowerCase(),":"===d.charAt(0)&&(d=d.substr(1)),o(d);else if(d=c[7]){if(d=d.toLowerCase(),":"===d.charAt(0)&&(d=d.substr(1)),w=d in x,W&&M[d]&&h.length>0&amp
 ;&h[h.length-1].name===d&&o(d),!_||(E=a.getElementRule(d))){if(N=!0,_&&(T=E.attributes,R=E.attributePatterns),(k=c[8])?(y=-1!==k.indexOf("data-mce-type"),y&&b&&(N=!1),p=[],p.map={},k.replace(P,s)):(p=[],p.map={}),_&&!y){if(A=E.attributesRequired,B=E.attributesDefault,D=E.attributesForced,L=E.removeEmptyAttrs,L&&!p.length&&(N=!1),D)for(m=D.length;m--;)S=D[m],v=S.name,I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I});if(B)for(m=B.length;m--;)S=B[m],v=S.name,v in p.map||(I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I}));if(A){for(m=A.length;m--&&!(A[m]in p.map););-1===m&&(N=!1)}if(S=p.map["data-mce-bogus"]){if("all"===S){u=r(a,e,H.lastIndex),H.lastIndex=u;continue}N=!1}}N&&l.start(d,p,w)}else N=!1;if(f=O[d]){f.lastIndex=u=c.index+c[0].length,(c=f.exec(e))?(N&&(
 g=e.substr(u,c.index-u)),u=c.index+c[0].length):(g=e.substr(u),u=e.length),N&&(g.length>0&&l.text(g,!0),l.end(d)),H.lastIndex=u;continue}w||(k&&k.indexOf("/")==k.length-1?N&&l.end(d):h.push({name:d,valid:N}))}else(d=c[1])?(">"===d.charAt(0)&&(d=" "+d),i.allow_conditional_comments||"[if"!==d.substr(0,3)||(d=" "+d),l.comment(d)):(d=c[2])?l.cdata(d):(d=c[3])?l.doctype(d):(d=c[4])&&l.pi(d,c[5]);u=c.index+c[0].length}for(u<e.length&&l.text(z(e.substr(u))),m=h.length-1;m>=0;m--)d=h[m],d.valid&&l.end(d.name)}}var o=n.each;return i.findEndTag=r,i}),r(k,[E,N,S,f],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,h,p,m,g,v,y,b;for(m=i("tr,td,th,tbody,thead,tfoot,table"),p=l.getNonEmptyElements(),g=l.getTextBlockElements(),v=l.getSpecialElements(),n=0;n<t.length;n++)if(r=t[n],r.parent&am
 p;&!r.fixed)if(g[r.name]&&"li"==r.parent.name){for(y=r.next;y&&g[y.name];)y.name="li",y.fixed=!0,r.parent.insert(y,r.parent),y=y.next;r.unwrap(r)}else{for(a=[r],o=r.parent;o&&!l.isValidChild(o.name,r.name)&&!m[o.name];o=o.parent)a.push(o);if(o&&a.length>1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),h=0;h<a.length-1;h++){for(l.isValidChild(c.name,a[h].name)?(d=u.filterNode(a[h].clone()),c.append(d)):d=c,f=a[h].firstChild;f&&f!=a[h+1];)b=f.next,d.append(f),f=b;c=d}s.isEmpty(p)?o.insert(r,a[0],!0):(o.insert(s,a[0],!0),o.insert(r,s)),o=a[0],(o.isEmpty(p)||o.firstChild===o.lastChild&&"br"===o.firstChild.name)&&o.empty().remove()}else if(r.parent){if("li"===r.name){if(y=r.prev,y&&("ul"===y.name||"ul"===y.name)){y.append(r);continue}if(y=r.next,y&&("ul"===y.name||"ul"===y.name)){y.insert(r,y.firstChild,!0);continue}r.w
 rap(u.filterNode(new e("ul",1)));continue}l.isValidChild(r.parent.name,"div")&&l.isValidChild("div",r.name)?r.wrap(u.filterNode(new e("div",1))):v[r.name]?r.empty().remove():r.unwrap()}}}var u=this,d={},f=[],h={},p={};r=r||{},r.validate="validate"in r?r.validate:!0,r.root_name=r.root_name||"body",u.schema=l=l||new t,u.filterNode=function(e){var t,n,r;n in d&&(r=h[n],r?r.push(e):h[n]=[e]),t=f.length;for(;t--;)n=f[t].name,n in e.attributes.map&&(r=p[n],r?r.push(e):p[n]=[e]);return e},u.addNodeFilter=function(e,t){o(a(e),function(e){var n=d[e];n||(d[e]=n=[]),n.push(t)})},u.addAttributeFilter=function(e,t){o(a(e),function(e){var n;for(n=0;n<f.length;n++)if(f[n].name===e)return void f[n].callbacks.push(t);f.push({name:e,callbacks:[t]})})},u.parse=function(t,o){function a(){function e(e){e&&(t=e.firstChild,t&&3==t.type&&(t.value=t.value.replace(R,"")),t=e.lastChild,t&am
 p;&3==t.type&&(t.value=t.value.replace(D,"")))}var t=y.firstChild,n,i;if(l.isValidChild(y.name,I.toLowerCase())){for(;t;)n=t.next,3==t.type||1==t.type&&"p"!==t.name&&!T[t.name]&&!t.attr("data-mce-type")?i?i.append(t):(i=u(I,1),i.attr(r.forced_root_block_attrs),y.insert(i,t),i.append(t)):(e(i),i=null),t=n;e(i)}}function u(t,n){var r=new e(t,n),i;return t in d&&(i=h[t],i?i.push(r):h[t]=[r]),r}function m(e){var t,n,r,i,o=l.getBlockElements();for(t=e.prev;t&&3===t.type;){if(r=t.value.replace(D,""),r.length>0)return void(t.value=r);if(n=t.next){if(3==n.type&&n.value.length){
-t=t.prev;continue}if(!o[n.name]&&"script"!=n.name&&"style"!=n.name){t=t.prev;continue}}i=t.prev,t.remove(),t=i}}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,x,C,w,_,E,N,S,k,T,R,A=[],B,D,L,M,H,P,O,I;if(o=o||{},h={},p={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,D=/[ \t\r\n]+$/,L=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(L," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,"&qu
 ot;))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(N=p[a],N?N.push(r):p[a]=[r]);T[e]&&m(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=
 n.value.replace(D,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,T[b.name]?b.empty().remove():b.unwrap(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in h){for(N=d[S],x=h[S],_=x.length;_--;)x[_].parent||x.splice(_,1);for(C=0,w=N.length;w>C;C++)N[C](x,S,o)}for(C=0,w=f.length;w>C;C++)if(N=f[C],N.name in p){for(x=p[N.name],_=x.length;_--;)x[_].parent||x.splice(_,1);for(_=0,E=N.callbacks.length;E>_;_++)N.callbacks[_](x,N.n
 ame,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,h,p;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(h=l.getElementRule(c.name),h&&(h.removeEmpty?c.remove():h.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(p=new e("#text",3),p.value="\xa0",i.replace(p))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&a
 mp;&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}}),r.validate&&l.getValidClasses()&&u.addAttributeFilter("class",function(e){for(var t=e.length,n,r,i,o,a,s=l.getValidClasses(),c,u;t--;){for(n=e[t],r=n.attr("class").split(" "),a="",i=0;i<r.length;i++)o=r[i],u=!1,c=s["*"],c&&c[o]&&(u=!0),c=s[n.name],!u&&c&&c[o]&&(u=!0),u&&(a&&(a+=" "),a+=o);a.length||(a=null),n.attr("class",a)}})}}),r(T,[v,f],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&amp
 ;&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');!n||l?r[r.length]=">":r[r.length]=" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push("</",e,">"),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("<![CDATA[",e,"]]>")},comment:function(e){r.push("<!--",e,"-->")},pi:function(e,t){t?r.push("<?",e," ",s(t),"?>"):r.push("<?",e,"?>"),i&&r.push("\n")},doctype:fun
 ction(e){r.push("<!DOCTYPE",e,">",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(R,[T,N],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,h,p,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1&&(f=[],f.map={},m=r.getElementRule(e.name))){for(h=0,p=m.attributesOrder.length;p>h;h++)u=m.attributesOrder[h],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(h=0,p=c.length;p>h;h++)u=c[h].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.
 value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(A,[b,k,v,R,E,N,u,f],function(e,t,n,r,i,o,a,s){function l(e){function t(e){return e&&"br"===e.name}var n,r;n=e.lastChild,t(n)&&(r=n.prev,t(r)&&(n.remove(),r.remove()))}var c=s.each,u=s.trim,d=e.DOM;return function(e,i){var s,f,h;return i&&(s=i.dom,f=i.schema),s=s||d,f=f||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,h=new t(e,f),h.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),h.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-
 mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),h.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class"),r&&(r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null))}),h.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),h.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),h.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)
 /g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o,a;r--;)i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t?(a=i.attr("type"),a&&i.attr("type","mce-no/type"==a?null:a.replace(/^mce\-/,"")),o.length>0&&(i.firstChild.value="// <![CDATA[\n"+n(o)+"\n// ]]>")):o.length>0&&(i.firstChild.value="<!--\n"+n(o)+"\n-->")}),h.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^
 \[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),h.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&h.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),h.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:f,addNodeFilter:h.addNodeFilter,addAttributeFilter:h.addAttributeFilter,serialize:function(t,n){var i=this,o,d,p,m,g,v;r
 eturn a.ie&&s.select("script,style,select,map").length>0?(g=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,g)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(d=o.createHTMLDocument(""),c("BODY"==t.nodeName?t.childNodes:[t],function(e){d.body.appendChild(d.importNode(e,!0))}),t="BODY"!=t.nodeName?d.body.firstChild:d.body,p=s.doc,s.doc=d),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),v=h.parse(u(n.getInner?t.innerHTML:s.getOuterHTML(t)),n),l(v),m=new r(e,f),n.content=m.serialize(v),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){f.addValidElements(e)},setRules:function(e){f.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&amp
 ;i.fire("PostProcess",e)}}}}),r(B,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}funct
 ion n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(3==l.nodeType&&(u=l.nodeValue,s+=u.length,s>=i)){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(3==l.nodeType&&(s+=l.nodeValue.length,s>=i)){r=l,s-=i;break}l=l.previousS
 ibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.ite
 m?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,p;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=h,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a)
 ,d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(p=t.childNodes,p.length?(n>=p.length?i.insertAfter(a,p[p.length-1]):t.insertBefore(a,p[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="<span>&#xFEFF;</span>",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,h=f.body,p,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=h.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="&#xFEFF;":d=null,s.innerHTML="<span>&#xFEFF;</span><span>&#xFEFF;</span>",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&a
 mp;(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=h.createControlRange(),a.addElement(m),a.select(),p=e.getRng(),p.item&&m===p.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(D,[u],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(t){return e.mac?t.metaKey:t.ctrlKey&&!t.altKey}}}),r(L,[D,f,u],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:e==i.getBody()?!1:i.dom.is(e,t))}function a(t){var n,r,o,a,s;n=t.screenX-T,r=t.screenY-R,P=n*S[2]+D,O=r*S[3]+L,P=5>P?5:P,O=5>O?5:O,o="IMG"==w.nodeName&&i.settings.resize_img
 _proportional!==!1?!e.modifierPressed(t):e.modifierPressed(t)||"IMG"==w.nodeName&&S[2]*S[3]!==0,o&&(W(n)>W(r)?(O=V(P*M),P=V(O/M)):(P=V(O/M),O=V(P*M))),x.setStyles(_,{width:P,height:O}),a=S.startPos.x+n,s=S.startPos.y+r,a=a>0?a:0,s=s>0?s:0,x.setStyles(E,{left:a,top:s,display:"block"}),E.innerHTML=P+" &times; "+O,S[2]<0&&_.clientWidth<=P&&x.setStyle(_,"left",A+(D-P)),S[3]<0&&_.clientHeight<=O&&x.setStyle(_,"top",B+(L-O)),n=U.scrollWidth-$,r=U.scrollHeight-q,n+r!==0&&x.setStyles(E,{left:a-n,top:s-r}),H||(i.fire("ObjectResizeStart",{target:w,width:D,height:L}),H=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?x.setStyle(w,e,t):x.setAttrib(w,e,t))}H=!1,e("width",P),e("height",O),x.unbind(I,"mousemove",a),x.unbind(I,"mouseup",s),F!=I&&(x.unbind(F,&q
 uot;mousemove",a),x.unbind(F,"mouseup",s)),x.remove(_),x.remove(E),z&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:P,height:O}),x.setAttrib(w,"style",x.getAttrib(w,"style")),i.nodeChanged()}function l(e,t,r){var l,u,d,f,h;g(),l=x.getPos(e,U),A=l.x,B=l.y,h=e.getBoundingClientRect(),u=h.width||h.right-h.left,d=h.height||h.bottom-h.top,w!=e&&(m(),w=e,P=O=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?C(N,function(e,i){function o(t){T=t.screenX,R=t.screenY,D=w.clientWidth,L=w.clientHeight,M=L/D,S=e,e.startPos={x:u*e[0]+A,y:d*e[1]+B},$=U.scrollWidth,q=U.scrollHeight,_=w.cloneNode(!0),x.addClass(_,"mce-clonedresizable"),x.setAttrib(_,"data-mce-bogus","all"),_.contentEditable=!1,_.unSelectabe=!0,x.setStyles(_,{left:A,top:B,margin:0}),_.removeAttribute("data-mce-selected"),U.appendChild(_),x.bind(I,"mousemove",
 a),x.bind(I,"mouseup",s),F!=I&&(x.bind(F,"mousemove",a),x.bind(F,"mouseup",s)),E=x.add(U,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},D+" &times; "+L)}var l;return t?void(i==t&&o(r)):(l=x.get("mceResizeHandle"+i),l&&x.remove(l),l=x.add(U,"div",{id:"mceResizeHandle"+i,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+i+"-resize; margin:0; padding:0"}),n.ie&&(l.contentEditable=!1),x.bind(l,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),o(e)}),e.elm=l,void x.setStyles(l,{left:u*e[0]+A-l.offsetWidth/2,top:d*e[1]+B-l.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=
 x.get("mceResizeHandle"+e),t&&(x.unbind(t),x.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n,o;if(!H&&!i.removed)return C(x.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),o="mousedown"==e.type?e.target:r.getNode(),o=x.$(o).closest(z?"table":"table,img,hr")[0],t(o,U)&&(v(),n=r.getStart(!0),t(n,o)&&t(r.getEnd(!0),o)&&(!z||o!=n&&"IMG"!==n.nodeName))?void l(o):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function h(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=k.clientX-n.left,u=k.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],W(a-c)<8&&W(s-u)<8){S=o;break}H=!0,i.fire
 ("ObjectResizeStart",{target:w,width:w.clientWidth,height:w.clientHeight}),i.getDoc().selection.empty(),l(t,r,k)}function p(e){var t=e.srcElement;if(t!=w){if(i.fire("ObjectSelected",{target:t}),m(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",h))}}function m(){f(w,"resizestart",h)}function g(){for(var e in N){var t=N[e];t.elm&&(x.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(z){t=I.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,z&&(m(),f(U,"controlselect",p))}var x=i.dom,C=t.each,w,_,E,N,S,k,T,R,A,B,D,L,M,H,P,O,I=i.getDoc(),F=document,z=n.ie&&n.ie<11,W=Math.abs,V=Math.round,U=i.getBody(),$,q;N={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,
 1],sw:[0,1,-1,1]};var j=".mce-content-body";return i.contentStyles.push(j+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+j+" .mce-resizehandle:hover {background: #000}"+j+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+j+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+j+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}"),i.on("init",function(){z?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(U,&qu
 ot;controlselect",p),i.on("mousedown",function(e){k=e})):(v(),n.ie>=11&&(i.on("mousedown click",function(e){var t=e.target.nodeName;!H&&/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),"mousedown"==e.type&&i.nodeChanged())}),i.dom.bind(U,"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange ResizeEditor ResizeWindow drop",function(e){window.requestAnimationFrame?window.requestAnimationFrame(function(){u(e)}):u(e)}),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)}),i.on("hide blur",c)}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(M,[u,f],function(e,t){fu
 nction n(n){var r=n.dom;this.getBookmark=function(e,i){function o(e,n){var i=0;return t.each(r.select(e),function(e,t){e==n&&(i=t)}),i}function a(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function s(){function e(e,t){var n=e[t?"startContainer":"endContainer"],a=e[t?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==n.nodeType){if(i)for(l=n.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=n.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(r.nodeIndex(c[a],i)+u);for(;n&&n!=o;n=n.parentNode)s.push(r.nodeIndex(n,i));return s}var t=n.getRng(!0)
 ,o=r.getRoot(),a={};return a.start=e(t,!0),n.isCollapsed()||(a.end=e(t)),a}var l,c,u,d,f,h,p="&#xFEFF;",m;if(2==e)return h=n.getNode(),f=h?h.nodeName:null,"IMG"==f?{name:f,index:o(f,h)}:n.tridentSel?n.tridentSel.getBookmark(e):s();if(e)return{rng:n.getRng()};if(l=n.getRng(),u=r.uniqueId(),d=n.isCollapsed(),m="overflow:hidden;line-height:0px",l.duplicate||l.item){if(l.item)return h=l.item(0),f=h.nodeName,{name:f,index:o(f,h)};c=l.duplicate();try{l.collapse(),l.pasteHTML('<span data-mce-type="bookmark" id="'+u+'_start" style="'+m+'">'+p+"</span>"),d||(c.collapse(!1),l.moveToElementText(c.parentElement()),0===l.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML('<span data-mce-type="bookmark" id="'+u+'_end" style="'+m+'">'+p+"</span>"))}catch(g){return null}}else{if(h=n.getNode(),f=h.nodeName,"IMG&qu
 ot;==f)return{name:f,index:o(f,h)};c=a(l.cloneRange()),d||(c.collapse(!1),c.insertNode(r.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:m},p))),l=a(l),l.collapse(!0),l.insertNode(r.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:m},p))}return n.moveToBookmark({id:u,keep:1}),{id:u}},this.moveToBookmark=function(i){function o(e){var t=i[e?"start":"end"],n,r,o,a;if(t){for(o=t[0],r=c,n=t.length-1;n>=1;n--){if(a=r.childNodes,t[n]>a.length-1)return;r=a[t[n]]}3===r.nodeType&&(o=Math.min(t[0],r.nodeValue.length)),1===r.nodeType&&(o=Math.min(t[0],r.childNodes.length)),e?l.setStart(r,o):l.setEnd(r,o)}return!0}function a(n){var o=r.get(i.id+"_"+n),a,s,l,c,p=i.keep;if(o&&(a=o.parentNode,"start"==n?(p?(a=o.firstChild,s=1):s=r.nodeIndex(o),u=d=a,f=h=s):(p?(a=o.firstChild,s=1):s=r.nodeIndex(o),d=a,h=s),!p)){for(c=o.previous
 Sibling,l=o.nextSibling,t.each(t.grep(o.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});o=r.get(i.id+"_"+n);)r.remove(o,1);c&&l&&c.nodeType==l.nodeType&&3==c.nodeType&&!e.opera&&(s=c.nodeValue.length,c.appendData(l.nodeValue),r.remove(l),"start"==n?(u=d=c,f=h=s):(d=c,h=s))}}function s(t){return!r.isBlock(t)||t.innerHTML||e.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t}var l,c,u,d,f,h;if(i)if(i.start){if(l=r.createRng(),c=r.getRoot(),n.tridentSel)return n.tridentSel.moveToBookmark(i);o(!0)&&o()&&n.setRng(l)}else i.id?(a("start"),a("end"),u&&(l=r.createRng(),l.setStart(s(u),f),l.setEnd(s(d),h),n.setRng(l))):i.name?n.select(r.select(i.name)[i.index]):i.rng&&n.setRng(i.rng)}}return n.isBookmarkNode=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribut
 e("data-mce-type")},n}),r(H,[m,B,L,w,M,u,f],function(e,n,r,i,o,a,s){function l(e,t,i,a){var s=this;s.dom=e,s.win=t,s.serializer=i,s.editor=a,s.bookmarkManager=new o(s),s.controlSelection=new r(s,a),s.win.getSelection||(s.tridentSel=new n(s))}var c=s.each,u=s.trim,d=a.ie;return l.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="<br>"+(r.item?r.item(0).outerHTML:r.htmlText),i.remo
 veChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='<span id="__caret">_</span>',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.r
 emove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('<span id="__mce_tmp">_</span>'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(e){var t=this,n=t.getRng(),r,i,o,a;if(n.duplicate||n.item){if(n.item)return n.item(0);for(o=n.duplicate(),o.collapse(1),r=o.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.dom.getRoot()),i=a=n.parentElement();a=a.parentNode;)if(a==r){r=i;break}return r}return r=n.startContainer,1==r.nodeType&&r.hasChildNodes()&&(e&&n.collapsed||(r=r.childNodes[Math.min(r.childNodes.length-1,n.startOffset)])),r&&3==r.nodeType?r.parentNode:r},getEnd:function(e){var t=this,n=t.getRng(),r,i;return n.duplicate||n.item?n.item?n.item(0):(n=n.duplicate(),n.collapse(0),r=n.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.do
 m.getRoot()),r&&"BODY"==r.nodeName?r.lastChild||r:r):(r=n.endContainer,i=n.endOffset,1==r.nodeType&&r.hasChildNodes()&&(e&&n.collapsed||(r=r.childNodes[i>0?i-1:i])),r&&3==r.nodeType?r.parentNode:r)},getBookmark:function(e,t){return this.bookmarkManager.getBookmark(e,t)},moveToBookmark:function(e){return this.bookmarkManager.moveToBookmark(e)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(
 r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot()
 ,i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r,i;if(e)if(e.select)try{e.select()}catch(o){}else if(n.tridentSel){if(e.cloneRange)try{n.tridentSel.addRange(e)}catch(o){}}else{if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(o){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}e.collapsed||e.startContainer!=e.endContainer||!r.setBaseAndExtent||a.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(i=e.startContainer.childNodes[e.startOffset],i&&"IMG"==i.tagName&&n.getSel().setBaseAndExtent(i,0,i,1))}},setNode:function(e){var t=this;return t.setContent(t.do
 m.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i
 .isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return a.range&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};c(n.selectorChangedData,function(e,t){c(o,function(n){return i.is(n,t)?(r[t]||(c(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),c(r,function(e,n){a[n]||(delete r[n],c(e,function(e){e(!1,{node:t,selector:n,parents:o})}))}
 )})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(n<r.y||n+25>s+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},placeCaretAt:function(e,t){var n=this.editor.getDoc(),r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),
-r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(o){r.collapse(t<n.body.clientHeight)}}this.setRng(r)},_moveEndPoint:function(t,n,r){var i=n,o=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(a.ie&&a.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?o.next():o.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},l}),r(P,[M,f],function(e,t){function n(t){this.com
 pare=function(n,i){function o(e){var n={};return r(t.getAttribs(e),function(r){var i=r.nodeName.toLowerCase();0!==i.indexOf("_")&&"style"!==i&&"data-mce-style"!==i&&(n[i]=t.getAttrib(e,i))}),n}function a(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(n=t[r],"undefined"==typeof n)return!1;if(e[r]!=n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0}return n.nodeName!=i.nodeName?!1:a(o(n),o(i))&&a(t.parseStyle(t.getAttrib(n,"style")),t.parseStyle(t.getAttrib(i,"style")))?!e.isBookmarkNode(n)&&!e.isBookmarkNode(i):!1}}var r=t.each;return n}),r(O,[f],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="",l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline
  text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px&qu
 ot;}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(I,[m,w,M,P,f,O],function(e,t,n,r,i,o){return function(a){function s(e){return e.nodeType&&(e=e.nodeName),!!a.schema.getTextBlockElements()[e.toLowerCase()]}function l(e){return/^(TH|TD)$/.test(e.nodeName)}function c(e){return e&&/^(IMG)$/.test(e.nodeName)}function u(e,t){return q.getParents(e,t,q.getRoot())}function d(e){return 1===e.nodeType&&"_mce_caret"===e.id}function f(){m({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},def
 aultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:
 {fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:&q
 uot;blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){le(n,function(t,n){q.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),le("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){m(e,{block:e,remove:"all"})}),m(a.settings.formats)}function h(){a.addShortcut("meta+b","bold_desc","Bold"),a
 .addShortcut("meta+i","italic_desc","Italic"),a.addShortcut("meta+u","underline_desc","Underline");for(var e=1;6>=e;e++)a.addShortcut("access+"+e,"",["FormatBlock",!1,"h"+e]);a.addShortcut("access+7","",["FormatBlock",!1,"p"]),a.addShortcut("access+8","",["FormatBlock",!1,"div"]),a.addShortcut("access+9","",["FormatBlock",!1,"address"])}function p(e){return e?$[e]:$}function m(e,t){e&&("string"!=typeof e?le(e,function(e,t){m(t,e)}):(t=t.length?t:[t],le(t,function(e){e.deep===re&&(e.deep=!e.selector),e.split===re&&(e.split=!e.selector||e.inline),e.remove===re&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.c
 lasses&&(e.classes=e.classes.split(/\s+/))}),$[e]=t))}function g(e){return e&&$[e]&&delete $[e],$}function v(e){var t;return a.dom.getParent(e,function(e){return t=a.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function y(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=v(e.parentNode),a.dom.getStyle(e,"color")&&t?a.dom.setStyle(e,"text-decoration",t):a.dom.getStyle(e,"text-decoration")===t&&a.dom.setStyle(e,"text-decoration",null))}function b(t,n,r){function i(e,t){if(t=t||u,e){if(t.onformat&&t.onformat(e,t,n,r),le(t.styles,function(t,r){q.setStyle(e,r,D(t,n))}),t.styles){var i=q.getAttrib(e,"style");i&&e.setAttribute("data-mce-style",i)}le(t.attributes,function(t,r){q.setAttrib(e,r,D(t,n))}),le(t.classes,function(t){t=D(t,n),q.hasClass(e,t)||q.addClass(e,t)})}}function o(){function t(t,n){
 var i=new e(n);for(r=i.current();r;r=i.prev())if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}var n=a.selection.getRng(),i=n.startContainer,o=n.endContainer;if(i!=o&&0===n.endOffset){var s=t(i,o),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function l(e,r,o){var a=[],l,f,h=!0;l=u.inline||u.block,f=q.create(l),i(f),K.walk(e,function(e){function r(e){var g,v,y,b,x;return x=h,g=e.nodeName.toLowerCase(),v=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&ie(e)&&(x=h,h="true"===ie(e),b=!0),R(g,"br")?(p=0,void(u.block&&q.remove(e))):u.wrapper&&w(e,t,n)?void(p=0):h&&!b&&u.block&&!u.wrapper&&s(g)&&Y(v,l)?(e=q.rename(e,l),i(e),a.push(e),void(p=0)):u.selector&&(le(c,function(t){"collapsed"in t&&t.collapsed!==m||q.is(e,t.selector)&&!d(e)&&(i(e,t),y=!0)}),!u.inline||y)?void(p=0):void(!h||b||!Y(l,g)||!Y(v,l)||
 !o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||d(e)||u.inline&&G(e)?(p=0,le(ce(e.childNodes),r),b&&(h=x),p=0):(p||(p=q.clone(f,ee),e.parentNode.insertBefore(p,e),a.push(p)),p.appendChild(e)))}var p;le(e,r)}),u.links===!0&&le(a,function(e){function t(e){"A"===e.nodeName&&i(e,u),le(ce(e.childNodes),t)}t(e)}),le(a,function(e){function r(e){var t=0;return le(e.childNodes,function(e){L(e)||se(e)||t++}),t}function o(e){var t,n;return le(e.childNodes,function(e){return 1!=e.nodeType||se(e)||d(e)?void 0:(t=e,ee)}),t&&!se(t)&&T(t,u)&&(n=q.clone(t,ee),i(n),q.replace(n,e,te),q.remove(t,1)),n||e}var s;if(s=r(e),(a.length>1||!G(e))&&0===s)return void q.remove(e,1);if(u.inline||u.wrapper){if(u.exact||1!==s||(e=o(e)),le(c,function(t){le(q.select(t.inline,e),function(e){se(e)||O(t,n,e,t.exact?e:null)})}),w(e.parentNode,t,n))return q.remove(e,1),e=0,te;u.merge_with_par
 ents&&q.getParent(e.parentNode,function(r){return w(r,t,n)?(q.remove(e,1),e=0,te):void 0}),e&&u.merge_siblings!==!1&&(e=z(F(e),e),e=z(e,F(e,te)))}})}var c=p(t),u=c[0],f,h,m=!r&&j.isCollapsed();if(u)if(r)r.nodeType?(h=q.createRng(),h.setStartBefore(r),h.setEndAfter(r),l(H(h,c),null,!0)):l(r,null,!0);else if(m&&u.inline&&!q.select("td.mce-item-selected,th.mce-item-selected").length)V("apply",t,n);else{var g=a.selection.getNode();X||!c[0].defaultBlock||q.getParent(g,q.isBlock)||b(c[0].defaultBlock),a.selection.setRng(o()),f=j.getBookmark(),l(H(j.getRng(te),c),f),u.styles&&(u.styles.color||u.styles.textDecoration)&&(ue(g,y,"childNodes"),y(g)),j.moveToBookmark(f),U(j.getRng(te)),a.nodeChanged()}}function x(e,t,n,r){function i(e){var n,r,o,a,s;if(1===e.nodeType&&ie(e)&&(a=b,b="true"===ie(e),s=!0),n=ce(e.childNodes),b&&!s)for(r=0,o=h.length;o>r&&!O(h[r]
 ,t,e,e);r++);if(m.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function o(n){var i;return le(u(n.parentNode).reverse(),function(n){var o;i||"_start"==n.id||"_end"==n.id||(o=w(n,e,t,r),o&&o.split!==!1&&(i=n))}),i}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=q.clone(o,ee),c=0;c<h.length;c++)if(O(h[c],t,a,a)){a=0;break}a&&(s&&a.appendChild(s),l||(l=a),s=a)}!i||m.mixed&&G(e)||(n=q.split(e,n)),s&&(r.parentNode.insertBefore(s,r),l.appendChild(r))}return n}function c(e){return s(o(e),e,e,!0)}function d(e){var t=q.get(e?"_start":"_end"),n=t[e?"firstChild":"lastChild"];return se(n)&&(n=n[e?"firstChild":"lastChild"]),3==n.nodeType&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),q.remove(t,!0),n}
 function f(e){var t,n,r=e.commonAncestorContainer;if(e=H(e,h,te),m.split){if(t=W(e,te),n=W(e),t!=n){if(/^(TR|TH|TD)$/.test(t.nodeName)&&t.firstChild&&(t="TR"==t.nodeName?t.firstChild.firstChild||t:t.firstChild||t),r&&/^T(HEAD|BODY|FOOT|R)$/.test(r.nodeName)&&l(n)&&n.firstChild&&(n=n.firstChild||n),q.isChildOf(t,n)&&!G(n)&&!l(t)&&!l(n))return t=M(t,"span",{id:"_start","data-mce-type":"bookmark"}),c(t),void(t=d(te));t=M(t,"span",{id:"_start","data-mce-type":"bookmark"}),n=M(n,"span",{id:"_end","data-mce-type":"bookmark"}),c(t),c(n),t=d(te),n=d()}else t=n=c(t);e.startContainer=t.parentNode?t.parentNode:t,e.startOffset=J(t),e.endContainer=n.parentNode?n.parentNode:n,e.endOffset=J(n)+1}K.walk(e,function(e){le(e,function(e){i(e),1===e.nodeType&&"underline"===a.dom.getStyle
 (e,"text-decoration")&&e.parentNode&&"underline"===v(e.parentNode)&&O({deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,e)})})}var h=p(e),m=h[0],g,y,b=!0;return n?void(n.nodeType?(y=q.createRng(),y.setStartBefore(n),y.setEndAfter(n),f(y)):f(n)):void(j.isCollapsed()&&m.inline&&!q.select("td.mce-item-selected,th.mce-item-selected").length?V("remove",e,t,r):(g=j.getBookmark(),f(j.getRng(te)),j.moveToBookmark(g),m.inline&&_(e,t,j.getStart())&&U(j.getRng(!0)),a.nodeChanged()))}function C(e,t,n){var r=p(e);!_(e,t,n)||"toggle"in r[0]&&!r[0].toggle?b(e,t,n):x(e,t,n)}function w(e,t,n,r){function i(e,t,i){var o,a,s=t[i],l;if(t.onmatch)return t.onmatch(e,t,i);if(s)if(s.length===re){for(o in s)if(s.hasOwnProperty(o)){if(a="attributes"===i?q.getAttrib(e,o):A(e,o),r&&!a&&!t.exact)return;if((!r||t.exact)&&!R(
 a,B(D(s[o],n),o)))return}}else for(l=0;l<s.length;l++)if("attributes"===i?q.getAttrib(e,s[l]):A(e,s[l]))return t;return t}var o=p(t),a,s,l;if(o&&e)for(s=0;s<o.length;s++)if(a=o[s],T(e,a)&&i(e,a,"attributes")&&i(e,a,"styles")){if(l=a.classes)for(s=0;s<l.length;s++)if(!q.hasClass(e,l[s]))return;return a}}function _(e,t,n){function r(n){var r=q.getRoot();return n===r?!1:(n=q.getParent(n,function(n){return n.parentNode===r||!!w(n,e,t,!0)}),w(n,e,t))}var i;return n?r(n):(n=j.getNode(),r(n)?te:(i=j.getStart(),i!=n&&r(i)?te:ee))}function E(e,t){var n,r=[],i={};return n=j.getStart(),q.getParent(n,function(n){var o,a;for(o=0;o<e.length;o++)a=e[o],!i[a]&&w(n,a,t)&&(i[a]=!0,r.push(a))},q.getRoot()),r}function N(e){var t=p(e),n,r,i,o,a;if(t)for(n=j.getStart(),r=u(n),o=t.length-1;o>=0;o--){if(a=t[o].selector,!a||t[o].defaultBlock)return te;for(i=r.length-1;i>=0;i--)if(q.is(r[i],a))return te}return ee}
 function S(e,t,n){var r;return ne||(ne={},r={},a.on("NodeChange",function(e){var t=u(e.element),n={};t=i.grep(t,function(e){return 1==e.nodeType&&!e.getAttribute("data-mce-bogus")}),le(ne,function(e,i){le(t,function(o){return w(o,i,{},e.similar)?(r[i]||(le(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):void 0})}),le(r,function(i,o){n[o]||(delete r[o],le(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),le(e.split(","),function(e){ne[e]||(ne[e]=[],ne[e].similar=n),ne[e].push(t)}),this}function k(e){return o.getCssText(a,e)}function T(e,t){return R(e,t.inline)?te:R(e,t.block)?te:t.selector?1==e.nodeType&&q.is(e,t.selector):void 0}function R(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function A(e,t){return B(q.getStyle(e,t),t)}function B(e,t){return("color"==t||"backgroundColor"==t)&
 &(e=q.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function D(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function L(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function M(e,t,n){var r=q.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function H(t,n,r){function i(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=q.getRoot(),3==r.nodeType&&!L(r)&&(e?v>0:b<r.nodeValue.length))return r;for(;;){if(!n[0].block_expand&&G(i))return i;for(o=i[a];o;o=o[a])if(!se(o)&&!L(o)&&!t(o))return i;if(i.parentN
 ode==s){r=i;break}i=i.parentNode}return r}function o(e,t){for(t===re&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)e=e.childNodes[t],e&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}}function l(e){for(var t=e;t;){if(1===t.nodeType&&ie(t))return"false"===ie(t)?t:e;t=t.parentNode}return e}function c(t,n,i){function o(e,t){var n,o,a=e.nodeValue;return"undefined"==typeof t&&(t=i?a.length:0),i?(n=a.lastIndexOf(" ",t),o=a.lastIndexOf("\xa0",t),n=n>o?n:o,-1===n||r||n++):(n=a.indexOf(" ",t),o=a.indexOf("\xa0",t),n=-1!==n&&(-1===o||o>n)?n:o),n}var s,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,q.getParent(t,G)||a.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(G(l))break;return u?(n=i?0:u.length,{contai
 ner:u,offset:n}):void 0}function d(e,r){var i,o,a,s;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=u(e),o=0;o<i.length;o++)for(a=0;a<n.length;a++)if(s=n[a],!("collapsed"in s&&s.collapsed!==t.collapsed)&&q.is(i[o],s.selector))return i[o];return e}function f(e,t){var r,i=q.getRoot();if(n[0].wrapper||(r=q.getParent(e,n[0].block,i)),r||(r=q.getParent(3==e.nodeType?e.parentNode:e,function(e){return e!=i&&s(e)})),r&&n[0].wrapper&&(r=u(r,"ul,ol").reverse()[0]||r),!r)for(r=e;r[t]&&!G(r[t])&&(r=r[t],!R(r,"br")););return r||e}var h,p,m,g=t.startContainer,v=t.startOffset,y=t.endContainer,b=t.endOffset;if(1==g.nodeType&&g.hasChildNodes()&&(h=g.childNodes.length-1,g=g.childNodes[v>h?h:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(h=y.childNodes.length-1,y=y.childNodes[b>h?h:b-1],3==y.nodeType&&(b=y.nod
 eValue.length)),g=l(g),y=l(y),(se(g.parentNode)||se(g))&&(g=se(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(se(y.parentNode)||se(y))&&(y=se(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=c(g,v,!0),m&&(g=m.container,v=m.offset),m=c(y,b),m&&(y=m.container,b=m.offset)),p=o(y,b),p.node)){for(;p.node&&0===p.offset&&p.node.previousSibling;)p=o(p.node.previousSibling);p.node&&p.offset>0&&3===p.node.nodeType&&" "===p.node.nodeValue.charAt(p.offset-1)&&p.offset>1&&(y=p.node,y.splitText(p.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=i(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=i())),n[0].selector&&n[0].expand!==ee&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(
 y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(G(g)||(g=i(!0)),G(y)||(y=i()))),1==g.nodeType&&(v=J(g),g=g.parentNode),1==y.nodeType&&(b=J(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function P(e,t){return t.links&&"A"==e.tagName}function O(e,t,n,r){var i,o,a;if(!T(n,e)&&!P(n,e))return ee;if("all"!=e.remove)for(le(e.styles,function(i,o){i=B(D(i,t),o),"number"==typeof o&&(o=i,r=0),(e.remove_similar||!r||R(A(r,o),i))&&q.setStyle(n,o,""),a=1}),a&&""===q.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),le(e.attributes,function(e,i){var o;if(e=D(e,t),"number"==typeof i&&(i=e,r=0),!r||R(q.getAttrib(r,i),e)){if("class"==i&&(e=q.getAttri
 b(n,i),e&&(o="",le(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void q.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),Z.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),le(e.classes,function(e){e=D(e,t),(!r||q.hasClass(r,e))&&q.removeClass(n,e)}),o=q.getAttribs(n),i=0;i<o.length;i++)if(0!==o[i].nodeName.indexOf("_"))return ee;return"none"!=e.remove?(I(n,e),te):void 0}function I(e,t){function n(e,t,n){return e=F(e,t,n),!e||"BR"==e.nodeName||G(e)}var r=e.parentNode,i;t.block&&(X?r==q.getRoot()&&(t.list_block&&R(e,t.list_block)||le(ce(e.childNodes),function(e){Y(X,e.nodeName.toLowerCase())?i?i.appendChild(e):(i=M(e,X),q.setAttribs(i,a.settings.forced_root_block_attrs)):i=0})):G(e)&&!G(r)&&(n(e,ee)||n(e.firstChild,te,1)||e.insertBefore(q.create("br&q
 uot;),e.firstChild),n(e,te)||n(e.lastChild,ee,1)||e.appendChild(q.create("br")))),t.selector&&t.inline&&!R(t.inline,e)||q.remove(e,1)}function F(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1==e.nodeType||!L(e))return e}function z(e,t){function n(e,t){for(i=e;i;i=i[t]){if(3==i.nodeType&&0!==i.nodeValue.length)return e;if(1==i.nodeType&&!se(i))return i}return e}var i,o,a=new r(q);if(e&&t&&(e=n(e,"previousSibling"),t=n(t,"nextSibling"),a.compare(e,t))){for(i=e.nextSibling;i&&i!=t;)o=i,i=i.nextSibling,e.appendChild(o);return q.remove(t),le(ce(t.childNodes),function(t){e.appendChild(t)}),e}return t}function W(t,n){var r,i,o;return r=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"],1==r.nodeType&&(o=r.childNodes.length-1,!n&&i&&i--,r=r.childNodes[i>o?o:i]),3===r.nodeT
 ype&&n&&i>=r.nodeValue.length&&(r=new e(r,a.getBody()).next()||r),3!==r.nodeType||n||0!==i||(r=new e(r,a.getBody()).prev()||r),r}function V(t,n,r,i){function o(e){var t=q.create("span",{id:g,"data-mce-bogus":!0,style:v?"color:red":""});return e&&t.appendChild(a.getDoc().createTextNode(Q)),t}function l(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==Q||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function c(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=j.getRng(!0),l(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),q.remove(e)):(n=u(e),n.nodeValue.charAt(0)===Q&&(n.deleteData(0,1),r.startContainer==n&&r.startOffset>0&&r.setStart(n,r.startOffset-1),r.endContainer==n&&r.endOf
 fset>0&&r.setEnd(n,r.endOffset-1)),q.remove(e,1)),j.setRng(r);else if(e=c(j.getStart()),!e)for(;e=q.get(g);)d(e,!1)}function f(){var e,t,i,a,s,l,d;e=j.getRng(!0),a=e.startOffset,l=e.startContainer,d=l.nodeValue,t=c(j.getStart()),t&&(i=u(t)),d&&a>0&&a<d.length&&/\w/.test(d.charAt(a))&&/\w/.test(d.charAt(a-1))?(s=j.getBookmark(),e.collapse(!0),e=H(e,p(n)),e=K.split(e),b(n,r,e),j.moveToBookmark(s)):(t&&i.nodeValue===Q?b(n,r,t):(t=o(!0),i=t.firstChild,e.insertNode(t),a=1,b(n,r,t)),j.setCursorLocation(i,a))}function h(){var e=j.getRng(!0),t,a,l,c,u,d,f=[],h,m;for(t=e.startContainer,a=e.startOffset,u=t,3==t.nodeType&&(a!=t.nodeValue.length&&(c=!0),u=u.parentNode);u;){if(w(u,n,r,i)){d=u;break}u.nextSibling&&(c=!0),f.push(u),u=u.parentNode}if(d)if(c)l=j.getBookmark(),e.collapse(!0),e=H(e,p(n),!0),e=K.split(e),x(n,r,e),j.moveToBookmark(l);else{for(m=o(),u=m,h=f.length-1;h>=0;h--)u.appendChild(q.clone(
 f[h],!1)),u=u.firstChild;u.appendChild(q.doc.createTextNode(Q)),u=u.firstChild;var g=q.getParent(d,s);g&&q.isEmpty(g)?d.parentNode.replaceChild(m,d):q.insertAfter(m,d),j.setCursorLocation(u,1),q.isEmpty(d)&&q.remove(d)}}function m(){var e;e=c(j.getStart()),e&&!q.isEmpty(e)&&ue(e,function(e){1!=e.nodeType||e.id===g||q.isEmpty(e)||q.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var g="_mce_caret",v=a.settings.caret_debug;a._hasCaretEvents||(ae=function(){var e=[],t;if(l(c(j.getStart()),e))for(t=e.length;t--;)q.setAttrib(e[t],"data-mce-bogus","1")},oe=function(e){var t=e.keyCode;d(),8==t&&j.isCollapsed()&&j.getStart().innerHTML==Q&&d(c(j.getStart())),(37==t||39==t)&&d(c(j.getStart())),m()},a.on("SetContent",function(e){e.selection&&m()}),a._hasCaretEvents=!0),"apply"==t?f():h()}function U(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if
 ((t.startContainer!=t.endContainer||!c(t.startContainer.childNodes[t.startOffset]))&&(3==n.nodeType&&r>=n.nodeValue.length&&(r=J(n),n=n.parentNode,i=!0),1==n.nodeType))for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,q.getParent(n,q.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!L(a))return l=q.create("a",{"data-mce-bogus":"all"},Q),a.parentNode.insertBefore(l,a),t.setStart(a,0),j.setRng(t),void q.remove(l)}var $={},q=a.dom,j=a.selection,K=new t(q),Y=a.schema.isValidChild,G=q.isBlock,X=a.settings.forced_root_block,J=q.nodeIndex,Q="\ufeff",Z=/^(src|href|style)$/,ee=!1,te=!0,ne,re,ie=q.getContentEditable,oe,ae,se=n.isBookmarkNode,le=i.each,ce=i.grep,ue=i.walk,de=i.extend;de(this,{get:p,register:m,unregister:g,apply:b,remove:x,toggle:C,match:_,matchAll:E,matchNode:w,canApply:N,formatChanged:S,getCssText:k}),f(),h(),a.on("BeforeGetContent",function
 (e){ae&&"raw"!=e.format&&ae()}),a.on("mouseup keydown",function(e){oe&&oe(e)})}}),r(F,[D,u,f,S],function(e,t,n,r){var i=n.trim,o;return o=new RegExp(["<span[^>]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(e){function n(){var t=e.getContent({format:"raw",no_events:1}),n=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,a,s,l,c,u,d=e.schema;for(t=t.replace(o,""),u=d.getShortEndedElements();c=n.exec(t);)s=n.lastIndex,l=c[0].length,a=u[c[1]]?s:r.findEndTag(d,t,s),t=t.substring(0,s-l)+t.substring(a),n.lastIndex=s-l;return i(t)}function a(t){e.isNotDirty=!t}function s(e){l.typing=!1,l.add({},e)}var l=this,c=0,u=[],d,f,h=0;return e.on("init",function(){l.add()}),e.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&&
 quot;mceRepaint"!=t&&l.beforeChange()}),e.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&s(e)}),e.on("ObjectResizeStart Cut",function(){l.beforeChange()}),e.on("SaveContent ObjectResized blur",s),e.on("DragEnd",s),e.on("KeyUp",function(r){var i=r.keyCode;r.isDefaultPrevented()||((i>=33&&36>=i||i>=37&&40>=i||45==i||13==i||r.ctrlKey)&&(s(),e.nodeChanged()),(46==i||8==i||t.mac&&(91==i||93==i))&&e.nodeChanged(),f&&l.typing&&(e.isDirty()||(a(u[0]&&n()!=u[0].content),e.isNotDirty||e.fire("change",{level:u[0],lastLevel:null})),e.fire("TypingUndo"),f=!1,e.nodeChanged()))}),e.on("KeyDown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented()){if(t>=33&&36>=t||t>=37&&40>=t||45==t)return void(l.typing&&amp
 ;s(e));var n=e.ctrlKey&&!e.altKey||e.metaKey;!(16>t||t>20)||224==t||91==t||l.typing||n||(l.beforeChange(),l.typing=!0,l.add({},e),f=!0)}}),e.on("MouseDown",function(e){l.typing&&s(e)}),e.addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo"),e.on("AddUndo Undo Redo ClearUndos",function(t){t.isDefaultPrevented()||e.nodeChanged()}),l={data:u,typing:!1,beforeChange:function(){h||(d=e.selection.getBookmark(2,!0))},add:function(t,r){var i,o=e.settings,s;if(t=t||{},t.content=n(),h||e.removed)return null;if(s=u[c],e.fire("BeforeAddUndo",{level:t,lastLevel:s,originalEvent:r}).isDefaultPrevented())return null;if(s&&s.content==t.content)return null;if(u[c]&&(u[c].beforeBookmark=d),o.custom_undo_redo_levels&&u.length>o.custom_undo_redo_levels){for(i=0;i<u.length-1;i++)u[i]=u[i+1];u.length--,c=u.length}t.bookmark=e.selection.getBoo
 kmark(2,!0),c<u.length-1&&(u.length=c+1),u.push(t),c=u.length-1;var l={level:t,lastLevel:s,originalEvent:r};return e.fire("AddUndo",l),c>0&&(a(!0),e.fire("change",l)),t},undo:function(){var t;return l.typing&&(l.add(),l.typing=!1),c>0&&(t=u[--c],0===c&&a(!1),e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(t.beforeBookmark),e.fire("undo",{level:t})),t},redo:function(){var t;return c<u.length-1&&(t=u[++c],e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(t.bookmark),a(!0),e.fire("redo",{level:t})),t},clear:function(){u=[],c=0,l.typing=!1,e.fire("ClearUndos")},hasUndo:function(){return c>0||l.typing&&u[0]&&n()!=u[0].content},hasRedo:function(){return c<u.length-1&&!this.typing},transact:function(e){l.beforeChange();try{h++,e()}finally{h--}l.add()}}}}),r(z,[m,w,u],function(e,t,n){var r=n.ie&&
 amp;n.ie<11;return function(i){function o(o){function h(e){return e&&a.isBlock(e)&&!/^(TD|TH|CAPTION|FORM)$/.test(e.nodeName)&&!/^(fixed|absolute)/i.test(e.style.position)&&"true"!==a.getContentEditable(e)}function p(e){return e&&/^(TD|TH|CAPTION)$/.test(e.nodeName)}function m(e){var t;a.isBlock(e)&&(t=s.getRng(),e.appendChild(a.create("span",null,"\xa0")),s.select(e),e.lastChild.outerHTML="",s.setRng(t))}function g(e){var t=e,n=[],r;if(t){for(;t=t.firstChild;){if(a.isBlock(t))return;1!=t.nodeType||d[t.nodeName.toLowerCase()]||n.push(t)}for(r=n.length;r--;)t=n[r],!t.hasChildNodes()||t.firstChild==t.lastChild&&""===t.firstChild.nodeValue?a.remove(t):"A"==t.nodeName&&" "===(t.innerText||t.textContent)&&a.remove(t)}}function v(t){function r(e){for(;e;){if(1==e.nodeType||3==e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=
 e.nextSibling}}var i,o,l,c=t,u;if(t){if(n.ie&&n.ie<9&&M&&M.firstChild&&M.firstChild==M.lastChild&&"BR"==M.firstChild.tagName&&a.remove(M.firstChild),/^(LI|DT|DD)$/.test(t.nodeName)){var d=r(t.firstChild);d&&/^(UL|OL|DL)$/.test(d.nodeName)&&t.insertBefore(a.doc.createTextNode("\xa0"),t.firstChild)}if(l=a.createRng(),n.ie||t.normalize(),t.hasChildNodes()){for(i=new e(t,t);o=i.current();){if(3==o.nodeType){l.setStart(o,0),l.setEnd(o,0);break}if(f[o.nodeName.toLowerCase()]){l.setStartBefore(o),l.setEndBefore(o);break}c=o,o=i.next()}o||(l.setStart(c,0),l.setEnd(c,0))}else"BR"==t.nodeName?t.nextSibling&&a.isBlock(t.nextSibling)?((!H||9>H)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}}function y(e){var t=l.for
 ced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function b(e){e.innerHTML=r?"":'<br data-mce-bogus="1">'}function x(e){var t=D,n,i,o,s=u.getTextInlineElements();if(e||"TABLE"==z?(n=a.create(e||V),y(n)):n=M.cloneNode(!1),o=n,l.keep_styles!==!1)do if(s[t.nodeName]){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='<br data-mce-bogus="1">'),n}function C(t){var n,r,i;if(3==D.nodeType&&(t?L>0:L<D.nodeValue.length))return!1;if(D.parentNode==M&&U&&!t)return!0;if(t&&1==D.nodeType&&D==M.firstChild)return!0;if("TABLE"===D.nodeName||D.previousSibling&&"TABLE"==D.previousSibling.nodeName)return U&&!t||!U&&a
 mp;t;for(n=new e(D,M),3==D.nodeType&&(t&&0===L?n.prev():t||L!=D.nodeValue.length||n.next());r=n.current();){if(1===r.nodeType){if(!r.getAttribute("data-mce-bogus")&&(i=r.nodeName.toLowerCase(),d[i]&&"br"!==i))return!1}else if(3===r.nodeType&&!/^[ \t\r\n]*$/.test(r.nodeValue))return!1;t?n.prev():n.next()}return!0}function w(e,t){var n,r,o,s,l,c,d=V||"P";if(r=a.getParent(e,a.isBlock),!r||!h(r)){if(r=r||B,c=r==i.getBody()||p(r)?r.nodeName.toLowerCase():r.parentNode.nodeName.toLowerCase(),!r.hasChildNodes())return n=a.create(d),y(n),r.appendChild(n),R.setStart(n,0),R.setEnd(n,0),n;for(s=e;s.parentNode!=r;)s=s.parentNode;for(;s&&!a.isBlock(s);)o=s,s=s.previousSibling;if(o&&u.isValidChild(c,d.toLowerCase())){for(n=a.create(d),y(n),o.parentNode.insertBefore(n,o),s=o;s&&!a.isBlock(s);)l=s.nextSibling,n.appendChild(s),s=l;R.setStart(e,t),R.setEnd(e,t)}}return e}function _(){function e(e){for(var t=F
 [e?"firstChild":"lastChild"];t&&1!=t.nodeType;)t=t[e?"nextSibling":"previousSibling"];return t===M}function t(){var e=F.parentNode;return/^(LI|DT|DD)$/.test(e.nodeName)?e:F}if(F!=i.getBody()){var n=F.parentNode.nodeName;/^(OL|UL|LI)$/.test(n)&&(V="LI"),O=V?x(V):a.create("BR"),e(!0)&&e()?"LI"==n?a.insertAfter(O,t()):a.replace(O,F):e(!0)?"LI"==n?(a.insertAfter(O,t()),O.appendChild(a.doc.createTextNode(" ")),O.appendChild(F)):F.parentNode.insertBefore(O,F):e()?(a.insertAfter(O,t()),m(O)):(F=t(),A=R.cloneRange(),A.setStartAfter(M),A.setEndAfter(F),I=A.extractContents(),"LI"==V&&"LI"==I.firstChild.nodeName?(O=I.firstChild,a.insertAfter(I,F)):(a.insertAfter(I,F),a.insertAfter(O,F))),a.remove(M),v(O),c.add()}}function E(){i.execCommand("InsertLineBreak",!1,o)}function N(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]
 +/,"")),e=e.firstChild;while(e)}function S(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function k(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}function T(){O=/^(H[1-6]|PRE|FIGURE)$/.test(z)&&"HGROUP"!=W?x(V):x(),l.end_container_on_empty_block&&h(F)&&a.isEmpty(M)?O=a.split(F,M):a.insertAfter(O,M),v(O)}var R,A,B,D,L,M,H,P,O,I,F,z,W,V,U;if(R=s.getRng(!0),!o.isDefaultPrevented()){if(!R.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(R),D=R.startContainer,L=R.startOffset,V=(l.force_p_newlines?"p":"")||l.forced_root_block,V=V?V.toUpperCase():"",H=a.doc.documentMode,P=o.shiftKey,1==D.nodeType&&D.hasChildNodes()&&(U=L>D.childNodes.length-1
 ,D=D.childNodes[Math.min(L,D.childNodes.length-1)]||D,L=U&&3==D.nodeType?D.nodeValue.length:0),B=S(D)){if(c.beforeChange(),!a.isBlock(B)&&B!=a.getRoot())return void((!V||P)&&E());if((V&&!P||!V&&P)&&(D=w(D,L)),M=a.getParent(D,a.isBlock),F=M?a.getParent(M.parentNode,a.isBlock):null,z=M?M.nodeName.toUpperCase():"",W=F?F.nodeName.toUpperCase():"","LI"!=W||o.ctrlKey||(M=F,z=W),/^(LI|DT|DD)$/.test(z)){if(!V&&P)return void E();if(a.isEmpty(M))return void _()}if("PRE"==z&&l.br_in_pre!==!1){if(!P)return void E()}else if(!V&&!P&&"LI"!=z||V&&P)return void E();V&&M===i.getBody()||(V=V||"P",
-C()?T():C(!0)?(O=M.parentNode.insertBefore(x(),M),m(O),v(M)):(A=R.cloneRange(),A.setEndAfter(M),I=A.extractContents(),N(I),O=I.firstChild,a.insertAfter(I,M),g(O),k(M),a.isEmpty(M)&&b(M),a.isEmpty(O)?(a.remove(O),T()):v(O)),a.setAttrib(O,"id",""),i.fire("NewBlock",{newBlock:O}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements(),f=u.getMoveCaretBeforeOnEnterElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(W,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,h,p,m=-16777215,g,v,y,b,x;if(x=n.forced_root_block,t&&1===t.nodeType&&x){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(C){}}else l.item&&(t=l.item(0),l=e.getDoc().body
 .createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,x.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){p=t,t=t.nextSibling,r.remove(p);continue}h||(h=r.create(x,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(h,t),g=!0),p=t,t=t.nextSibling,h.appendChild(p)}else h=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(C){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements()
 ;n.forced_root_block&&e.on("NodeChange",t)}}),r(V,[R,u,f,P,w,m],function(e,n,r,i,o,a){var s=r.each,l=r.extend,c=r.map,u=r.inArray,d=r.explode,f=n.gecko,h=n.ie,p=n.ie&&n.ie<11,m=!0,g=!1;return function(r){function v(e,t,n,i){var o,a,l=0;if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||i&&i.skip_focus||r.focus(),i=r.fire("BeforeExecCommand",{command:e,ui:t,value:n}),i.isDefaultPrevented())return!1;if(a=e.toLowerCase(),o=M.exec[a])return o(a,t,n),r.fire("ExecCommand",{command:e,ui:t,value:n}),!0;if(s(r.plugins,function(i){return i.execCommand&&i.execCommand(e,t,n)?(r.fire("ExecCommand",{command:e,ui:t,value:n}),l=!0,!1):void 0}),l)return l;if(r.theme&&r.theme.execCommand&&r.theme.execCommand(e,t,n))return r.fire("ExecCommand",{command:e,ui:t,value:n}),!0;try{l=r.getDoc().execCommand(e,t,n)}catch(c){}return l?(r.fire("ExecCommand",{command:e,ui:t,v
 alue:n}),!0):!1}function y(e){var t;if(!r._isHidden()){if(e=e.toLowerCase(),t=M.state[e])return t(e);try{return r.getDoc().queryCommandState(e)}catch(n){}return!1}}function b(e){var t;if(!r._isHidden()){if(e=e.toLowerCase(),t=M.value[e])return t(e);try{return r.getDoc().queryCommandValue(e)}catch(n){}}}function x(e,t){t=t||"exec",s(e,function(e,n){s(n.toLowerCase().split(","),function(n){M[t][n]=e})})}function C(e,t,n){e=e.toLowerCase(),M.exec[e]=function(e,i,o,a){return t.call(n||r,i,o,a)}}function w(e){if(e=e.toLowerCase(),M.exec[e])return!0;try{return r.getDoc().queryCommandSupported(e)}catch(t){}return!1}function _(e,t,n){e=e.toLowerCase(),M.state[e]=function(){return t.call(n||r)}}function E(e,t,n){e=e.toLowerCase(),M.value[e]=function(){return t.call(n||r)}}function N(e){return e=e.toLowerCase(),!!M.exec[e]}function S(e,n,i){return n===t&&(n=g),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function k(e){return L.match(e)}function T(e,n){L.to
 ggle(e,n?{value:n}:t),r.nodeChanged()}function R(e){P=D.getBookmark(e)}function A(){D.moveToBookmark(P)}var B,D,L,M={state:{},exec:{},value:{}},H=r.settings,P;r.on("PreInit",function(){B=r.dom,D=r.selection,H=r.settings,L=r.formatter}),l(this,{execCommand:v,queryCommandState:y,queryCommandValue:b,queryCommandSupported:w,addCommands:x,addCommand:C,addQueryStateHandler:_,addQueryValueHandler:E,hasCustomCommand:N}),x({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{S(e)}catch(o){i=m}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(D.isCollapsed()){var e=D.getNode();return void("A"=
 =e.tagName&&r.dom.remove(e,!0))}L.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"==t&&(t="justify"),s("left,center,right,justify".split(","),function(e){t!=e&&L.remove("align"+e)}),"none"!=t&&(T("align"+t),v("mceRepaint"))},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;S(e),t=B.getParent(D.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(R(),B.split(n,t),A()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){T(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){T(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=d(H.font_size_style_values),r=d(H.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),T(e,n)},RemoveFormat:function(e){L.remov
 e(e)},mceBlockQuote:function(){T("blockquote")},FormatBlock:function(e,t,n){return T(n||"p")},mceCleanup:function(){var e=D.getBookmark();r.setContent(r.getContent({cleanup:m}),{cleanup:m}),D.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||D.getNode();i!=r.getBody()&&(R(),r.dom.remove(i,m),A())},mceSelectNodeDepth:function(e,t,n){var i=0;B.getParent(D.getNode(),function(e){return 1==e.nodeType&&i++==n?(D.select(e),g):void 0},r.getBody())},mceSelectNode:function(e,t,n){D.select(n)},mceInsertContent:function(t,n,o){function a(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=D.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^&nbsp;/," "):t("previousSibling")||(e=e.replace(/^ /,"&nbsp;")),i<r.length?e=e.replace(/&nbsp;(<br>|)$/," "):t("nextSibling")||(e=e.replace(/(&nbsp;| )(<br>|)$/,"&n
 bsp;"))),e}function l(){var e,t,n;e=D.getRng(!0),t=e.startContainer,n=e.startOffset,3==t.nodeType&&e.collapsed&&("\xa0"===t.data[n]?(t.deleteData(n,1),/[\u00a0| ]$/.test(o)||(o+=" ")):"\xa0"===t.data[n-1]&&(t.deleteData(n-1,1),/[\u00a0| ]$/.test(o)||(o=" "+o)))}function c(e){if(_)for(x=e.firstChild;x;x=x.walk(!0))N[x.name]&&x.attr("data-mce-new","true")}function u(){if(_){var e=r.getBody(),t=new i(B);s(B.select("*[data-mce-new]"),function(n){n.removeAttribute("data-mce-new");for(var r=n.parentNode;r&&r!=e;r=r.parentNode)t.compare(r,n)&&B.remove(n,!0)})}}var d,f,p,m,g,v,y,b,x,C,w,_,E,N=r.schema.getTextInlineElements();"string"!=typeof o&&(_=o.merge,E=o.data,o=o.content),/^ | $/.test(o)&&(o=a(o)),d=r.parser,f=new e({validate:H.validate},r.schema),w='<span id="mce_marker" data-mce-type="bookmark">&#x
 FEFF;&#x200B;</span>',v={content:o,format:"html",selection:!0},r.fire("BeforeSetContent",v),o=v.content,-1==o.indexOf("{$caret}")&&(o+="{$caret}"),o=o.replace(/\{\$caret\}/,w),b=D.getRng();var S=b.startContainer||(b.parentElement?b.parentElement():null),k=r.getBody();S===k&&D.isCollapsed()&&B.isBlock(k.firstChild)&&B.isEmpty(k.firstChild)&&(b=B.createRng(),b.setStart(k.firstChild,0),b.setEnd(k.firstChild,0),D.setRng(b)),D.isCollapsed()||(r.getDoc().execCommand("Delete",!1,null),l()),p=D.getNode();var T={context:p.nodeName.toLowerCase(),data:E};if(g=d.parse(o,T),c(g),x=g.lastChild,"mce_marker"==x.attr("id"))for(y=x,x=x.prev;x;x=x.walk(!0))if(3==x.type||!B.isBlock(x.name)){r.schema.isValidChild(x.parent.name,"span")&&x.parent.insert(y,x,"br"===x.name);break}if(T.invalid){for(D.setContent(w),p=D.getNode(),m=r.getBody(),9==p.nodeType?p=x=m:x
 =p;x!==m;)p=x,x=x.parentNode;o=p==m?m.innerHTML:B.getOuterHTML(p),o=f.serialize(d.parse(o.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return f.serialize(g)}))),p==m?B.setHTML(m,o):B.setOuterHTML(p,o)}else o=f.serialize(g),x=p.firstChild,C=p.lastChild,!x||x===C&&"BR"===x.nodeName?B.setHTML(p,o):D.setContent(o);u(),y=B.get("mce_marker"),D.scrollIntoView(y),b=B.createRng(),x=y.previousSibling,x&&3==x.nodeType?(b.setStart(x,x.nodeValue.length),h||(C=y.nextSibling,C&&3==C.nodeType&&(x.appendData(C.data),C.parentNode.removeChild(C)))):(b.setStartBefore(y),b.setEndBefore(y)),B.remove(y),D.setRng(b),r.fire("SetContent",v),r.addVisual()},mceInsertRawHTML:function(e,t,n){D.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){T(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,
 Outdent":function(e){var t,n,i;t=H.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),y("InsertUnorderedList")||y("InsertOrderedList")?S(e):(H.forced_root_block||B.getParent(D.getNode(),B.isBlock)||L.apply("div"),s(D.getSelectedBlocks(),function(o){if("LI"!=o.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==B.getStyle(o,"direction",!0)?"Right":"Left","outdent"==e?(i=Math.max(0,parseInt(o.style[a]||0,10)-t),B.setStyle(o,a,i?i+n:"")):(i=parseInt(o.style[a]||0,10)+t+n,B.setStyle(o,a,i))}}))},mceRepaint:function(){if(f)try{R(m),D.getSel()&&D.getSel().selectAllChildren(r.getBody()),D.collapse(m),A()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){
 r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,D.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=B.getParent(D.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||L.remove("link"),n.href&&L.apply("link",n,r)},selectAll:function(){var e=B.getRoot(),t;D.getRng().setStart?(t=B.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),D.setRng(t)):(t=D.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){S("Delete");var e=r.getBody();B.isEmpty(e)&&(r.setContent(""),e.firstChild&&B.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")},InsertLineBreak:function(e,t,n){function i(){for(var e=new a(h,v),t,n=r.schema.getNonEmptyElements();t=
 e.next();)if(n[t.nodeName.toLowerCase()]||t.length>0)return!0}var s=n,l,c,u,d=D.getRng(!0);new o(B).normalize(d);var f=d.startOffset,h=d.startContainer;if(1==h.nodeType&&h.hasChildNodes()){var g=f>h.childNodes.length-1;h=h.childNodes[Math.min(f,h.childNodes.length-1)]||h,f=g&&3==h.nodeType?h.nodeValue.length:0}var v=B.getParent(h,B.isBlock),y=v?v.nodeName.toUpperCase():"",b=v?B.getParent(v.parentNode,B.isBlock):null,x=b?b.nodeName.toUpperCase():"",C=s&&s.ctrlKey;"LI"!=x||C||(v=b,y=x),h&&3==h.nodeType&&f>=h.nodeValue.length&&(p||i()||(l=B.create("br"),d.insertNode(l),d.setStartAfter(l),d.setEndAfter(l),c=!0)),l=B.create("br"),d.insertNode(l);var w=B.doc.documentMode;return p&&"PRE"==y&&(!w||8>w)&&l.parentNode.insertBefore(B.doc.createTextNode("\r"),l),u=B.create("span",{},"&nbsp;"),l.parentNode.insertBefore(u
 ,l),D.scrollIntoView(u),B.remove(u),c?(d.setStartBefore(l),d.setEndBefore(l)):(d.setStartAfter(l),d.setEndAfter(l)),D.setRng(d),r.undoManager.add(),m}}),x({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=D.isCollapsed()?[B.getParent(D.getNode(),B.isBlock)]:D.getSelectedBlocks(),r=c(n,function(e){return!!L.matchNode(e,t)});return-1!==u(r,m)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return k(e)},mceBlockQuote:function(){return k("blockquote")},Outdent:function(){var e;if(H.inline_styles){if((e=B.getParent(D.getStart(),B.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return m;if((e=B.getParent(D.getEnd(),B.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return m}return y("InsertUnorderedList")||y("InsertOrderedList")||!H.inline_styles&&!!B.getParent(D.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrder
 edList":function(e){var t=B.getParent(D.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),x({"FontSize,FontName":function(e){var t=0,n;return(n=B.getParent(D.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),x({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(U,[f],function(e){function t(e,o){var a=this,s,l;if(e=r(e),o=a.settings=o||{},s=o.base_uri,/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(a.source=e);var c=0===e.indexOf("//");0!==e.indexOf("/")||c||(e=(s?s.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(l=o.base_uri?o.base_uri.path:
 new t(location.href).directory,""===o.base_uri.protocol?e="//mce_host"+a.toAbsPath(l,e):(e=/([^#?]*)([#?]?.*)/.exec(e),e=(s&&s.protocol||"http")+"://mce_host"+a.toAbsPath(l,e[1])+e[2])),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(i,function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),a[t]=r}),s&&(a.protocol||(a.protocol=s.protocol),a.userInfo||(a.userInfo=s.userInfo),a.port||"mce_host"!==a.host||(a.port=s.port),a.host&&"mce_host"!==a.host||(a.host=s.host),a.source=""),c&&(a.protocol="")}var n=e.each,r=e.trim,i="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),o={ft
 p:21,http:80,https:443,mailto:25};return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(n&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=o[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:func
 tion(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.length<n.length)for(o=0,a=n.length;a>o;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s)
 ,a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t.parseDataUri=function(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}},t}),r($,[f],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],
 i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],"function"==typeof f&&c[d]?u[d]=s(d,f):u[d]=f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(q,[f],function(e){function t(t){function n(){return!1}function r(){return!0}function i(e,i){var o,s,l,c;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=u),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=r},i.stopPropaga
 tion=function(){i.isPropagationStopped=r},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=r},i.isDefaultPrevented=n,i.isPropagationStopped=n,i.isImmediatePropagationStopped=n),t.beforeFire&&t.beforeFire(i),o=d[e])for(s=0,l=o.length;l>s;s++){if(c=o[s],c.once&&a(e,c.func),i.isImmediatePropagationStopped())return i.stopPropagation(),i;if(c.func.call(u,i)===!1)return i.preventDefault(),i}return i}function o(t,r,i,o){var a,s,l;if(r===!1&&(r=n),r)for(r={func:r},o&&e.extend(r,o),s=t.toLowerCase().split(" "),l=s.length;l--;)t=s[l],a=d[t],a||(a=d[t]=[],f(t,!0)),i?a.unshift(r):a.push(r);return c}function a(e,t){var n,r,i,o,a;if(e)for(o=e.toLowerCase().split(" "),n=o.length;n--;){if(e=o[n],r=d[e],!e){for(i in d)f(i,!1),delete d[i];return c}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),d[e]=r);else r.length=0;r.length||(f(e,!1),delete d[e])}}else{for(e in d)f(e,!1);d={}}retu
 rn c}function s(e,t,n){return o(e,t,n,{once:!0})}function l(e){return e=e.toLowerCase(),!(!d[e]||0===d[e].length)}var c=this,u,d={},f;t=t||{},u=t.scope||c,f=t.toggleEvent||n,c.fire=i,c.on=o,c.off=a,c.once=s,c.has=l}var n=e.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchend"," ");return t.isNative=function(e){return!!n[e.toLowerCase()]},t}),r(j,[],function(){function e(e){this.create=e.create}return e.create=function(t,n){return new e({create:function(e,r){function i(t){e.set(r,t.value)}function o(e){t.set(n,e.value)}var a;return e.on("change:"+r,o),t.on("change:"+n,i),a=e._bindings,a||(a=e._bindings=[],e.on("destroy",function(){for(var e=a.leng
 th;e--;)a[e]()})),a.push(function(){t.off("change:"+n,i)}),t.get(n)}})},e}),r(K,[q],function(e){function t(t){return t._eventDispatcher||(t._eventDispatcher=new e({scope:t,toggleEvent:function(n,r){e.isNative(n)&&t.toggleNativeEvent&&t.toggleNativeEvent(n,r)}})),t._eventDispatcher}return{fire:function(e,n,r){var i=this;if(i.removed&&"remove"!==e)return n;if(n=t(i).fire(e,n,r),r!==!1&&i.parent)for(var o=i.parent();o&&!n.isPropagationStopped();)o.fire(e,n,!1),o=o.parent();return n},on:function(e,n,r){return t(this).on(e,n,r)},off:function(e,n){return t(this).off(e,n)},once:function(e,n){return t(this).once(e,n)},hasEventListeners:function(e){return t(this).has(e)}}}),r(Y,[j,K,$,f],function(e,t,n,r){function i(e){return e.nodeType>0}function o(e,t){var n,a;if(e===t)return!0;if(null===e||null===t)return e===t;if("object"!=typeof e||"object"!=typeof t)return e===t;if(r.isArray(t)){if(e.length!==t.length)re
 turn!1;for(n=e.length;n--;)if(!o(e[n],t[n]))return!1}if(i(e)||i(t))return e===t;a={};for(n in t){if(!o(e[n],t[n]))return!1;a[n]=!0}for(n in e)if(!a[n]&&!o(e[n],t[n]))return!1;return!0}return n.extend({Mixins:[t],init:function(t){var n,r;t=t||{};for(n in t)r=t[n],r instanceof e&&(t[n]=r.create(this,n));this.data=t},set:function(t,n){var r,i,a=this.data[t];if(n instanceof e&&(n=n.create(this,t)),"object"==typeof t){for(r in t)this.set(r,t[r]);return this}return o(a,n)||(this.data[t]=n,i={target:this,name:t,value:n,oldValue:a},this.fire("change:"+t,i),this.fire("change",i)),this},get:function(e){return this.data[e]},has:function(e){return e in this.data},bind:function(t){return e.create(this,t)},destroy:function(){this.fire("destroy")}})}),r(G,[$],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#(
 [\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.classes.contains(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:no
 t\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.pseudo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a<n.length;a++)">"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,h,p;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,p=e,h=0,i=o-1;i>=0;i--)for(c=a[i];p;){if(c.pseudo)for(f=p.parent().items(),u=d=f.length;u--&&f[u]!==p;);fo
 r(s=0,l=c.length;l>s;s++)if(!c[s](p,u,d)){s=l+1;break}if(s===l){h++;break}if(i===o-1)break;p=p.parent()}if(h===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(X,[f,G,$],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("
 string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].classes.contains(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this},addClass:function(e){return this.each(function(t){t.classes.add(e)})},removeClass:function(e){return this.
 each(function(t){t.classes.remove(e)})}},e.each("fire on off show hide append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(J,[f,b],function(e,t){var n=0;return{id:function(){return"mceu_"+n++},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.ge
 tViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},getRuntimeStyle:function(e,n){return t.DOM.getStyle(e,n,!0)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(Q,[],function(){return{parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},measureBox:function(e,t){function n(t){var n=doc
 ument.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}}}}),r(Z,[f],function(e){function t(){}function n(e){this.cls=[],this.cls._map={},this.onchange=e||t,this.prefix=""}return e.extend(n.prototype,{add:function(e){return e&&!this.contains(e)&&(this.cls._map[e]=!0,this.cls.push(e),this._change()),this},remove:function(e){if(this.contains(e)){for(var t=0;t<this.cls.length&&this.cls[t]!==e;t++);this.cls.splice(t,1),delete this.cls._map[e],this._change()}return this},toggle:function(e,t){var n=this.contains(e);return n!==t&&(n?this.remove(e):this.add(e),this._change()),this},contains:function(e){return!!this.cls._map[e]},_change:function(){delete this
 .clsValue,this.onchange.call(this)}}),n.prototype.toString=function(){var e;if(this.clsValue)return this.clsValue;e="";for(var t=0;t<this.cls.length;t++)t>0&&(e+=" "),e+=this.prefix+this.cls[t];return e},n}),r(ee,[],function(){function e(e,t){function n(e){window.setTimeout(e,0)}var r,i=window.requestAnimationFrame,o=["ms","moz","webkit"];for(r=0;r<o.length&&!i;r++)i=window[o[r]+"RequestAnimationFrame"];i||(i=n),i(e,t)}var t={},n;return{add:function(r){var i=r.parent();if(i){if(!i._layout||i._layout.isNative())return;t[i._id]||(t[i._id]=i),n||(n=!0,e(function(){var e,r;n=!1;for(e in t)r=t[e],r.state.get("rendered")&&r.reflow();t={}},document.body))}},remove:function(e){t[e._id]&&delete t[e._id]}}}),r(te,[$,f,q,Y,X,J,h,Q,Z,ee],function(e,t,n,r,i,o,a,s,l,c){function u(e){return e._eventDispatcher||(e._eventDispatcher=new n({scope:e,toggleEvent:function(t,r){r&&n.isNat
 ive(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e.state.get("rendered")&&d(e))}})),e._eventDispatcher}function d(e){function t(t){var n=e.getParentCtrl(t.target);n&&n.fire(t.type,t)}function n(){var e=c._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),c._lastHoverCtrl=null)}function r(t){var n=e.getParentCtrl(t.target),r=c._lastHoverCtrl,i=0,o,a,s;if(n!==r){if(c._lastHoverCtrl=n,a=n.parents().toArray().reverse(),a.push(n),r){for(s=r.parents().toArray().reverse(),s.push(r),i=0;i<s.length&&a[i]===s[i];i++);for(o=s.length-1;o>=i;o--)r=s[o],r.fire("mouseleave",{target:r.getEl()})}for(o=i;o<a.length;o++)n=a[o],n.fire("mouseenter",{target:n.getEl()})}}function i(t){t.preventDefault(),"mousewheel"==t.type?(t.deltaY=-1/40*t.wheelDelta,t.wheelDeltaX&&(t.deltaX=-1/40*t.wheelDel
 taX)):(t.deltaX=0,t.deltaY=t.detail),t=e.fire("wheel",t)}var o,s,l,c,u,d;if(u=e._nativeEvents){for(l=e.parents().toArray(),l.unshift(e),o=0,s=l.length;!c&&s>o;o++)c=l[o]._eventsRoot;for(c||(c=l[l.length-1]||e),e._eventsRoot=c,s=o,o=0;s>o;o++)l[o]._eventsRoot=c;var p=c._delegates;p||(p=c._delegates={});for(d in u){if(!u)return!1;"wheel"!==d||h?("mouseenter"===d||"mouseleave"===d?c._hasMouseEnter||(a(c.getEl()).on("mouseleave",n).on("mouseover",r),c._hasMouseEnter=1):p[d]||(a(c.getEl()).on(d,t),p[d]=!0),u[d]=!1):f?a(e.getEl()).on("mousewheel",i):a(e.getEl()).on("DOMMouseScroll",i)}}}var f="onmousewheel"in document,h=!1,p="mce-",m,g=0,v={Statics:{classPrefix:p},isRtl:function(){return m.rtl},classPrefix:p,init:function(e){function n(e){var t;for(e=e.split(" "),t=0;t<e.length;t++)i.classes.add(e[t])}var i=this,o,c;i.settings=e=t.extend({},i.Defaults,e),i._id=e.i
 d||"mceu_"+g++,i._aria={role:e.role},i._elmCache={},i.$=a,i.state=new r({visible:!0,active:!1,disabled:!1,value:""}),i.data=new r(e.data),i.classes=new l(function(){i.state.get("rendered")&&(i.getEl().className=this.toString())}),i.classes.prefix=i.classPrefix,o=e.classes,o&&(i.Defaults&&(c=i.Defaults.classes,c&&o!=c&&n(c)),n(o)),t.each("title text name visible disabled active value".split(" "),function(t){t in e&&i[t](e[t])}),i.on("click",function(){return i.disabled()?!1:void 0}),i.settings=e,i.borderBox=s.parseBox(e.border),i.paddingBox=s.parseBox(e.padding),i.marginBox=s.parseBox(e.margin),e.hidden&&i.hide()},Properties:"parent,name",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},initLayoutRect:function(){var e=this,t=e.setti
 ngs,n,r,i=e.getEl(),a,l,c,u,d,f,h,p;n=e.borderBox=e.borderBox||s.measureBox(i,"border"),e.paddingBox=e.paddingBox||s.measureBox(i,"padding"),e.marginBox=e.marginBox||s.measureBox(i,"margin"),p=o.getSize(i),f=t.minWidth,h=t.minHeight,c=f||p.width,u=h||p.height,a=t.width,l=t.height,d=t.autoResize,d="undefined"!=typeof d?d:!a&&!l,a=a||c,l=l||u;var m=n.left+n.right,g=n.top+n.bottom,v=t.maxWidth||65535,y=t.maxHeight||65535;return e._layoutRect=r={x:t.x||0,y:t.y||0,w:a,h:l,deltaW:m,deltaH:g,contentW:a-m,contentH:l-g,innerW:a-m,innerH:l-g,startMinWidth:f||0,startMinHeight:h||0,minW:Math.min(c,v),minH:Math.min(u,y),maxW:v,maxH:y,autoResize:d,scrollW:0},e._lastLayoutRect={},r},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,l;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=i&
 lt;n.minW?n.minW:i,i=i>n.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=i<n.minH?n.minH:i,i=i>n.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=i<n.minW-o?n.minW-o:i,i=i>n.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=i<n.minH-a?n.minH-a:i,i=i>n.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(l=m.repaintControls,
-l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o,a,s,l,c,u;c=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,i=e._layoutRect,l=e._lastRepaintRect||{},o=e.borderBox,a=o.left+o.right,s=o.top+o.bottom,i.x!==l.x&&(t.left=c(i.x)+"px",l.x=i.x),i.y!==l.y&&(t.top=c(i.y)+"px",l.y=i.y),i.w!==l.w&&(u=c(i.w-a),t.width=(u>=0?u:0)+"px",l.w=i.w),i.h!==l.h&&(u=c(i.h-s),t.height=(u>=0?u:0)+"px",l.h=i.h),e._hasBody&&i.innerW!==l.innerW&&(u=c(i.innerW),r=e.getEl("body"),r&&(n=r.style,n.width=(u>=0?u:0)+"px"),l.innerW=i.innerW),e._hasBody&&i.innerH!==l.innerH&&(u=c(i.innerH),r=r||e.getEl("body"),r&&(n=n||r.style,n.height=(u>=0?u:0)+"px"),l.innerH=i.innerH),e._lastRepaintRect=l,e.fire("repaint",{
 },!1)},on:function(e,t){function n(e){var t,n;return"string"!=typeof e?e:function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t?t.call(n,i):(i.action=e,void this.fire("execute",i))}}var r=this;return u(r).on(e,n(t)),r},off:function(e,t){return u(this).off(e,t),this},fire:function(e,t,n){var r=this;if(t=t||{},t.control||(t.control=r),t=u(r).fire(e,t),n!==!1&&r.parent)for(var i=r.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return u(this).has(e)},parents:function(e){var t=this,n,r=new i;for(n=t.parent();n;n=n.parent())r.add(n);return e&&(r=r.filter(e)),r},parentsAndSelf:function(e){return new i(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.ht
 ml(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=a("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return m.translate?m.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n
 .items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),r,i;if(e.items){var o=e.items().toArray();for(i=o.length;i--;)o[i].remove()}n&&n.items&&(r=[],n.items().each(function(t){t!==e&&r.push(t)}),n.items().set(r),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&a(t).off();var s=e.getRoot().controlIdLookup;return s&&delete s[e._id],t&&t.parentNode&&t.parentNode.removeChild(t),e.state.set("rendered",!1),e.state.destroy(),e.fire("remove"),e},renderBefore:function(e){return a(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return a(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var e=this,t=e.settings,n,r,i,o,s;e.$el=a(e.getEl()),e.state.set(&quo
 t;rendered",!0);for(o in t)0===o.indexOf("on")&&e.on(o.substr(2),t[o]);if(e._eventsRoot){for(i=e.parent();!s&&i;i=i.parent())s=i._eventsRoot;if(s)for(o in s._nativeEvents)e._nativeEvents[o]=!0}d(e),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e.settings.border&&(r=e.borderBox,e.$el.css({"border-top-width":r.top,"border-right-width":r.right,"border-bottom-width":r.bottom,"border-left-width":r.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var u in e._aria)e.aria(u,e._aria[u]);e.state.get("visible")===!1&&(e.getEl().style.display="none"),e.bindStates(),e.state.on("change:visible",function(t){var n=t.value,r;e.state.get("rendered")&&(e.getEl().style.display=n===!1?"none":"",e.getEl().getBoundingClientRect()),r=e.parent
 (),r&&(r._lastRect=null),e.fire(n?"show":"hide"),c.add(e)}),e.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){c.remove(this);var e=this.parent();return e._layout&&!e._layout.isNative()&&e.reflow(),this}};return t.each("text title visible disabled active value".split(" "),function(e){v[e]=
 function(t){return 0===arguments.length?this.state.get(e):("undefined"!=typeof t&&this.state.set(e,t),this)}}),m=e.extend(v)}),r(ne,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(re,[],function(){return function(e){function t(e){return e&&1===e.nodeType}function n(e){return e=e||x,t(e)?e.getAttribute("role"):null}function r(e){for(var t,r=e||x;r=r.parentNode;)if(t=n(r))return t}function i(e){var n=x;return t(n)?n.getAttribute("aria-"+e):void 0}function o(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t}function a(e){return o(e)&&!e.hidden?!0:/^(but
 ton|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(n(e))?!0:!1}function s(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){a(e)&&n.push(e);for(var r=0;r<e.childNodes.length;r++)t(e.childNodes[r])}}var n=[];return t(e||b.getEl()),n}function l(e){var t,n;e=e||C,n=e.parents().toArray(),n.unshift(e);for(var r=0;r<n.length&&(t=n[r],!t.settings.ariaRoot);r++);return t}function c(e){var t=l(e),n=s(t.getEl());t.settings.ariaRemember&&"lastAriaIndex"in t?u(t.lastAriaIndex,n):u(0,n)}function u(e,t){return 0>e?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function d(e,t){var n=-1,r=l();t=t||s(r.getEl());for(var i=0;i<t.length;i++)t[i]===x&&(n=i);n+=e,r.lastAriaIndex=u(n,t)}function f(){var e=r();"tablist"==e?d(-1,s(x.parentNode)):C.parent().submenu?v():d(-1)}function h(){var e=n(),t=r();"tablist"==t?d(1,s(x.parentNode)):"menuitem"==e&&am
 p;"menu"==t&&i("haspopup")?y():d(1)}function p(){d(-1)}function m(){var e=n(),t=r();"menuitem"==e&&"menubar"==t?y():"button"==e&&i("haspopup")?y({key:"down"}):d(1)}function g(e){var t=r();if("tablist"==t){var n=s(C.getEl("body"))[0];n&&n.focus()}else d(e.shiftKey?-1:1)}function v(){C.fire("cancel")}function y(e){e=e||{},C.fire("click",{target:x,aria:e})}var b=e.root,x,C;try{x=document.activeElement}catch(w){x=document.body}return C=b.getParentCtrl(x),b.on("keydown",function(e){function t(e,t){o(x)||t(e)!==!1&&e.preventDefault()}if(!e.isDefaultPrevented())switch(e.keyCode){case 37:t(e,f);break;case 39:t(e,h);break;case 38:t(e,p);break;case 40:t(e,m);break;case 27:v();break;case 14:case 13:case 32:t(e,y);break;case 9:g(e)!==!1&&e.preventDefault()}}),b.on("focusin",function(e){x=e.target,C=e.control}),{focusFir
 st:c}}}),r(ie,[te,X,G,ne,re,f,h,Z,ee],function(e,t,n,r,i,o,a,s,l){var c={};return e.extend({init:function(e){var n=this;n._super(e),e=n.settings,e.fixed&&n.state.set("fixed",!0),n._items=new t,n.isRtl()&&n.classes.add("rtl"),n.bodyClasses=new s(function(){n.state.get("rendered")&&(n.getEl("body").className=this.toString())}),n.bodyClasses.prefix=n.classPrefix,n.classes.add("container"),n.bodyClasses.add("container-body"),e.containerCls&&n.classes.add(e.containerCls),n._layout=r.create((e.layout||"")+"layout"),n.settings.items?n.add(n.settings.items):n.add(n.render()),n._hasBody=!0},items:function(){return this._items},find:function(e){return e=c[e]=c[e]||new n(e),e.find(this)},add:function(e){var t=this;return t.items().add(t.create(e)).parent(t),t},focus:function(e){var t=this,n,r,i;return e&&(r=t.keyboardNav||t.parents().eq(-1)[0].keyboardNav)?void r.focusFirst(t
 ):(i=t.find("*"),t.statusbar&&i.add(t.statusbar.items()),i.each(function(e){return e.settings.autofocus?(n=null,!1):void(e.canFocus&&(n=n||e))}),n&&n.focus(),t)},replace:function(e,t){for(var n,r=this.items(),i=r.length;i--;)if(r[i]===e){r[i]=t;break}i>=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r;t.parent(e),t.state.get("rendered")||(r=e.getEl("body"),r.hasChildNodes()&&n<=r.childNodes.length-1?a(r.childNodes[n]).before(t.renderHtml()):a(r).
 append(t.renderHtml()),t.postRender(),l.add(t))}),e._layout.applyClasses(e.items().filter(":visible")),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t<i.length-1&&(t+=1),t>=0&&t<i.length&&(o=i.slice(0,t).toArray(),a=i.slice(t).toArray(),i.set(o.concat(e,a))),r.renderNew()},fromJSON:function(e){var t=this;for(var n in e)t.find("#"+n).value(e[n]);return t},toJSON:function(){var e=this,t={};return e.find("*").each(function(e){var n=e.name(),r=e.value();n&&"undefined"!=typeof r&&(t[n]=r)}),t},renderHtml:function(){var e=this,t=e._layout,n=this.settings.role;return e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"'+(n?' role="'+this.sett
 ings.role+'"':"")+'><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e.state.set("rendered",!0),e.settings.style&&e.$el.css(e.settings.style),e.settings.border&&(t=e.borderBox,e.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(l.remove(this),this.visible()){fo
 r(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(oe,[h],function(e){function t(e){var t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}function n(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<t.length;n++)e[t[n]]=e.changedTouches[0][t[n]]}return function(r,i){function o(){return s.getElementById(i.handle||r)}var a,s=i.document||document,l,c,u,d,f,h;i=i||{},c=function(r){var c=t(s),p,m;n(r),r.preventDefault(),l=r.button,p=o(),f=r.sc
 reenX,h=r.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,a=e("<div>").css({position:"absolute",top:0,left:0,width:c.width,height:c.height,zIndex:2147483647,opacity:1e-4,cursor:m}).appendTo(s.body),e(s).on("mousemove touchmove",d).on("mouseup touchend",u),i.start(r)},d=function(e){return n(e),e.button!==l?u(e):(e.deltaX=e.screenX-f,e.deltaY=e.screenY-h,e.preventDefault(),void i.drag(e))},u=function(t){n(t),e(s).off("mousemove touchmove",d).off("mouseup touchend",u),a.remove(),i.stop&&i.stop(t)},this.destroy=function(){e(o()).off()},e(o()).on("mousedown touchstart",c)}}),r(ae,[h,oe],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,h,p,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase()
 ,e(i.getEl("absend")).css(y,i.layoutRect()[l]-1),!c)return void e(f).css("display","none");e(f).css("display","block"),d=i.getEl("body"),h=i.getEl("scroll"+t+"t"),p=d["client"+s]-2*o,p-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=p/m,v={},v[y]=d["offset"+a]+o,v[b]=p,e(f).css(v),v={},v[y]=d["scroll"+a]*g,v[b]=p*g,e(h).css(v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;e(i.getEl()).append('<div id="'+u+'" class="'+d+"scrollbar "+d+"scrollbar-"+n+'"><div id="'+u+'t" 
 class="'+d+'scrollbar-thumb"></div></div>'),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e("#"+u).addClass(d+"active")},drag:function(e){var t,u,d,f,h=i.layoutRect();u=h.contentW>h.innerW,d=h.contentH>h.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e("#"+u).removeClass(d+"active")}})}i.classes.add("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.
 scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e(i.getEl("body")).on("scroll",n)),n())}}}),r(se,[ie,ae],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div>":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1" role="group">'+(e._preBodyHtml||"")+n+"</div>"}})}),r(le,[J],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,h;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t.state.get("fixed")&&"static"==e.getRuntimeStyle(document.body,"position&quo
 t;)&&(a-=f.x,s-=f.y),i=t.getEl(),h=e.getSize(i),l=h.width,c=h.height,h=e.getSize(n),u=h.width,d=h.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o<r.length;o++){var a=t(this,n,r[o]);if(this.state.get("fixed")){if(a.x>0&&a.x+a.w<i.w&&a.y>0&&a.y+a.h<i.h)return r[o]}else if(a.x>i.x&&a.x+a.w<i.w+i.x&&a.y>i.y&&a.y+a.h<i.h+i.y)return r[o]}return r[0]},moveRel:function(e,n){"string"!=typeof n&&(n=this.testMoveRel(e,n));var r=t(this,e,n);return this.moveTo(
 r.x,r.y)},moveBy:function(e,t){var n=this,r=n.layoutRect();return n.moveTo(r.x+e,r.y+t),n},moveTo:function(t,n){function r(e,t,n){return 0>e?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i.state.get("rendered")?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(ce,[J],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(ue,[se,le,ce,J,h],function(e,t,n,r,i){function o(e,t){for(;e;){if(e==t)return!0;e=e.parent()}}function a(e){for(var t=g.length;t--;){var n=g[t
 ],r=n.getParentCtrl(e.target);if(n.settings.autohide){if(r&&(o(r,n)||n.parent()===r))continue;e=n.fire("autohide",{target:e.target}),e.isDefaultPrevented()||n.hide()}}}function s(){h||(h=function(e){2!=e.button&&a(e)},i(document).on("click touchstart",h))}function l(){p||(p=function(){var e;for(e=g.length;e--;)u(g[e])},i(window).on("scroll",p))}function c(){if(!m){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;m=function(){document.all&&t==e.clientWidth&&n==e.clientHeight||(t=e.clientWidth,n=e.clientHeight,b.hideAll())},i(window).on("resize",m)}}function u(e){function t(t,n){for(var r,i=0;i<g.length;i++)if(g[i]!=e)for(r=g[i].parent();r&&(r=r.parent());)r==e&&g[i].fixed(t).moveBy(0,n).repaint()}var n=r.getViewPort().y;e.settings.autofix&&(e.state.get("fixed")?e._autoFixY>n&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._
 autoFixY=e.layoutRect().y,e._autoFixY<n&&(e.fixed(!0).layoutRect({y:0}).repaint(),t(!0,n-e._autoFixY))))}function d(e,t){var n,r=b.zIndex||65535,o;if(e)v.push(t);else for(n=v.length;n--;)v[n]===t&&v.splice(n,1);if(v.length)for(n=0;n<v.length;n++)v[n].modal&&(r++,o=v[n]),v[n].getEl().style.zIndex=r,v[n].zIndex=r,r++;var a=document.getElementById(t.classPrefix+"modal-block");o?i(a).css("z-index",o.zIndex-1):a&&(a.parentNode.removeChild(a),y=!1),b.currentZIndex=r}function f(e){var t;for(t=g.length;t--;)g[t]===e&&g.splice(t,1);for(t=v.length;t--;)v[t]===e&&v.splice(t,1)}var h,p,m,g=[],v=[],y,b=e.extend({Mixins:[t,n],init:function(e){var t=this;t._super(e),t._eventsRoot=t,t.classes.add("floatpanel"),e.autohide&&(s(),c(),g.push(t)),e.autofix&&(l(),t.on("move",function(){u(this)})),t.on("postrender show",function(e){if(e.control==t){var n,r=t.classPrefix;t.modal&&
 !y&&(n=i("#"+r+"modal-block"),n[0]||(n=i('<div id="'+r+'modal-block" class="'+r+"reset "+r+'fade"></div>').appendTo(t.getContainerElm())),setTimeout(function(){n.addClass(r+"in"),i(t.getEl()).addClass(r+"in")},0),y=!0),d(!0,t)}}),t.on("show",function(){t.parents().each(function(e){return e.state.get("fixed")?(t.fixed(!0),!1):void 0})}),e.popover&&(t._preBodyHtml='<div class="'+t.classPrefix+'arrow"></div>',t.classes.add("popover").add("bottom").add(t.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t.state.get("fixed")!=e){if(t.state.get("rendered")){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e=this,t,n=e._super();for(t=g.length;t--&&g[t]!==e;);re
 turn-1===t&&g.push(e),n},hide:function(){return f(this),d(!1,this),this._super()},hideAll:function(){b.hideAll()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||(e.remove(),d(!1,e)),e},remove:function(){f(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return b.hideAll=function(){for(var e=g.length;e--;){var t=g[e];t&&t.settings.autohide&&(t.hide(),g.splice(e,1))}},b}),r(de,[ue,se,J,h,oe,Q,u],function(e,t,n,r,i,o,a){function s(e){var t="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0",n=r("meta[name=viewport]")[0],i;a.overrideViewPort!==!1&&(n||(n=document.createElement("meta"),n.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),i=n.getAttribute
 ("content"),i&&"undefined"!=typeof d&&(d=i),n.setAttribute("content",e?t:d))}function l(e){for(var t=0;t<u.length;t++)if(u[t]._fullscreen)return;r([document.documentElement,document.body]).removeClass(e+"fullscreen")}function c(){function e(){var e,t=n.getWindowSize(),r;for(e=0;e<u.length;e++)r=u[e].layoutRect(),u[e].moveTo(u[e].settings.x||Math.max(0,t.w/2-r.w/2),u[e].settings.y||Math.max(0,t.h/2-r.h/2))}var t={w:window.innerWidth,h:window.innerHeight};window.setInterval(function(){var e=window.innerWidth,n=window.innerHeight;(t.w!=e||t.h!=n)&&(t={w:e,h:n},r(window).trigger("resize"))},0),r(window).on("resize",e)}var u=[],d="",f=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;
 n._super(e),n.isRtl()&&n.classes.add("rtl"),n.classes.add("window"),n.bodyClasses.add("window-body"),n.state.set("fixed",!0),e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.classes.add("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&amp
 ;(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=e.settings.x||Math.max(0,a.w/2-t.w/2),t.y=e.settings.y||Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='<div id="'+n+'-head" class="'+r+'window-head"><div id="'+n+'-title" class="'+r+'title">'+e.enc
 ode(i.title)+'</div><button type="button" class="'+r+'close" aria-hidden="true">\xd7</button><div id="'+n+'-dragh" class="'+r+'dragh"></div></div>'),i.url&&(s='<iframe src="'+i.url+'" tabindex="-1"></iframe>'),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'<div id="'+n+'" class="'+e.classes+'" hidefocus="1"><div class="'+e.classPrefix+'reset" role="application">'+o+'<div id="'+n+'-body" class="'+e.bodyClasses+'">'+s+"</div>"+a+"</div></div>"},fullscreen:function(e){var t=this,i=document.documentElement,a,s=t.classPrefix,l;if(e!=t._fullscreen)if(r(window).on("resize",function(){var e;if(t._fullscreen)if(a)t._timer||(t._timer=setTimeout(function(){var e=n.getWindo
 wSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(a=!0)}}),l=t.layoutRect(),t._fullscreen=e,e){t._initial={x:l.x,y:l.y,w:l.w,h:l.h},t.borderBox=o.parseBox("0"),t.getEl("head").style.display="none",l.deltaH-=l.headerH+2,r([i,document.body]).addClass(s+"fullscreen"),t.classes.add("fullscreen");var c=n.getWindowSize();t.moveTo(0,0).resizeTo(c.w,c.h)}else t.borderBox=o.parseBox(t.settings.border),t.getEl("head").style.display="",l.deltaH+=l.headerH,r([i,document.body]).removeClass(s+"fullscreen"),t.classes.remove("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.classes.add("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus()
 ,this.dragHelper=new i(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()}),u.push(e),s(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t;for(e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),t=u.length;t--;)u[t]===e&&u.splice(t,1);s(u.length>0),l(e.classPrefix)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return a.desktop||c(),f}),r(fe,[de],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxW
 idth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){function r(e,t,n){return{type:"button",text:e,subtype:n?"primary":"",onClick:function(e){e.control.parents()[1].close(),o(t)}}}var i,o=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:i=[r("Ok",!0,!0),r("Cancel",!1)];break;case t.YES_NO:case t.YES_NO_CANCEL:i=[r("Yes",1,!0),r("No",0)],n.buttons==t.YES_NO_CANCEL&&i.push(r("Cancel",-1));break;default:i=[r("Ok",!0,!0)]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:i,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){o(!1)}}).renderTo
 (document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(he,[de,fe],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,n.on("remove",function(){for(var e=o.length;e--;)o[e].close()}),i.open=function(t,r){var i;return n.editorManager.setActive(n),t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close&
 quot;,function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);o.length||n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},1===o.length&&n.nodeChanged(),i.renderTo().reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)},i.getWindows=function(){return o}}}),r(pe,[b],function(e){function t(t,n,r){for(var i=[];n&&n!=t;n=n.parentNode)i.push(e.nodeIndex(n,r));return i}function n(e,t){var n,r,i;for(r=e,n=t.length-1;n>=0;n--){if(i=r.childNodes,t[n]>i.length-1)return null;r=i[t[n]]}return r}return{create:t,resolve:n}}),r(me,[D,w,m,pe,E,v,u,f],function(e,t,n,r,i,o,a
 ,s){return function(l){function c(e,t){try{l.getDoc().execCommand(e,!1,t)}catch(n){}}function u(){var e=l.getDoc().documentMode;return e?e:6}function d(e){return e.isDefaultPrevented()}function f(e){var t,n;e.dataTransfer&&(l.selection.isCollapsed()&&"IMG"==e.target.tagName&&J.select(e.target),t=l.selection.getContent(),t.length>0&&(n=ie+escape(l.id)+","+escape(t),e.dataTransfer.setData(oe,n)))}function h(e){var t;return e.dataTransfer&&(t=e.dataTransfer.getData(oe),t&&t.indexOf(ie)>=0)?(t=t.substr(ie.length).split(","),{id:unescape(t[0]),html:unescape(t[1])}):null}function p(e){l.queryCommandSupported("mceInsertClipboardContent")?l.execCommand("mceInsertClipboardContent",!1,{content:e}):l.execCommand("mceInsertContent",!1,e)}function m(){function i(e){var t=b.schema.getBlockElements(),n=l.getBody();if("BR"!=e.nodeName)return!1;for(e=e;e!=n&&!t[e.nodeNa
 me];e=e.parentNode)if(e.nextSibling)return!1;return!0}function o(e,t){var n;for(n=e.nextSibling;n&&n!=t;n=n.nextSibling)if((3!=n.nodeType||0!==K.trim(n.data).length)&&n!==t)return!1;return n===t}function a(e,t,r){var o,a,s;for(s=b.schema.getNonEmptyElements(),o=new n(r||e,e);a=o[t?"next":"prev"]();){if(s[a.nodeName]&&!i(a))return a;if(3==a.nodeType&&a.data.length>0)return a}}function c(e){var n,r,i,o,s;if(!e.collapsed&&(n=b.getParent(t.getNode(e.startContainer,e.startOffset),b.isBlock),r=b.getParent(t.getNode(e.endContainer,e.endOffset),b.isBlock),s=l.schema.getTextBlockElements(),n!=r&&s[n.nodeName]&&s[r.nodeName]&&"false"!==b.getContentEditable(n)&&"false"!==b.getContentEditable(r)))return e.deleteContents(),i=a(n,!1),o=a(r,!0),b.isEmpty(r)||K(n).append(r.childNodes),K(r).remove(),i?1==i.nodeType?"BR"==i.nodeName?(e.setStartBefore(i),e.setEndBefore(i)):(e.se
 tStartAfter(i),e.setEndAfter(i)):(e.setStart(i,i.data.length),e.setEnd(i,i.data.length)):o&&(1==o.nodeType?(e.setStartBefore(o),e.setEndBefore(o)):(e.setStart(o,0),e.setEnd(o,0))),x.setRng(e),!0}function u(e,n){var r,i,s,c,u,d;if(!e.collapsed)return e;if(u=e.startContainer,d=e.startOffset,3==u.nodeType)if(n){if(d<u.data.length)return e}else if(d>0)return e;if(r=t.getNode(e.startContainer,e.startOffset),s=b.getParent(r,b.isBlock),i=a(l.getBody(),n,r),c=b.getParent(i,b.isBlock),!r||!i)return e;if(c&&s!=c)if(n){if(!o(s,c))return e;1==r.nodeType?"BR"==r.nodeName?e.setStartBefore(r):e.setStartAfter(r):e.setStart(r,r.data.length),1==i.nodeType?e.setEnd(i,0):e.setEndBefore(i)}else{if(!o(c,s))return e;1==i.nodeType?"BR"==i.nodeName?e.setStartBefore(i):e.setStartAfter(i):e.setStart(i,i.data.length),1==r.nodeType?e.setEnd(r,0):e.setEndBefore(r)}return e}function m(e){var t=x.getRng();return t=u(t,e),c(t)?!0:void 0}function g(e,t){function n(e,n){retur
 n m=K(n).parents().filter(function(e,t){return!!l.schema.getTextInlineElements()[t.nodeName]}),c=e.cloneNode(!1),m=s.map(m,function(e){return e=e.cloneNode(!1),c.hasChildNodes()?(e.appendChild(c.firstChild),c.appendChild(e)):c.appendChild(e),c.appendChild(e),e}),m.length?(p=b.create("br"),m[0].appendChild(p),b.replace(c,e),t.setStartBefore(p),t.setEndBefore(p),l.selection.setRng(t),p):null}function i(e){return e&&l.schema.getTextBlockElements()[e.tagName]}var o,a,c,u,d,f,h,p,m;if(t.collapsed&&(f=t.startContainer,h=t.startOffset,a=b.getParent(f,b.isBlock),i(a)))if(1==f.nodeType){if(f=f.childNodes[h],f&&"BR"!=f.tagName)return;if(d=e?a.nextSibling:a.previousSibling,b.isEmpty(a)&&i(d)&&b.isEmpty(d)&&n(a,f))return b.remove(d),!0}else if(3==f.nodeType){if(o=r.create(a,f),u=a.cloneNode(!0),f=r.resolve(u,o),e){if(h>=f.data.length)return;f.deleteData(h,1)}else{if(0>=h)return;f.deleteData(h-1,1)}if(b.isEmpty(u))return n
 (a,f)}}function v(e){var t,n,r;m(e)||(s.each(l.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&l.dom.setAttrib(e,"style",l.dom.getAttrib(e,"style"))}),t=new C(function(){}),t.observe(l.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),l.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),n=l.selection.getRng(),r=n.startContainer.parentNode,s.each(t.takeRecords(),function(e){if(b.isChildOf(e.target,l.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style");
-}s.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),b.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),l.selection.setRng(n))}})}}),t.disconnect(),s.each(l.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")}))}var y=l.getDoc(),b=l.dom,x=l.selection,C=window.MutationObserver,w,_;C||(w=!0,C=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified"
 ,e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),l.on("keydown",function(e){var t=e.keyCode==G,n=e.ctrlKey||e.metaKey;if(!d(e)&&(t||e.keyCode==Y)){var r=l.selection.getRng(),i=r.startContainer,o=r.startOffset;if(t&&e.shiftKey)return;if(g(t,r))return void e.preventDefault();if(!n&&r.collapsed&&3==i.nodeType&&(t?o<i.data.length:o>0))return;e.preventDefault(),n&&l.selection.getSel().modify("extend",t?"forward":"backward",e.metaKey?"lineboundary":"word"),v(t)}}),l.on("keypress",function(t){if(!d(t)&&!x.isCollapsed()&&t.charCode>31&&!e.metaKeyPressed(t)){var n,r,i,o,a,s;n=l.selection.getRng(),s=String.fromCharCode(t.charCode),t.preventDefault(),r=K(n.startContaine
 r).parents().filter(function(e,t){return!!l.schema.getTextInlineElements()[t.nodeName]}),v(!0),r=r.filter(function(e,t){return!K.contains(l.getBody(),t)}),r.length?(i=b.createFragment(),r.each(function(e,t){t=t.cloneNode(!1),i.hasChildNodes()?(t.appendChild(i.firstChild),i.appendChild(t)):(a=t,i.appendChild(t)),i.appendChild(t)}),a.appendChild(l.getDoc().createTextNode(s)),o=b.getParent(n.startContainer,b.isBlock),b.isEmpty(o)?K(o).empty().append(i):n.insertNode(i),n.setStart(a.firstChild,1),n.setEnd(a.firstChild,1),l.selection.setRng(n)):l.selection.setContent(s)}}),l.addCommand("Delete",function(){v()}),l.addCommand("ForwardDelete",function(){v(!0)}),w||(l.on("dragstart",function(e){_=x.getRng(),f(e)}),l.on("drop",function(e){if(!d(e)){var n=h(e);n&&(e.preventDefault(),window.setTimeout(function(){var r=t.getCaretRangeFromPoint(e.x,e.y,y);_&&(x.setRng(_),_=null),v(),x.setRng(r),p(n.html)},0))}}),l.on("cut",function(
 e){d(e)||!e.clipboardData||l.selection.isCollapsed()||(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",l.selection.getContent()),e.clipboardData.setData("text/plain",l.selection.getContent({format:"text"})),window.setTimeout(function(){v(!0)},0))}))}function g(){function e(e){var t=X.create("body"),n=e.cloneContents();return t.appendChild(n),J.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(l.getBody()),t.compareRanges(n,r)}var i=e(n),o=X.createRng();o.selectNode(l.getBody());var a=e(o);return i===a}l.on("keydown",function(e){var t=e.keyCode,r,i;if(!d(e)&&(t==G||t==Y)){if(r=l.selection.isCollapsed(),i=l.getBody(),r&&!X.isEmpty(i))return;if(!r&&!n(l.selection.getRng()))return;e.preventDefault(),l.setContent(""),i.firstChild&&X.isBlock(i.firstChild)?l.selection.se
 tCursorLocation(i.firstChild,0):l.selection.setCursorLocation(i,0),l.nodeChanged()}})}function v(){l.shortcuts.add("meta+a",null,"SelectAll")}function y(){l.settings.content_editable||(X.bind(l.getDoc(),"focusin",function(){J.setRng(J.getRng())}),X.bind(l.getDoc(),"mousedown mouseup",function(e){e.target==l.getDoc().documentElement&&(l.getBody().focus(),"mousedown"==e.type?J.placeCaretAt(e.clientX,e.clientY):J.setRng(J.getRng()))}))}function b(){l.on("keydown",function(e){if(!d(e)&&e.keyCode===Y){if(!l.getBody().getElementsByTagName("hr").length)return;if(J.isCollapsed()&&0===J.getRng(!0).startOffset){var t=J.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return X.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(X.remove(n),e.preventDefault())}}})}function x(){window.Range.prototype.getClientRects||l.on("m
 ousedown",function(e){if(!d(e)&&"HTML"===e.target.nodeName){var t=l.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function C(){l.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&(e.preventDefault(),J.getSel().setBaseAndExtent(t,0,t,1),l.nodeChanged()),"A"==t.nodeName&&X.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),J.select(t))})}function w(){function e(){var e=X.getAttribs(J.getStart().cloneNode(!1));return function(){var t=J.getStart();t!==l.getBody()&&(X.setAttrib(t,"style",null),j(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!J.isCollapsed()&&X.getParent(J.getStart(),X.isBlock)!=X.getParent(J.getEnd(),X.isBlock)}l.on("keypress",function(n){var r;return d(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),l.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),X.bind(l.get
 Doc(),"cut",function(n){var r;!d(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function _(){document.body.setAttribute("role","application")}function E(){l.on("keydown",function(e){if(!d(e)&&e.keyCode===Y&&J.isCollapsed()&&0===J.getRng(!0).startOffset){var t=J.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function N(){u()>7||(c("RespectVisibilityInDesign",!0),l.contentStyles.push(".mceHideBrInPre pre br {display: none}"),X.addClass(l.getBody(),"mceHideBrInPre"),Z.addNodeFilter("pre",function(e){for(var t=e.length,n,r,o,a;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)o=n[r],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new i("#text",3),o,!0).value="\n"}),ee.addNodeFil
 ter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function S(){X.bind(l.getBody(),"mouseup",function(){var e,t=J.getNode();"IMG"==t.nodeName&&((e=X.getStyle(t,"width"))&&(X.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),X.setStyle(t,"width","")),(e=X.getStyle(t,"height"))&&(X.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),X.setStyle(t,"height","")))})}function k(){l.on("keydown",function(t){var n,r,i,o,a;if(!d(t)&&t.keyCode==e.BACKSPACE&&(n=J.getRng(),r=n.startContainer,i=n.startOffset,o=X.getRoot(),a=r,n.collapsed&&0===i)){for(;a&&a.parentNode&&a.parentNode.firstChild==a&&a.parentNode!=o;)a=a.parentNode;"BLOCKQUOTE&quo
 t;===a.tagName&&(l.formatter.toggle("blockquote",null,a),n=X.createRng(),n.setStart(r,0),n.setEnd(r,0),J.setRng(n))}})}function T(){function e(){l._refreshContentEditable(),c("StyleWithCSS",!1),c("enableInlineTableEditing",!1),Q.object_resizing||c("enableObjectResizing",!1)}Q.readonly||l.on("BeforeExecCommand MouseDown",e)}function R(){function e(){j(X.select("a"),function(e){var t=e.parentNode,n=X.getRoot();if(t.lastChild===e){for(;t&&!X.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}X.add(t,"br",{"data-mce-bogus":1})}})}l.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function A(){Q.forced_root_block&&l.on("init",function(){c("DefaultParagraphSeparator",Q.forced_root_block)})}function B(){l.on("Undo Redo SetContent",function(e){e.initia
 l||l.execCommand("mceRepaint")})}function D(){l.on("keydown",function(e){var t;d(e)||e.keyCode!=Y||(t=l.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),l.undoManager.beforeChange(),X.remove(t.item(0)),l.undoManager.add()))})}function L(){var e;u()>=10&&(e="",j("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),l.contentStyles.push(e+"{padding-right: 1px !important}"))}function M(){u()<9&&(Z.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),ee.addNodeFilter("noscript",function(e){for(var t=e.length,n,r,a;t--;)n=e[t],r=e[t].firstChild,r?r.value=o.decode(r.value):(a=n.attributes.map["data-mce-innertext"],a&&(n.attr("data-mce-innertext",null),r=new i("#text",3),
 r.value=a,r.raw=!0,n.append(r)))}))}function H(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),X.unbind(r,"mouseup",n),X.unbind(r,"mousemove",t),a=o=0}var r=X.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,X.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(X.bind(r,"mouseup",n),X.bind(r,"mousemove",t),X.getRoot().focus(),a.select())}})}function P(){l.on("keyup focusin mouseup",function(t){65==t.k
 eyCode&&e.metaKeyPressed(t)||J.normalize()},!0)}function O(){l.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function I(){l.inline||l.on("keydown",function(){document.activeElement==document.body&&l.getWin().focus()})}function F(){l.inline||(l.contentStyles.push("body {min-height: 150px}"),l.on("click",function(e){var t;if("HTML"==e.target.nodeName){if(a.ie>11)return void l.getBody().focus();t=l.selection.getRng(),l.getBody().focus(),l.selection.setRng(t),l.selection.normalize(),l.nodeChanged()}}))}function z(){a.mac&&l.on("keydown",function(t){!e.metaKeyPressed(t)||t.shiftKey||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),l.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","lineboundary"))})}function W(){c("AutoUrlDetect",!1)}function V(){l.on("click",f
 unction(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),l.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function U(){l.on("init",function(){l.dom.bind(l.getBody(),"submit",function(e){e.preventDefault()})})}function $(){Z.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"==e[t].attr("class")&&e[t].remove()})}function q(){l.on("dragstart",function(e){f(e)}),l.on("drop",function(e){if(!d(e)){var n=h(e);if(n&&n.id!=l.id){e.preventDefault();var r=t.getCaretRangeFromPoint(e.x,e.y,l.getDoc());J.setRng(r),p(n.html)}}})}var j=s.each,K=l.$,Y=e.BACKSPACE,G=e.DELETE,X=l.dom,J=l.selection,Q=l.settings,Z=l.parser,ee=l.serializer,te=a.gecko,ne=a.ie,re=a.webkit,ie="data:text/mce-internal,",oe=ne?"Text":"URL";k(),g(),P(),re&&(m(),y(),C(),A(),U(),E(),$(),a.
 iOS?(I(),F(),V()):v()),ne&&a.ie<11&&(b(),_(),N(),S(),D(),L(),M(),H()),a.ie>=11&&(F(),E()),a.ie&&(v(),W(),q()),te&&(b(),x(),w(),T(),R(),B(),O(),z(),E())}}),r(ge,[K,b,f],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=o.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()}function i(e,t){var n=r(e,t),i;if(e.delegates||(e.delegates={}),!e.delegates[t])if(e.settings.event_root){if(a||(a={},e.editorManager.on("removeEditor",function(){var t;if(!e.editorManager.activeEditor&&a){for(t in a)e.dom.unbind(r(e,t));a=null}})),a[t])return;i=function(n){for(var r=n.target,i=e.editorManager.editors,a=i.length;a--;){var s=i[a].getBody();(s===r||o.isChildOf(r,s))&&(i[a].hidden||i[a].fire(t,n))}},a[t]=i,o.bind(n,t,i)}else i=function(n){e.hidde
 n||e.fire(t,n)},o.bind(n,t,i),e.delegates[t]=i}var o=t.DOM,a,s={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;n.settings.readonly||"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(r(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e=this,t;if(e.delegates){for(t in e.delegates)e.dom.unbind(r(e,t),t,e.delegates[t]);delete e.delegates}e.inline||(e.getBody().onload=null,e.dom.unbind(e.getWin()),e.dom.unbind(e.getDoc())),e.dom.unbind(e.getBody()),e.dom.unbind(e.getContainer())}};return s=n.extend({},e,s)}),r(ve,[f,u],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122},o=e.makeMap("alt,ctrl,shift,meta,access");return function(a){function s(e,s,l,c){var u,d,f;f={func:l,scope:c||a,desc:a
 .translate(s)},n(r(e,"+"),function(e){e in o?f[e]=!0:/^[0-9]{2,}$/.test(e)?f.keyCode=parseInt(e,10):(f.charCode=e.charCodeAt(0),f.keyCode=i[e]||e.toUpperCase().charCodeAt(0))}),u=[f.keyCode];for(d in o)f[d]?u.push(d):f[d]=!1;return f.id=u.join(","),f.access&&(f.alt=!0,t.mac?f.ctrl=!0:f.shift=!0),f.meta&&(t.mac?f.meta=!0:(f.ctrl=!0,f.meta=!1)),f}var l=this,c={};a.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&!e.isDefaultPrevented()&&n(c,function(t){return t.ctrl==e.ctrlKey&&t.meta==e.metaKey&&t.alt==e.altKey&&t.shift==e.shiftKey&&(e.keyCode==t.keyCode||e.charCode&&e.charCode==t.charCode)?(e.preventDefault(),"keydown"==e.type&&t.func.call(t.scope),!0):void 0})}),l.add=function(t,i,o,l){var u;return u=o,"string"==typeof o?o=function(){a.execCommand(u,!1,null)}:e.isArray(u)&&(o=function(){a.execCommand(u[0],u[1],u[2])}),n(r
 (t.toLowerCase()),function(e){var t=s(e,i,o,l);c[t.id]=t}),!0},l.remove=function(e){var t=s(e);return c[t.id]?(delete c[t.id],!0):!1}}}),r(ye,[],function(){function e(e,t){return function(){e.apply(t,arguments)}}function t(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(t,e(r,this),e(i,this))}function n(e){var t=this;return null===this._state?void this._deferreds.push(e):void l(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function r(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)r
 eturn void s(e(n,t),e(r,this),e(i,this))}this._state=!0,this._value=t,o.call(this)}catch(a){i.call(this,a)}}function i(e){this._state=!1,this._value=e,o.call(this)}function o(){for(var e=0,t=this._deferreds.length;t>e;e++)n.call(this,this._deferreds[e]);this._deferreds=null}function a(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function s(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(i){if(r)return;r=!0,n(i)}}if(window.Promise)return window.Promise;var l=t.immediateFn||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,1)},c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,r){var i=this;return new t(function(t,o){n.call(i,new a(e,r,t,o))})},t.all=functi
 on(){var e=Array.prototype.slice.call(1===arguments.length&&c(arguments[0])?arguments[0]:arguments);return new t(function(t,n){function r(o,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(o,e)},n)}e[o]=a,0===--i&&t(e)}catch(l){n(l)}}if(0===e.length)return t([]);for(var i=e.length,o=0;o<e.length;o++)r(o,e[o])})},t.resolve=function(e){return e&&"object"==typeof e&&e.constructor===t?e:new t(function(t){t(e)})},t.reject=function(e){return new t(function(t,n){n(e)})},t.race=function(e){return new t(function(t,n){for(var r=0,i=e.length;i>r;r++)e[r].then(t,n)})},t}),r(be,[],function(){function e(e){return function(){return e}}return{constant:e}}),r(xe,[ye,f,be],function(e,t,n){return function(r){function i(e){var t,n;return n={"image/jpeg":"jpg","image/jpg":"jpg","image/gif":&
 quot;gif","image/png":"png"},t=n[e.blob().type.toLowerCase()]||"dat",e.id()+"."+t}function o(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}function a(e){return{id:e.id,blob:e.blob,base64:e.base64,filename:n.constant(i(e))}}function s(e,t,n){var a,s;a=new XMLHttpRequest,a.open("POST",r.url),a.withCredentials=r.credentials,a.onload=function(){var e;return 200!=a.status?void n("HTTP Error: "+a.status):(e=JSON.parse(a.responseText),e&&"string"==typeof e.location?void t(o(r.basePath,e.location)):void n("Invalid JSON: "+a.responseText))},s=new FormData,s.append("file",e.blob(),i(e)),a.send(s)}function l(n){function i(t){return new e(function(e){var n=r.handler;n(a(t),function(n){e({url:n,blobInfo:t,status:!0})},function(n){e({url:"",blobInfo:t,status:!1,error:n})})})}var o;return r.url||r.handler!==s?(o=t.map(n,function(e){var t,n=e.i
 d();return c[n]?c[n]:(t=i(e).then(function(e){return delete c[n],e})["catch"](function(e){return delete c[n],e}),c[n]=t,t)}),e.all(o)):new e(function(e){e([])})}var c={};return r=t.extend({credentials:!1,handler:s},r),{upload:l}}}),r(Ce,[ye],function(e){function t(t){return new e(function(e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(){200==this.status&&e(this.response)},n.send()})}function n(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}}function r(t){return new e(function(e){var r,i,o;t=n(t);try{r=atob(t.data)}catch(a){return void e(new Blob([]))}for(i=new Uint8Array(r.length),o=0;o<i.length;o++)i[o]=r.charCodeAt(o);e(new Blob([i],{type:t.type}))})}function i(e){return 0===e.indexOf("blob:")?t(e):0===e.indexOf("data:")?r(e):null}function o(t){return new e(function(e){var n=new FileReader;n.onloadend
 =function(){e(n.result)},n.readAsDataURL(t)})}return{uriToBlob:i,blobToDataUri:o,parseDataUri:n}}),r(we,[ye,d,Ce,u],function(e,t,n,r){var i=0;return function(o){function a(a){function l(e,t){var r,a;return 0===e.src.indexOf("blob:")?(a=o.getByUri(e.src),void(a&&t({image:e,blobInfo:a}))):(r=n.parseDataUri(e.src).data,a=o.findFirst(function(e){return e.base64()===r}),void(a?t({image:e,blobInfo:a}):n.uriToBlob(e.src).then(function(n){var a="blobid"+i++,s=o.create(a,n,r);o.add(s),t({image:e,blobInfo:s})})))}var c,u;return c=t.filter(a.getElementsByTagName("img"),function(e){var t=e.src;return r.fileApi?e.hasAttribute("data-mce-bogus")?!1:e.hasAttribute("data-mce-placeholder")?!1:t&&t!=r.transparentSrc?0===t.indexOf("data:")||0===t.indexOf("blob:"):!1:!1}),u=t.map(c,function(t){var n;return s[t.src]?new e(function(e){s[t.src].then(function(n){e({image:t,blobInfo:n.blobInfo})})}):(n=new e(function(e){l(t
 ,e)}).then(function(e){return delete s[e.image.src],e})["catch"](function(e){return delete s[t.src],e}),s[t.src]=n,n)}),e.all(u)}var s={};return{findAll:a}}}),r(_e,[d,be],function(e,t){return function(){function n(e,t,n){return{id:c(e),blob:c(t),base64:c(n),blobUri:c(URL.createObjectURL(t))}}function r(e){i(e.id())||l.push(e)}function i(e){return o(function(t){return t.id()===e})}function o(t){return e.filter(l,t)[0]}function a(e){return o(function(t){return t.blobUri()==e})}function s(){e.each(l,function(e){URL.revokeObjectURL(e.blobUri())}),l=[]}var l=[],c=t.constant;return{create:n,add:r,get:i,getByUri:a,findFirst:o,destroy:s}}}),r(Ee,[d,xe,we,_e],function(e,t,n,r){return function(i){function o(e){return function(t){return i.selection?e(t):[]}}function a(e,t,n){var r=0;do r=e.indexOf(t,r),-1!==r&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1);while(-1!==r);return e}function s(e,t,n){return e=a(e,'src="'+t+'"','src="'+n+'"'
 ),e=a(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')}function l(t,n){e.each(i.undoManager.data,function(e){e.content=s(e.content,t,n)})}function c(n){return m||(m=new t({url:i.settings.images_upload_url,basePath:i.settings.images_upload_base_path,credentials:i.settings.images_upload_credentials,handler:i.settings.images_upload_handler})),d().then(o(function(t){var r;return r=e.map(t,function(e){return e.blobInfo}),m.upload(r).then(o(function(r){return r=e.map(r,function(e,n){var r=t[n].image;return l(r.src,e.url),i.$(r).attr({src:e.url,"data-mce-src":i.convertURL(e.url,"src")}),{element:r,status:e.status}}),n&&n(r),r}))}))}function u(e){return i.settings.automatic_uploads!==!1?c(e):void 0}function d(){return g||(g=new n(p)),g.findAll(i.getBody()).then(o(function(t){return e.each(t,function(e){l(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri()}),t}))}function f(){p.destroy(),g=m=null}function h(t){return t.replace(/s
 rc="(blob:[^"]+)"/g,function(t,n){var r=p.getByUri(n);return r||(r=e.reduce(i.editorManager.editors,function(e,t){return e||t.editorUpload.blobCache.getByUri(n)},null)),r?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':t})}var p=new r,m,g;return i.on("setContent",function(){i.settings.automatic_uploads!==!1?u():d()}),i.on("RawSaveContent",function(e){e.content=h(e.content)}),i.on("getContent",function(e){e.source_view||"raw"==e.format||(e.content=h(e.content))}),{blobCache:p,uploadImages:c,uploadImagesAuto:u,scanForImages:d,destroy:f}}}),r(Ne,[b,h,C,_,E,A,R,H,I,F,z,W,V,U,x,l,he,N,k,me,u,f,ge,ve,Ee],function(e,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,x,C,w,_,E,N){function S(e,t,i){var o=this,a,s;a=o.documentBaseUrl=i.documentBaseURL,s=i.baseURI,o.settings=t=A({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:a,add_form_submit_trigger:!0,su
 bmit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:o.convertURL,url_con
 verter_scope:o,ie7_compat:!0},t),r.language=t.language||"en",r.languageLoad=t.language_load,r.baseURL=i.baseURL,o.id=t.id=e,o.isNotDirty=!0,o.plugins={},o.documentBaseURI=new p(t.document_base_url||a,{base_uri:s}),o.baseURI=s,o.contentCSS=[],o.contentStyles=[],o.shortcuts=new E(o),o.loadedCSS={},o.editorCommands=new h(o),t.target&&(o.targetElm=t.target),o.suffix=i.suffix,o.editorManager=i,o.inline=t.inline,t.cache_suffix&&(C.cacheSuffix=t.cache_suffix.replace(/^[\?\&]+/,"")),t.override_viewport===!1&&(C.overrideViewPort=!1),i.fire("SetupEditor",o),o.execCallback("setup",o),o.$=n.overrideDefaults(function(){return{context:o.inline?o.getBody():o.getDoc(),element:o.getBody()}})}var k=e.DOM,T=r.ThemeManager,R=r.PluginManager,A=w.extend,B=w.each,D=w.explode,L=w.inArray,M=w.trim,H=w.resolve,P=g.Event,O=C.gecko,I=C.ie;return S.prototype={render:function(){function e(){k.unbind(window,"ready",e),n.render()}functio
 n t(){var e=m.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!T.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",T.load(r.theme,t)}w.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),B(r.external_plugins,function(e,t){R.load(t,e),r.plugins+=" "+t}),B(r.plugins.split(/[ ,]/),function(e){if(e=M(e),e&&!R.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=R.dependencies(e);B(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=R.createUrl(t,e),R.load(e.resource,e)})}else R.load(e,{prefix:"plugins/",res
 ource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!P.domLoaded)return void k.bind(window,"ready",e);if(n.getElement()&&C.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||k.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(k.insertAfter(k.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},k.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isN
 otDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new v(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=k.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=R.get(n),i,o;i=R.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=M(n),r&&-1===L(m,n)&&(B(R.dependencies(n),function(t){e(t)}),o=new r(t,i,t.$),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,h,p,m=[];if(this.editorManager.i18n.setCode(n.language),t.rtl=n.rtl_ui||this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||k.getAttri
 b(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=T.get(n.theme),t.theme=new c(t,T.urls[n.theme]),t.theme.init&&t.theme.init(t,T.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""),t.$)):t.theme=n.theme),B(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,h=/^[0-9\.]+(|px)$/i,h.test(""+i)&&(i=Math.max(parseInt(i,10),100)),h.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.the
 me(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&B(D(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"<html><head>",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+='<base href="'+t.documentBaseURI.getURI()+'" />'),!C.caretAfter&&n.ie7_compat&&(t.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'),t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8&
 quot; />',p=0;p<t.contentCSS.length;p++){var g=t.contentCSS[p];t.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+w._addCacheSuffix(g)+'" />',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),n.content_security_policy&&(t.iframeHTML+='<meta http-equiv="Content-Security-Policy" content="'+n.content_security_policy+'" />'),t.iframeHTML+='</head><body id="'+d+'" class="mce-content-body '+f+'" data-id="'+t.id+'"><br></body></html>';var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.i
 d+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';document.domain!=location.hostname&&C.ie&&C.ie<12&&(u=v);var y=k.create("iframe",{id:t.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}});if(y.onload=function(){y.onload=null,t.fire("load")},k.setAttrib(y,"src",u||'javascript:""'),t.contentAreaContainer=l.iframeContainer,t.iframeElement=y,s=k.add(l.iframeContainer,y),I)try{t.getDoc()}catch(b){s.src=u=v}l.editorContainer&&(k.get(l.editorContainer).style.display=t.orgDisplay,t.hidden=k.isHidden(l.editorContainer)),t.getElement().style.display="none",k.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initConten
 tBody:function(t){var n=this,r=n.settings,s=n.getElement(),h=n.getDoc(),p,m;r.inline||(n.getElement().style.visibility=n.orgVisibility),t||r.content_editable||(h.open(),h.write(n.iframeHTML),h.close()),r.content_editable&&(n.on("remove",function(){var e=this.getBody();k.removeClass(e,"mce-content-body"),k.removeClass(e,"mce-edit-focus"),k.setAttrib(e,"contentEditable",null)}),k.addClass(s,"mce-content-body"),n.contentDocument=h=r.content_document||document,n.contentWindow=r.content_window||window,n.bodyElement=s,r.content_document=r.content_window=null,r.root_name=s.nodeName.toLowerCase()),p=n.getBody(),p.disabled=!0,r.readonly||(n.inline&&"static"==k.getStyle(p,"position",!0)&&(p.style.position="relative"),p.contentEditable=n.getParam("content_editable_state",!0)),p.disabled=!1,n.editorUpload=new N(n),n.schema=new y(r),n.dom=new e(h,{keep_values:!0,url_converter:n.conve
 rtURL,url_converter_scope:n,hex_colors:r.force_hex_style_colors,class_filter:r.class_filter,update_styles:!0,root_element:n.inline?n.getBody():null,collect:r.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new b(r,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)if(i=e[r],a=i.attr(t),s="data-mce-"+t,!i.attributes.map[s]){if(0===a.indexOf("data:")||0===a.indexOf("blob:"))continue;"style"===t?(a=o.serializeStyle(o.parseStyle(a),i.name),a.length||(a=null),i.attr(s,a),i.attr(t,a)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name))}}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("type")||"no/type",0!==r.indexOf("mce-")&&n.attr("type","mce-"+r)}),n.parser.addNodeFilter("
 #cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,r,i=n.schema.getNonEmptyElements();t--;)r=e[t],r.isEmpty(i)&&(r.append(new o("br",1)).shortEnded=!0)}),n.serializer=new a(r,n),n.selection=new l(n.dom,n.getWin(),n.serializer,n),n.formatter=new c(n),n.undoManager=new u(n),n.forceBlocks=new f(n),n.enterKey=new d(n),n._nodeChangeDispatcher=new i(n),n.fire("PreInit"),r.browser_spellcheck||r.gecko_spellcheck||(h.body.spellcheck=!1,k.setAttrib(p,"spellcheck","false")),n.fire("PostRender"),n.quirks=new x(n),r.directionality&&(p.dir=r.directionality),r.nowrap&&(p.style.whiteSpace="nowrap"),r.protect&&n.on("BeforeSetContent",function(e){B(r.protect,function(t){e.content=e.content.replace(t,function(e){retur
 n"<!--mce:protected "+escape(e)+"-->"})})}),n.on("SetContent",function(){
-n.addVisual(n.getBody())}),r.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(m="",B(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),B(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&setTimeout(function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){var t=this,n=t.selection,r=t.settings.content_editable,i,o,a=t.getDoc(),s;if(!e){if(i=n.getRng(),i.item&&(o=i.item
 (0)),t._refreshContentEditable(),r||(C.opera||t.getBody().focus(),t.getWin().focus()),O||r){if(s=t.getBody(),s.setActive)try{s.setActive()}catch(l){s.focus()}else s.focus();r&&n.normalize()}o&&o.ownerDocument==a&&(i=a.body.createControlRange(),i.addElement(o),i.select())}t.editorManager.setActive(t)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?H(r):0,n=H(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i1
 8n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?B(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[M(e[0])]=M(e[1]):i[M(e[0])]=M(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)})
 ,n.contextToolbars.push({predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(k.show(e.getContainer()),k.hide(e.id)),e.load(),e.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(I&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getB
 ody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(k.hide(e.getContainer()),k.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=k.getParent(t.id,"form"))&&B(i.elements,function(e){return e.name==t.id
 ?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=I&&11>I?"":'<br data-mce-bogus="1">',"TABLE"==r.nodeName?e="<tr><td>"+o+"</td></tr>":/^(UL|OL)$/.test(r.nodeName)&&(e="<li>"+o+"</li>"),i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=o,e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):I||e||(e='<br data-mce-bogus="1">'),n.dom.setHTML(r,e),n.fire("SetContent",t)):("raw"!==t.format&&(e=new s({validate:n.validate},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=M(e)
 ,n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),"text"!=e.format?e.content=M(n):e.content=n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e,t){t&&(e=A({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=k.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=k.get(this.id)),this.targetElm},getWin:function(){var e=this,t;return e.contentWind
 ow||(t=e.iframeElement,t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),B(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||!n.hasVisual?i.remov
 eClass(e,o):i.addClass(e,o));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&n.hasVisual?i.addClass(e,o):i.removeClass(e,o)))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;e.removed||(e.save(),e.removed=1,e.unbindAllNativeEvents(),e.hasHiddenInput&&k.remove(e.getElement().nextSibling),e.inline||(I&&10>I&&e.getDoc().execCommand("SelectAll",!1,null),k.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null),e.fire("remove"),e.editorManager.remove(e),k.remove(e.getContainer()),e.editorUpload.destroy(),e.destroy())},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destr
 oy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),k.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.bodyElement=t.contentDocument=t.contentWindow=null,t.iframeElement=t.targetElm=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return O?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},A(S.prototype,_),S}),r(Se,[],function(){var e={},t="en";return{setCode:function(e){e&&(t=e,this.rtl=this.data[e]?"rtl"===this.data[e].
 _dir:!1)},getCode:function(){return t},rtl:!1,add:function(t,n){var r=e[t];r||(e[t]=r={});for(var i in n)r[i]=n[i];this.setCode(t)},translate:function(n){var r;if(r=e[t],r||(r={}),"undefined"==typeof n)return n;if("string"!=typeof n&&n.raw)return n.raw;if(n.push){var i=n.slice(1);n=(r[n[0]]||n[0]).replace(/\{([0-9]+)\}/g,function(e,t){return i[t]})}return(r[n]||n).replace(/{context:\w+}$/,"")},data:e}}),r(ke,[b,u],function(e,t){function n(e){function s(){try{return document.activeElement}catch(e){return document.body}}function l(e,t){if(t&&t.startContainer){if(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function c(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}functi
 on u(e){return!!a.getParent(e,n.isEditorUIElement)}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&("onbeforedeactivate"in document&&t.ie<9?d.dom.bind(d.getBody(),"beforedeactivate",function(e){if(e.target==d.getBody())try{d.lastRng=d.selection.getRng()}catch(t){}}):d.on("nodechange mouseup keyup",function(e){var t=s();"nodechange"==e.type&&e.selectionChange||(t&&t.id==d.id+"_ifr"&&(t=d.getBody()),d.dom.isChildOf(t,d.getBody())&&(d.lastRng=d.selection.getRng()))}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},a.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.f
 ocusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(c(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.setActive(d),e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;u(s())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&t.target!=n.getBody()&&(n.selection.lastFocusBookmark=l(n.dom,n.lastRng)),t.target==document.body||u(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},a.bind(document,"focusin",i)),d.inline&&!o&&(o=function(t){var n=e.activeEditor;if(n.inline
 &&!n.dom.isChildOf(t.target,n.getBody())){var r=n.selection.getRng();r.collapsed||(n.lastRng=r)}},a.bind(document,"mouseup",o))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(a.unbind(document,"selectionchange",r),a.unbind(document,"focusin",i),a.unbind(document,"mouseup",o),r=i=o=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o,a=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(Te,[Ne,h,b,U,u,f,K,Se,ke],function(e,t,n,r,i,o,a,s,l){function c(e){m(b.editors,function(t){t.fire("ResizeWindow",e)})}function u(e,n){n!==x&&(n?t(window).on("resize",c):t(window).off("resize",c),x=n)}function d(e){var t=b.editors,n;delete t[e.id];for(var r=0;r<t.length;r++)if(t[r]==e){t.splice(r,1),n=!0;break}return b.activeEditor==e&&(b.activeEditor=t[0]),b.focusedEditor==e&
 &(b.focusedEditor=null),n}function f(e){return e&&!(e.getContainer()||e.getBody()).parentNode&&(d(e),e.unbindAllNativeEvents(),e.destroy(!0),e=null),e}var h=n.DOM,p=o.explode,m=o.each,g=o.extend,v=0,y,b,x=!1;return b={$:t,majorVersion:"4",minorVersion:"2.8",releaseDate:"2015-11-13",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o,a;if(n=document.location.href,/^[^:]+:\/\/\/?[^\/]+\//.test(n)&&(n=n.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/")),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else{for(var s=document.getElementsByTagName("script"),c=0;c<s.length;c++){a=s[c].src;var u=a.substring(a.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(a)){-1!=u.indexOf(".min")&&(i=".min"),t=a.substring(0,a.lastIndexOf("/"));break}}!
 t&&document.currentScript&&(a=document.currentScript.src,-1!=a.indexOf(".min")&&(i=".min"),t=a.substring(0,a.lastIndexOf("/")))}e.baseURL=new r(n).toAbsolute(t),e.documentBaseURL=n,e.baseURI=new r(e.baseURL),e.suffix=i,e.focusManager=new l(e)},init:function(t){function n(e){var t=e.id;return t||(t=e.name,t=t&&!h.get(t)?e.name:h.uniqueId(),e.setAttribute("id",t)),t}function r(t,n,r){if(!f(s.get(t))){var i=new e(t,n,s);i.targetElm=i.targetElm||r,l.push(i),i.render()}}function i(e){var n=t[e];if(n)return n.apply(s,Array.prototype.slice.call(arguments,2))}function o(e,t){return t.constructor===RegExp?t.test(e.className):h.hasClass(e,t)}function a(){var e,s;if(h.unbind(window,"ready",a),i("onpageload"),t.types)return void m(t.types,function(e){m(h.select(e.selector),function(i){r(n(i),g({},t,e),i)})});if(t.selector)return void m(h.select(t.selector),function(e){r(n(e),t,e)});switch(t.target&&a
 mp;r(n(t.target),t),t.mode){case"exact":e=t.elements||"",e.length>0&&m(p(e),function(e){var n;(n=h.get(e))?r(e,t,n):m(document.forms,function(n){m(n.elements,function(n){n.name===e&&(e="mce_editor_"+v++,h.setAttrib(n,"id",e),r(e,t,n))})})});break;case"textareas":case"specific_textareas":m(h.select("textarea"),function(e){t.editor_deselector&&o(e,t.editor_deselector)||(!t.editor_selector||o(e,t.editor_selector))&&r(n(e),t,e)})}t.oninit&&(e=s=0,m(l,function(t){s++,t.initialized?e++:t.on("init",function(){e++,e==s&&i("oninit")}),e==s&&i("oninit")}))}var s=this,l=[];s.settings=t,h.bind(window,"ready",a)},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),u(n,!0),t.activeEditor=e,t.fire("AddEditor",{editor
 :e}),y||(y=function(){t.fire("BeforeUnload")},h.bind(window,"beforeunload",y)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void m(h.select(e),function(e){i=r[e.id],i&&t.remove(i)})):(i=e,r[i.id]?(d(i)&&t.fire("RemoveEditor",{editor:i}),r.length||h.unbind(window,"beforeunload",y),i.remove(),u(r,r.length>0),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){m(this.editors,function(e){e.save()})},
 addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!=e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},g(b,a),b.setup(),window.tinymce=window.tinyMCE=b,b}),r(Re,[Te,f],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(n,r){"html4"===t.settings.schema&&
 amp;e(r,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(Ae,[K,f],function(e,t){var n={send:function(e){function r(){!e.async||4==i.readyState||o++>1e4?(e.success&&1e4>o&&200==i.status?e.success.call(e.success_scope,""+i.responseText,i,e):e.error&&e.error.call(e.error_scope,o>1e4?"TIMED_OUT":"GENERAL",i,e),i=null):setTimeout(r,10)}var i,o=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",i=new XMLHttpRequest){if(i.overrideMimeType&&i.overrideMimeType(e.content_type),i.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(i.withCredentials=!0),e.content_type&&i.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&t.ea
 ch(e.requestheaders,function(e){i.setRequestHeader(e.key,e.value)}),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i=n.fire("beforeSend",{xhr:i,settings:e}).xhr,i.send(e.data),!e.async)return r();setTimeout(r,10)}}};return t.extend(n,e),n}),r(Be,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r<t.length;r++)i+=(r>0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnPrope
 rty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(De,[Be,Ae,f],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(Le,[b],function(e){retu
 rn{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(Me,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if
 (window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(He,[b,l,x,C,f,u],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(Pe,[$,f],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containe
 rClass)},applyClasses:function(e){var t=this,n=t.settings,r,i,o,a;r=n.firstControlClass,i=n.lastControlClass,e.each(function(e){e.classes.remove(r).remove(i).add(n.controlClass),e.visible()&&(o||(o=e),a=e)}),o&&o.classes.add(r),a&&a.classes.add(i)},renderHtml:function(e){var t=this,n="";return t.applyClasses(e.items()),e.items().each(function(e){n+=e.renderHtml()}),n},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),r(Oe,[Pe],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'<div id="'+e._id+'-absend" class="'+e.classPrefix+'abs-end"></div>'+this._super(e)}})}),r(Ie,[te,le],function(e,t){return e.extend({Mixins:[t],Defaults:{classe
 s:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'" role="presentation"><div class="'+t+'tooltip-arrow"></div><div class="'+t+'tooltip-inner">'+e.encode(e.state.get("text"))+"</div></div>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(Fe,[te,Ie],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","b
 c-tl","bc-tr"]);r.classes.toggle("tooltip-n","bc-tc"==i),r.classes.toggle("tooltip-nw","bc-tl"==i),r.classes.toggle("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){function e(e){n.aria("disabled",e),n.classes.toggle("disabled",e)}function t(e){n.aria("pressed",e),n.classes.toggle("active",e)}var n=this;return n.state.on("change:disabled",function(t){e(t.value)}),n.state.on("change:active",function(e){t(e.value)}),n.state.get("disabled")&
 amp;&e(!0),n.state.get("active")&&t(!0),n._super()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(ze,[Fe],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t._super(e),e=t.settings,n=t.settings.size,t.on("click mousedown",function(e){e.preventDefault()}),t.on("touchstart",function(e){t.fire("click",e),e.preventDefault()}),e.subtype&&t.classes.add(e.subtype),n&&t.classes.add("btn-"+n),e.icon&&t.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e=this.getEl().firstChild,t;e&&(t=e.style,t.width=t.height="100%"),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("icon"),i,o=e.state.get("text");return i=e.settings.image,i?(
 r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",o&&e.classes.add("btn-has-text"),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'<div id="'+t+'" class="'+e.classes+'" tabindex="-1" aria-labelledby="'+t+'"><button role="presentation" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+i+"></i>":"")+(o?e.encode(o):"")+"</button></div>"},bindStates:function(){function e(e){for(var n=t.getEl().firstChild.firstChild;n;n=n.nextSibling)3==n.nodeType&&(n.data=t.translate(e));t.classes.toggle("btn-has-text",!!e)}var t=this;return t.state.on("change:text",function(t){e(t.value)}),t.state.on("change:icon",function(n){var r=n.value,
 i=t.classPrefix;t.settings.icon=r,r=r?i+"ico "+i+"i-"+t.settings.icon:"";var o=t.getEl().firstChild,a=o.getElementsByTagName("i")[0];r?(a&&a==o.firstChild||(a=document.createElement("i"),o.insertBefore(a,o.firstChild)),a.className=r):a&&o.removeChild(a),e(t.state.get("text"))}),t._super()}})}),r(We,[ie],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}})}),r(Ve,[Fe],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e
 .preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'" unselectable="on" aria-labelledby="'+t+'-al" tabindex="-1"><i class="'+n+"ico "+n+'i-checkbox"></i><span id="'+t+'-al" class="'+n+'label">'+e.encode(e.state.get("text"))+"</span></div>"},bindStates:function(){function e(e){t.classes.toggle("checked",e),t.aria("checked",e)}var t=this;return t.state.on("change:text",function(e){t.getEl("al").firstChild.data=t.tran
 slate(e.value)}),t.state.on("change:checked change:value",function(n){t.fire("change"),e(n.value)}),t.state.on("change:icon",function(e){var n=e.value,r=t.classPrefix;if("undefined"==typeof n)return t.settings.icon;t.settings.icon=n,n=n?r+"ico "+r+"i-"+t.settings.icon:"";var i=t.getEl().firstChild,o=i.getElementsByTagName("i")[0];n?(o&&o==i.firstChild||(o=document.createElement("i"),i.insertBefore(o,i.firstChild)),o.className=n):o&&i.removeChild(o)}),t.state.get("checked")&&e(!0),t._super()}})}),r(Ue,[Fe,ne,J,h],function(e,t,n,r){return e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.classes.add("combobox"),t.subinput=!0,t.ariaTarget="inp",e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){var i=n.target,o=t.getEl();if(r.contains(o,i)||i==o)for(;i&&i!=o;)i.id&&am
 p;-1!=i.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),i=i.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){var r=t.state.get("value"),i=t.getEl("inp").value;return e.preventDefault(),t.state.set("value",i),r!=i&&t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),t.on("keyup",function(e){"INPUT"==e.target.nodeName&&t.state.set("value",e.target.value)})},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("ca
 ncel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),i=e.getEl("open"),o=e.layoutRect(),a,s;a=i?o.w-n.getSize(i).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(s=e.layoutRect().h-2+"px"),r(t.firstChild).css({width:a,lineHeight:s}),e._super(),e},postRender:function(){var e=this;return r(this.getE
 l("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=e.state.get("value")||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e.state.get("text"),(o||a)&&(s='<div id="'+t+'-open" class="'+r+"btn "+r+'open" tabIndex="-1" role="button"><button id="'+t+'-action" type="button" hidefocus="1" tabindex
 ="-1">'+("caret"!=o?'<i class="'+o+'"></i>':'<i class="'+r+'caret"></i>')+(a?(o?" ":"")+a:"")+"</button></div>",e.classes.add("has-open")),'<div id="'+t+'" class="'+e.classes+'"><input id="'+t+'-inp" class="'+r+'textbox" value="'+e.encode(i,!1)+'" hidefocus="1"'+l+' placeholder="'+e.encode(n.placeholder)+'" />'+s+"</div>"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl("inp").value!=t.value&&(e.getEl("inp").value=t.value)}),e.state.on("change:disab
 led",function(t){e.getEl("inp").disabled=t.value}),e._super()},remove:function(){r(this.getEl("inp")).off(),this._super()}})}),r($e,[Ue],function(e){return e.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl().getElementsByTagName("i")[0];if(t)try{t.style.background=e}catch(n){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e._rendered&&e.repaintColor(t.value)}),e._super()}})}),r(qe,[ze,ue],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide&quot
 ;,function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),r(je,[qe,b],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(
 ){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("text"),i=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";
-return'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(i?'<i class="'+i+'"'+o+"></i>":"")+'<span id="'+t+'-preview" class="'+n+'preview"></span>'+(r?(i?" ":"")+r:"")+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1"> <i class="'+n+'caret"></i></button></div>'},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super(
 )}})}),r(Ke,[],function(){function e(e){function i(e,i,o){var a,s,l,c,u,d;return a=0,s=0,l=0,e/=255,i/=255,o/=255,u=t(e,t(i,o)),d=n(e,n(i,o)),u==d?(l=u,{h:0,s:0,v:100*l}):(c=e==u?i-o:o==u?e-i:o-e,a=e==u?3:o==u?1:5,a=60*(a-c/(d-u)),s=(d-u)/d,l=d,{h:r(a),s:r(100*s),v:r(100*l)})}function o(e,i,o){var a,s,l,c;if(e=(parseInt(e,10)||0)%360,i=parseInt(i,10)/100,o=parseInt(o,10)/100,i=n(0,t(i,1)),o=n(0,t(o,1)),0===i)return void(d=f=h=r(255*o));switch(a=e/60,s=o*i,l=s*(1-Math.abs(a%2-1)),c=o-s,Math.floor(a)){case 0:d=s,f=l,h=0;break;case 1:d=l,f=s,h=0;break;case 2:d=0,f=s,h=l;break;case 3:d=0,f=l,h=s;break;case 4:d=l,f=0,h=s;break;case 5:d=s,f=0,h=l;break;default:d=f=h=0}d=r(255*(d+c)),f=r(255*(f+c)),h=r(255*(h+c))}function a(){function e(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+e(d)+e(f)+e(h)}function s(){return{r:d,g:f,b:h}}function l(){return i(d,f,h)}function c(e){var t;return"object"==typeof e?"r"in e?(d=e.r,f=e.g,h=
 e.b):"v"in e&&o(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(d=parseInt(t[1],10),f=parseInt(t[2],10),h=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(d=parseInt(t[1],16),f=parseInt(t[2],16),h=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(d=parseInt(t[1]+t[1],16),f=parseInt(t[2]+t[2],16),h=parseInt(t[3]+t[3],16)),d=0>d?0:d>255?255:d,f=0>f?0:f>255?255:f,h=0>h?0:h>255?255:h,u}var u=this,d=0,f=0,h=0;e&&c(e),u.toRgb=s,u.toHsv=l,u.toHex=a,u.parse=c}var t=Math.min,n=Math.max,r=Math.round;return e}),r(Ye,[Fe,oe,J,Ke],function(e,t,n,r){return e.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){function e(e,t){var r=n.getPos(e),i,o;return i=t.pageX-r.x,o=t.pageY-r.y,i=Math.max(0,Math.min(i/e.clientWidth,1)),o=Math.max(0,Math.min(o/e.clientHeight,1)),{x:i,y:o}}function i(e,t){var i=(360-e.h)/360;n.css(d,
 {top:100*i+"%"}),t||n.css(h,{left:e.s+"%",top:100-e.v+"%"}),f.style.background=new r({s:100,v:100,h:e.h}).toHex(),s.color().parse({s:e.s,v:e.v,h:e.h})}function o(t){var n;n=e(f,t),c.s=100*n.x,c.v=100*(1-n.y),i(c),s.fire("change")}function a(t){var n;n=e(u,t),c=l.toHsv(),c.h=360*(1-n.y),i(c,!0),s.fire("change")}var s=this,l=s.color(),c,u,d,f,h;u=s.getEl("h"),d=s.getEl("hp"),f=s.getEl("sv"),h=s.getEl("svp"),s._repaint=function(){c=l.toHsv(),i(c)},s._super(),s._svdraghelper=new t(s._id+"-sv",{start:o,drag:o}),s._hdraghelper=new t(s._id+"-h",{start:a,drag:a}),s._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){var t=this;return arguments.length?(t.color().parse(e),void(t._rendered&&t._repaint())):t.color().toHex()},color:function(){return this._color||(this._color=new r),this._color},renderHtml:function(){function e(){var e,t,n="",i,a;fo
 r(i="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",a=o.split(","),e=0,t=a.length-1;t>e;e++)n+='<div class="'+r+'colorpicker-h-chunk" style="height:'+100/t+"%;"+i+a[e]+",endColorstr="+a[e+1]+");-ms-"+i+a[e]+",endColorstr="+a[e+1]+')"></div>';return n}var t=this,n=t._id,r=t.classPrefix,i,o="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",a="background: -ms-linear-gradient(top,"+o+");background: linear-gradient(to bottom,"+o+");";return i='<div id="'+n+'-h" class="'+r+'colorpicker-h" style="'+a+'">'+e()+'<div id="'+n+'-hp" class="'+r+'colorpicker-h-marker"></div></div>','<div id="'+n+'" class="'+t.classes+'"><div id="'+n+'-sv" class="'+r+'colorpic
 ker-sv"><div class="'+r+'colorpicker-overlay1"><div class="'+r+'colorpicker-overlay2"><div id="'+n+'-svp" class="'+r+'colorpicker-selector1"><div class="'+r+'colorpicker-selector2"></div></div></div></div></div>'+i+"</div>"}})}),r(Ge,[Fe],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.classes.add("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.row()[n],index:n})}),t.row(t.settings.row)},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){var e=this;return'<div id="'+e._id+'" class="'+e.classes+'"&gt
 ;'+e._getDataPathHtml(e.state.get("row"))+"</div>"},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(e){var t=this,n=e||[],r,i,o="",a=t.classPrefix;for(r=0,i=n.length;i>r;r++)o+=(r>0?'<div class="'+a+'divider" aria-hidden="true"> '+t.settings.delimiter+" </div>":"")+'<div role="button" class="'+a+"path-item"+(r==i-1?" "+a+"last":"")+'" data-index="'+r+'" tabindex="-1" id="'+t._id+"-"+r+'" aria-level="'+r+'">'+n[r].name+"</div>";return o||(o='<div class="'+a+'path-item">\xa0</div>'),o}})}),r(Xe,[Ge,Te],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAt
 tribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return r.settings.elementpath!==!1&&(n.on("select",function(e){r.focus(),r.selection.select(this.row()[e.index].element),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});if(s.isDefaultPrevented()||i.push({name:s.name,element:o[a]}),s.isPropagationStopped())break}n.row(i)})),n._super()}})}),r(Je,[ie],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+
 (e.settings.title?'<div id="'+e._id+'-title" class="'+n+'title">'+e.settings.title+"</div>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}})}),r(Qe,[ie,Je,f],function(e,t,n){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,r=e.items();e.settings.formItemDefaults||(e.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),r.each(function(r){var i,o=r.settings.label;o&&(i=new t(n.extend({items:{type:"label",id:r._id+"-l",text:o,flex:0,forId:r._id,disabled:r.disabled()}},e.settings.formItemDefaults)),i.type="formitem",r.aria(&qu
 ot;labelledby",r._id+"-l"),"undefined"==typeof r.settings.flex&&(r.settings.flex=1),e.replace(r,i),i.add(r))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.fromJSON(e.settings.data)},bindStates:function(){function e(){var e=0,n=[],r,i,o;if(t.settings.labelGapCalc!==!1)for(o="children"==t.settings.labelGapCalc?t.find("formitem"):t.items(),o.filter("formitem").each(function(t){var r=t.items()[0],i=r.getEl().clientWidth;e=i>e?i:e,n.push(r)}),i=t.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=e+i}var t=this;t._super(),t.on("show",e),e()}})}),r(Ze,[Qe],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.cla
 ssPrefix;return e.preRender(),t.preRender(e),'<fieldset id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<legend id="'+e._id+'-title" class="'+n+'fieldset-title">'+e.settings.title+"</legend>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></fieldset>"}})}),r(et,[Ue,f],function(e,t){return e.extend({init:function(e){var n=this,r=tinymce.activeEditor,i=r.settings,o,a,s;e.spellcheck=!1,s=i.file_picker_types||i.file_browser_callback_types,s&&(s=t.makeMap(s,/[, ]/)),(!s||s[e.filetype])&&(a=i.file_picker_callback,!a||s&&!s[e.filetype]?(a=i.file_browser_callback,!a||s&&!s[e.filetype]||(o=function(){a(n.getEl("inp").id,n.value(),e.filetype,window)})):o=function(){var i=n.fire("beforecall").meta
 ;i=t.extend({filetype:e.filetype},i),a.call(r,function(e,t){n.value(e).fire("change",{meta:t})},n.value(),i)}),o&&(e.icon="browse",e.onaction=o),n._super(e)}})}),r(tt,[Oe],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(nt,[Oe],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v=[],y,b,x,C,w,_,E,N,S,k,T,R,A,B,D,L,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e.paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==
 f?(S="y",E="h",N="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",D="x",L="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",E="w",N="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",D="y",L="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)h=r[t],p=h.layoutRect(),m=h.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,p[k]&&v.push(h),p.flex=g),d-=p[N],y=o[P]+p[H]+o[O],y>_&&(_=y);if(C={},0>d?C[N]=i[N]-d+i[A]:C[N]=i[R]-d+i[A],C[H]=_+i[I],C[B]=i[R]-d,C[F]=_,C.minW=W(C.minW,i.maxW),C.minH=W(C.minH,i.maxH),C.minW=z(C.minW,i.startMinWidth)
 ,C.minH=z(C.minH,i.startMinHeight),!i.autoResize||C.minW==i.minW&&C.minH==i.minH){for(x=d/u,t=0,n=v.length;n>t;t++)h=v[t],p=h.layoutRect(),b=p[k],y=p[N]+p.flex*x,y>b?(d-=p[k]-p[N],u-=p.flex,p.flex=0,p.maxFlexSize=b):p.maxFlexSize=0;for(x=d/u,w=o[T],C={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),C[D]=o[P],t=0,n=r.length;n>t;t++)h=r[t],p=h.layoutRect(),y=p.maxFlexSize||p[N],"center"===s?C[D]=Math.round(i[L]/2-p[M]/2):"stretch"===s?(C[M]=z(p[H]||0,i[L]-o[P]-o[O]),C[D]=o[P]):"end"===s&&(C[D]=i[L]-p[M]-o.top),p.flex>0&&(y+=p.flex*x),C[E]=y,C[S]=w,h.layoutRect(C),h.recalc&&h.recalc(),w+=y+c}else if(C.w=C.minW,C.h=C.minH,e.layoutRect(C),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(rt,[Pe],function(e){retur
 n e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}})}),r(it,[te,Fe,ue,f,Te,u],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a,o.cmd=e.cmd}n.push
 (o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Su
 bscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!
 0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this;t.parent().on("show",function(){var n,r;n=t.settings.format,n&&(t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))),r=t.settings.cmd,r&&t.active(e.queryCommandState(r))})},onclick:function(){this.settings.format&&c(this.settings.format),this.settings.cmd&&e.execCommand(this.settings.cmd)}}}}function o(t){return function(){var n=this;e.formatter?e.formatter.formatChanged(t,function(e){n.active(e)}):e.on("init",function(){e.formatter.formatChanged(t,function(e){n.active(e)})})}}function a(t){return function(){function n(){return e.undoManager?e.undoManager[t]():!1}var r=this;t="redo"==t?"hasRedo":"hasUndo",r.disabled(!n()),e.on("Undo Redo AddUndo TypingUndo ClearUndos",function(){r.disabled(!n())})}}function l(){var t=this;e.on("VisualA
 id",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function c(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var u;u=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:o(n),onclick:function(){c(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNe
 wDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:o(n)})}),e.addButton("undo",{tooltip:"Undo",onPostRender:a("undo"),cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:a("redo"),cmd:"redo"}),e.addMe
 nuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:a("undo"),cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:l,cmd:"mceToggleVisualAid"}),e.addButton("remove",{tooltip:"Remove",icon:"remove",cmd:"Delete"}),s({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B&q
 uot;],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:u}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onse
 lect:c,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fon
 tname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){var t=e,r=e,i=e.split("=");i.length>1&&(t=i[0],r=i[1]),n.push({text:t,value:r})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:u})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(ot,[Oe],function(e){return e.extend({recalc:function(e){var t,n,r,i,
 o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,x,C,w,_,E=[],N=[],S,k,T,R,A,B;t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,x=t.alignH||t.align,C=t.alignV||t.align,g=e.paddingBox,A="reverseRows"in t?t.reverseRows:e.isRtl(),x&&"string"==typeof x&&(x=[x]),C&&"string"==typeof C&&(C=[C]);for(d=0;r>d;d++)E.push(0);for(f=0;n>f;f++)N.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,E[d]=S>E[d]?S:E[d],N[f]=k>N[f]?k:N[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=E[d]+(d>0?y:0),T-=(d>0?y:0)+E[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=N[f]+(f>0?b:0),R-=(f>0?b:0)+N[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.d
 eltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var D;D="start"==t.packV?0:R>0?Math.floor(R/n):0;var L=0,M=t.flexWidths;if(M)for(d=0;d<M.length;d++)L+=M[d];else L=r;var H=T/L;for(d=0;r>d;d++)E[d]+=M?M[d]*H:H;for(p=g.top,f=0;n>f;f++){for(h=g.left,s=N[f]+D,d=0;r>d&&(B=A?f*r+r-1-d:f*r+d,u=i[B],u);d++)m=u.settings,c=u.layoutRect(),a=Math.max(E[d],c.startMinWidth),c.x=h,c.y=p,v=m.alignH||(x?x[d]||x[0]:null),"center"==v?c.x=h+a/2-c.w/2:"right"==v?c.x=h+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(C?C[d]||C[0]:null),"center"==v?c.y=p+s/2-c.h/2:"bottom"==v?c.y=p+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),h+=a+y,u.recalc&&u.recalc()
 ;p+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var P=e.parent();P&&(P._lastRect=null,P.recalc())}}})}),r(at,[Fe],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("iframe"),e.canFocus=!1,'<iframe id="'+e._id+'" class="'+e.classes+'" tabindex="-1" src="'+(e.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(st,[Fe,J],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,n=e._super();i
 f(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.classes.add("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},renderHtml:function(){var e=this,t=e.settings.forId;return'<label id="'+e._id+'" class="'+e.classes+'"'+(t?' for="'+t+'"':"")+">"+e.encode(e.state.get("text"))+"</label>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value))}),e._super()}})}),r(lt,[ie],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.classes.add("toolbar")},postRender:function(){var e=this;return e.items
 ().each(function(e){e.classes.add("toolbar-item")}),e._super()}})}),r(ct,[lt],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(ut,[ze,ne,ct],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(){var e=this,n;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(n=e.state.get("menu")||[],n.length?n={type:"menu",items:n}:n.type=n.type||"menu",n.renderTo?e.menu=n.parent(e).show().renderTo():e.menu=t.create(n).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.
 parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon,o,a=e.state.get("text");return o=e.settings.image,o?(i="none","string"!=typeof o&&(o=window.getSelection?o[0]:o[1]),o=" style=\"background-image: url('"+o+"')\""):o=&qu
 ot;",i=e.settings.icon?r+"ico "+r+"i-"+i:"",e.aria("role",e.parent()instanceof n?"menuitem":"button"),'<div id="'+t+'" class="'+e.classes+'" tabindex="-1" aria-labelledby="'+t+'"><button id="'+t+'-open" role="presentation" type="button" tabindex="-1">'+(i?'<i class="'+i+'"'+o+"></i>":"")+(a?(i?"\xa0":"")+e.encode(a):"")+' <i class="'+r+'caret"></i></button></div>'},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton&quo
 t;).each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return i}),r(dt,[Fe,ne,u],function(e,t,n){return e.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t=this,n;t._super(e),e=t.settings,t.classes.add("menu-item"),e.menu&&t.classes.add("menu-item-expand"),e.preview&&t.classes.add("menu-item-preview"),n=t.state.get("text"),("-"===n||"|"===n)&&(t.classes.add("menu-item-sep"),t.aria("role","separator"),t.state.set("text","-")),e.selectable&&(t.aria("role","menuitemcheckbox&quo
 t;),t.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||t.classes.add("menu-item-normal"),t.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&t.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e=this,n=e.settings,r,i=e.parent();if(i.items().each(function(t){t!==e&&t.hideMenu()}),n.menu){r=e.menu,r?r.show():(r=n.menu,r.length?r={type:"menu",items:r}:r.type=r.type||"menu",i.settings.itemDefaults&&(r.itemDefaults=i.settings.itemDefaults),r=e.menu=t.create(r).parent(e).renderTo(),r.reflow(),r.on("cancel",function(t){t.stopPropagation(),e.focus(),r.hide()}),r.on("show hide",function(e){e.control.items().each(function(e){e.active(e.settings.selected)})}).fire("show"),r.on("hide",function(t){t.control===r&&e.classes.remove("selected")}),r.
 submenu=!0),r._parentMenu=i,r.classes.add("menu-sub");var o=r.testMoveRel(e.getEl(),e.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);r.moveRel(e.getEl(),o),r.rel=o,o="menu-sub-"+o,r.classes.remove(r._lastRel).add(o),r._lastRel=o,e.classes.add("selected"),e.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){function e(e){var t,r,i={};for(i=n.mac?{alt:"&#x2325;",ctrl:"&#x2318;",shift:"&#x21E7;",meta:"&#x2318;"}:{meta:"Ctrl"},e=e.split("+"),t=0;t<e.length;t++)r=i[e[t].toLowerCase()],r&&(e[t]=r);return e.join("+")}var t=this,r=t._id,i=t.settings,o=t.classPrefix,a=t.encode(t.state.ge
 t("text")),s=t.settings.icon,l="",c=i.shortcut;return s&&t.parent().classes.add("menu-has-icons"),i.image&&(l=" style=\"background-image: url('"+i.image+"')\""),c&&(c=e(c)),s=o+"ico "+o+"i-"+(t.settings.icon||"none"),'<div id="'+r+'" class="'+t.classes+'" tabindex="-1">'+("-"!==a?'<i class="'+s+'"'+l+"></i>\xa0":"")+("-"!==a?'<span id="'+r+'-text" class="'+o+'text">'+a+"</span>":"")+(c?'<div id="'+r+'-shortcut" class="'+o+'menu-shortcut">'+c+"</div>":"")+(i.menu?'<div class="'+o+'caret"></div>':"")+"</div>"},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this))
 ,n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(ft,[ue,dt,f],function(e,t,n){return e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().st
 yle.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.image||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}})}),r(ht,[ut,ft],function(e,t){return e.extend({init:function(e){function t(r){for(var a=0;a<r.length;a++){if(i=r[a].selected||e.value===r[a].value)return o=o||r[a].text,n.state.set("value",r[a].value),!0;if(r[a].menu&&t(r[a].menu))return!0}}var n=this,r,i,o,a;n._super(e),e=n.settings,n._values=r=e.values,r&&("undefined"!=typeof e.value&&t(r),!i&&r.length>0&&(o=r[0].text,n.state.set("value",r[0].value)),n.state.set("menu",r)),n.state.set("text",e.text||o||r[0].text),n.class
 es.add("listbox"),n.on("select",function(t){var r=t.control;a&&(t.lastControl=a),e.multiple?r.active(!r.active()):n.value(t.control.value()),a=r})},bindStates:function(){function e(e,n){e instanceof t&&e.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}function n(e,t){var r;if(e)for(var i=0;i<e.length;i++){if(e[i].value===t)return e[i];if(e[i].menu&&(r=n(e[i].menu,t)))return r}}var r=this;return r.on("show",function(t){e(t.control,r.value())}),r.state.on("change:value",function(e){var t=n(r.state.get("menu"),e.value);t?r.text(t.text):r.text(r.settings.text)}),r._super()}})}),r(pt,[Ve],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(mt,[],function(){function e(e,t,n){var r,i,o,a,l,c;return r=t.x,i=t.y,o=e.w,a=e.h,l=t.w,c=t.h,n=(n||"").split(""),"b"===n[0]&&(i+=c),"r"===n[1]&&(r+=l),"c&q
 uot;===n[0]&&(i+=s(c/2)),"c"===n[1]&&(r+=s(l/2)),"b"===n[3]&&(i-=a),"r"===n[4]&&(r-=o),"c"===n[3]&&(i-=s(a/2)),"c"===n[4]&&(r-=s(o/2)),{x:r,y:i,w:o,h:a}}function t(t,n,r,i){var o,a;for(a=0;a<i.length;a++)if(o=e(t,n,i[a]),o.x>=r.x&&o.x+o.w<=r.w+r.x&&o.y>=r.y&&o.y+o.h<=r.h+r.y)return i[a]}function n(e,t,n){return{x:e.x-t,y:e.y-n,w:e.w+2*t,h:e.h+2*n}}function r(e,t){var n,r,i,s;return n=a(e.x,t.x),r=a(e.y,t.y),i=o(e.x+e.w,t.x+t.w),s=o(e.y+e.h,t.y+t.h),0>i-n||0>s-r?null:{x:n,y:r,w:i-n,h:s-r}}function i(e,t,n){var r,i,o,s,l,c,u,d,f,h;return l=e.x,c=e.y,u=e.x+e.w,d=e.y+e.h,f=t.x+t.w,h=t.y+t.h,r=a(0,t.x-l),i=a(0,t.y-c),o=a(0,u-f),s=a(0,d-h),l+=r,c+=i,n&&(u+=r,d+=i,l-=o,c-=s),u-=o,d-=s,{x:l,y:c,w:u-l,h:d-c}}var o=Math.min,a=Math.max,s=Math.round;return{inflate:n,relativePosition:e,findBestRelativePosition:t,intersect:r,clamp:i}}),r(gt,[Fe,oe]
 ,function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.add("resizehandle"),"both"==e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'<div id="'+e._id+'" class="'+e.classes+'"><i class="'+t+"ico "+t+'i-resize"></i></div>'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(vt,[Fe,oe,J],function(e,t,n){function r(e,t,n){return t>e&&(e=t),e>n&&(e=n),e}function i(e,t){var r,i,o,a,s;"v"==e.settings.orientation?(a="top",o="height",i=&q
 uot;h"):(a="left",o="width",i="w"),r=(e.layoutRect()[i]||100)-n.getSize(e.getEl("handle"))[o],s=r*((t-e._minValue)/(e._maxValue-e._minValue))+"px",e.getEl("handle").style[a]=s,
-e.getEl("handle").style.height=e.layoutRect().h+"px"}return e.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"==e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'"><div id="'+t+'-handle" class="'+n+'slider-handle"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e=this,i,o,a=0,s,l,c,u,d,f,h,p;l=e._minValue,c=e._maxValue,s=e.value(),"v"==e.settings.orientation?(d="screenY",f="top",h="height",p="h"):(d="screenX",f="left",h="width",p="w"),e._
 super(),e._dragHelper=new t(e._id,{handle:e._id+"-handle",start:function(t){i=t[d],o=parseInt(e.getEl("handle").style[f],10),u=(e.layoutRect()[p]||100)-n.getSize(e.getEl("handle"))[h],e.fire("dragstart",{value:s})},drag:function(t){var n=t[d]-i,h=e.getEl("handle");a=r(o+n,0,u),h.style[f]=a+"px",s=l+a/u*(c-l),e.value(s),e.tooltip().text(""+e.settings.previewFilter(s)).show().moveRel(h,"bc tc"),e.fire("drag",{value:s})},stop:function(){e.tooltip().hide(),e.fire("dragend",{value:s})}})},repaint:function(){this._super(),i(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){i(e,t.value)}),e._super()}})}),r(yt,[Fe],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("spacer"),e.canFocus=!1,'<div id="'+e._id+'" class="'+e.classes+'"></div>'}})}),r(bt,[ut,J,h],funct
 ion(e,t,n){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,r=e.getEl(),i=e.layoutRect(),o,a;return e._super(),o=r.firstChild,a=r.lastChild,n(o).css({width:i.w-t.getSize(a).width,height:i.h-2}),n(a).css({height:i.h-2}),e},activeMenu:function(e){var t=this;n(t.getEl().lastChild).toggleClass(t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r,i=e.state.get("icon"),o=e.state.get("text");return r=e.settings.image,r?(i="none","string"!=typeof r&&(r=window.getSelection?r[0]:r[1]),r=" style=\"background-image: url('"+r+"')\""):r="",i=e.settings.icon?n+"ico "+n+"i-"+i:"",'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1"><button type="button" hidefocus="1" tabindex="-1&qu
 ot;>'+(i?'<i class="'+i+'"'+r+"></i>":"")+(o?(i?" ":"")+o:"")+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1">'+(e._menuBtnText?(i?"\xa0":"")+e._menuBtnText:"")+' <i class="'+n+'caret"></i></button></div>'},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void(t&&t.call(this,e));n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(xt,[rt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:fu
 nction(){return!0}})}),r(Ct,[se,h,J],function(e,t,n){return e.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t(n).removeClass(this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t(n).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!=n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='<div id="'+o+'" class="'+r+'tab" unselectable="on" role="tab"
  aria-controls="'+t._id+'" aria-selected="false" tabIndex="-1">'+e.encode(t.settings.title)+"</div>"}),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1"><div id="'+e._id+'-head" class="'+r+'tabs" role="tablist">'+n+'</div><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div></div>"},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,r,i;r=n.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(e){r=Math.max(r,e.layoutR
 ect().minW),i=Math.max(i,e.layoutRect().minH)}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=n.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,t=e._super(),t.deltaH+=o,t.innerH=t.h-t.deltaH,t}})}),r(wt,[Fe],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){return e.toJSON?(n=e,!1):void 0}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e=this,t,n,r,i,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&
 &(t.lineHeight=n.h-o+"px"),r=e.borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e.state.get("value"),!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'<textarea id="'+t+'" class="'+e.classes+'" '+(n.rows?' rows="'+n.rows+'"':"")+' hidefocus="1
 "'+i+">"+r+"</textarea>":'<input id="'+t+'" class="'+e.classes+'" value="'+r+'" hidefocus="1"'+i+" />"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!=t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}})}),r(_t,[h,te],function(e,t){return function(n,r){var i=this,o,a=t.classPrefix;i.show=function(t,s){return i.hide(),o=!0,window.s
 etTimeout(function(){o&&(e(n).append('<div class="'+a+"throbber"+(r?" "+a+"throbber-inline":"")+'"></div>'),s&&s())},t||0),i},i.hide=function(){var e=n.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,i}}}),a([l,c,u,f,h,p,m,v,b,x,C,w,E,N,S,k,T,R,A,D,L,M,H,I,F,V,U,$,q,K,G,X,ee,te,ne,re,ie,oe,ae,se,le,ce,ue,de,fe,he,ge,ve,ye,Ne,Se,ke,Te,Ae,Be,De,Le,Me,He,Pe,Oe,Ie,Fe,ze,We,Ve,Ue,$e,qe,je,Ke,Ye,Ge,Xe,Je,Qe,Ze,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,ht,pt,mt,gt,vt,yt,bt,xt,Ct,wt,_t])}(this);
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// 4.3.3 (2016-01-14)
+!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i<e.length;++i){if(n=s[e[i]]||o(e[i]),!n)throw"module definition dependecy not found: "+e[i];r.push(n)}t.apply(null,r)}function r(e,r,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(r===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(r,function(){s[e]=i.apply(null,arguments)})}function i(e){return!!s[e]}function o(t){for(var n=e,r=t.split(/[.\/]/),i=0;i<r.length;++i){if(!n[r[i]])return;n=n[r[i]]}return n}function a(n){var r,i,o,a,l;for(r=0;r<n.length;r++){i=e,o=n[r],a=o.split(/[.\/]/);for(var c=0;c<a.length-1;++c)i[a[c]]===t&&(i[a[c]]={}),i=i[a[c]];i[a[a.length-1]]=s[o]}if(e.AMDLC_TESTS){l=e.privateModules||{};for(o in s)l[o]=s[o];for(r=0;r<n.length;r++)delete l[n[r]];e.privateModules
 =l}}var s={},l="tinymce/geom/Rect",c="tinymce/util/Promise",u="tinymce/util/Delay",d="tinymce/dom/EventUtils",f="tinymce/dom/Sizzle",h="tinymce/Env",p="tinymce/util/Arr",m="tinymce/util/Tools",g="tinymce/dom/DomQuery",v="tinymce/html/Styles",y="tinymce/dom/TreeWalker",b="tinymce/dom/Range",C="tinymce/html/Entities",x="tinymce/dom/StyleSheetLoader",w="tinymce/dom/DOMUtils",E="tinymce/dom/ScriptLoader",N="tinymce/AddOnManager",_="tinymce/dom/NodeType",S="tinymce/text/Zwsp",k="tinymce/caret/CaretContainer",T="tinymce/dom/RangeUtils",R="tinymce/NodeChange",A="tinymce/html/Node",B="tinymce/html/Schema",D="tinymce/html/SaxParser",M="tinymce/html/DomParser",L="tinymce/html/Writer",P="tinymce/html/Serializer",H=&quo
 t;tinymce/dom/Serializer",O="tinymce/dom/TridentSelection",I="tinymce/util/VK",F="tinymce/dom/ControlSelection",z="tinymce/util/Fun",W="tinymce/caret/CaretCandidate",V="tinymce/geom/ClientRect",U="tinymce/text/ExtendingChar",$="tinymce/caret/CaretPosition",q="tinymce/caret/CaretBookmark",j="tinymce/dom/BookmarkManager",Y="tinymce/dom/Selection",X="tinymce/dom/ElementUtils",K="tinymce/fmt/Preview",G="tinymce/Formatter",J="tinymce/UndoManager",Q="tinymce/EnterKey",Z="tinymce/ForceBlocks",ee="tinymce/EditorCommands",te="tinymce/util/URI",ne="tinymce/util/Class",re="tinymce/util/EventDispatcher",ie="tinymce/data/Binding",oe="tinymce/util/Observable",ae="tinymce/data/ObservableObject",se="tinymce/ui/Selector",le="tinymce/ui/Collecti
 on",ce="tinymce/ui/DomUtils",ue="tinymce/ui/BoxUtils",de="tinymce/ui/ClassList",fe="tinymce/ui/ReflowQueue",he="tinymce/ui/Control",pe="tinymce/ui/Factory",me="tinymce/ui/KeyboardNavigation",ge="tinymce/ui/Container",ve="tinymce/ui/DragHelper",ye="tinymce/ui/Scrollable",be="tinymce/ui/Panel",Ce="tinymce/ui/Movable",xe="tinymce/ui/Resizable",we="tinymce/ui/FloatPanel",Ee="tinymce/ui/Window",Ne="tinymce/ui/MessageBox",_e="tinymce/WindowManager",Se="tinymce/ui/Tooltip",ke="tinymce/ui/Widget",Te="tinymce/ui/Progress",Re="tinymce/ui/Notification",Ae="tinymce/NotificationManager",Be="tinymce/dom/NodePath",De="tinymce/util/Quirks",Me="tinymce/EditorObservable",Le="tinymce/Mode",Pe="tinymce/Shortcuts",He="tinymce/fi
 le/Uploader",Oe="tinymce/file/Conversions",Ie="tinymce/file/ImageScanner",Fe="tinymce/file/BlobCache",ze="tinymce/EditorUpload",We="tinymce/caret/CaretUtils",Ve="tinymce/caret/CaretWalker",Ue="tinymce/caret/FakeCaret",$e="tinymce/dom/Dimensions",qe="tinymce/caret/LineWalker",je="tinymce/caret/LineUtils",Ye="tinymce/DragDropOverrides",Xe="tinymce/SelectionOverrides",Ke="tinymce/Editor",Ge="tinymce/util/I18n",Je="tinymce/FocusManager",Qe="tinymce/EditorManager",Ze="tinymce/LegacyInput",et="tinymce/util/XHR",tt="tinymce/util/JSON",nt="tinymce/util/JSONRequest",rt="tinymce/util/JSONP",it="tinymce/util/LocalStorage",ot="tinymce/Compat",at="tinymce/ui/Layout",st="tinymce/ui/AbsoluteLayout",lt="tinymce/ui/Button",ct="tinymce
 /ui/ButtonGroup",ut="tinymce/ui/Checkbox",dt="tinymce/ui/ComboBox",ft="tinymce/ui/ColorBox",ht="tinymce/ui/PanelButton",pt="tinymce/ui/ColorButton",mt="tinymce/util/Color",gt="tinymce/ui/ColorPicker",vt="tinymce/ui/Path",yt="tinymce/ui/ElementPath",bt="tinymce/ui/FormItem",Ct="tinymce/ui/Form",xt="tinymce/ui/FieldSet",wt="tinymce/ui/FilePicker",Et="tinymce/ui/FitLayout",Nt="tinymce/ui/FlexLayout",_t="tinymce/ui/FlowLayout",St="tinymce/ui/FormatControls",kt="tinymce/ui/GridLayout",Tt="tinymce/ui/Iframe",Rt="tinymce/ui/Label",At="tinymce/ui/Toolbar",Bt="tinymce/ui/MenuBar",Dt="tinymce/ui/MenuButton",Mt="tinymce/ui/MenuItem",Lt="tinymce/ui/Menu",Pt="tinymce/ui/ListBox",Ht="tinymce/ui/Radio",Ot="tinymce/ui/Resiz
 eHandle",It="tinymce/ui/SelectBox",Ft="tinymce/ui/Slider",zt="tinymce/ui/Spacer",Wt="tinymce/ui/SplitButton",Vt="tinymce/ui/StackLayout",Ut="tinymce/ui/TabPanel",$t="tinymce/ui/TextBox",qt="tinymce/ui/Throbber";r(l,[],function(){function e(e,t,n){var r,i,a,s,l,u;return r=t.x,i=t.y,a=e.w,s=e.h,l=t.w,u=t.h,n=(n||"").split(""),"b"===n[0]&&(i+=u),"r"===n[1]&&(r+=l),"c"===n[0]&&(i+=c(u/2)),"c"===n[1]&&(r+=c(l/2)),"b"===n[3]&&(i-=s),"r"===n[4]&&(r-=a),"c"===n[3]&&(i-=c(s/2)),"c"===n[4]&&(r-=c(a/2)),o(r,i,a,s)}function t(t,n,r,i){var o,a;for(a=0;a<i.length;a++)if(o=e(t,n,i[a]),o.x>=r.x&&o.x+o.w<=r.w+r.x&&o.y>=r.y&&o.y+o.h<=r.h+r.y)return i[a];return null}function n(e,t,n){return o(e.x-t,e.y-n,e.w+2*t,e.h+2*
 n)}function r(e,t){var n,r,i,a;return n=l(e.x,t.x),r=l(e.y,t.y),i=s(e.x+e.w,t.x+t.w),a=s(e.y+e.h,t.y+t.h),0>i-n||0>a-r?null:o(n,r,i-n,a-r)}function i(e,t,n){var r,i,a,s,c,u,d,f,h,p;return c=e.x,u=e.y,d=e.x+e.w,f=e.y+e.h,h=t.x+t.w,p=t.y+t.h,r=l(0,t.x-c),i=l(0,t.y-u),a=l(0,d-h),s=l(0,f-p),c+=r,u+=i,n&&(d+=r,f+=i,c-=a,u-=s),d-=a,f-=s,o(c,u,d-c,f-u)}function o(e,t,n,r){return{x:e,y:t,w:n,h:r}}function a(e){return o(e.left,e.top,e.width,e.height)}var s=Math.min,l=Math.max,c=Math.round;return{inflate:n,relativePosition:e,findBestRelativePosition:t,intersect:r,clamp:i,create:o,fromClientRect:a}}),r(c,[],function(){function e(e,t){return function(){e.apply(t,arguments)}}function t(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(t,e(r,this),e(i,this))}function n(e){var t=this;return n
 ull===this._state?void this._deferreds.push(e):void l(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function r(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void s(e(n,t),e(r,this),e(i,this))}this._state=!0,this._value=t,o.call(this)}catch(a){i.call(this,a)}}function i(e){this._state=!1,this._value=e,o.call(this)}function o(){for(var e=0,t=this._deferreds.length;t>e;e++)n.call(this,this._deferreds[e]);this._deferreds=null}function a(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function s(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))}
 )}catch(i){if(r)return;r=!0,n(i)}}if(window.Promise)return window.Promise;var l=t.immediateFn||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,1)},c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return t.prototype["catch"]=function(e){return this.then(null,e)},t.prototype.then=function(e,r){var i=this;return new t(function(t,o){n.call(i,new a(e,r,t,o))})},t.all=function(){var e=Array.prototype.slice.call(1===arguments.length&&c(arguments[0])?arguments[0]:arguments);return new t(function(t,n){function r(o,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(o,e)},n)}e[o]=a,0===--i&&t(e)}catch(l){n(l)}}if(0===e.length)return t([]);for(var i=e.length,o=0;o<e.length;o++)r(o,e[o])})},t.resolve=function(e){return e&&"object"==typeof e&
 &e.constructor===t?e:new t(function(t){t(e)})},t.reject=function(e){return new t(function(t,n){n(e)})},t.race=function(e){return new t(function(t,n){for(var r=0,i=e.length;i>r;r++)e[r].then(t,n)})},t}),r(u,[c],function(e){function t(e,t){function n(e){window.setTimeout(e,0)}var r,i=window.requestAnimationFrame,o=["ms","moz","webkit"];for(r=0;r<o.length&&!i;r++)i=window[o[r]+"RequestAnimationFrame"];i||(i=n),i(e,t)}function n(e,t){return"number"!=typeof t&&(t=0),setTimeout(e,t)}function r(e,t){return"number"!=typeof t&&(t=0),setInterval(e,t)}function i(e){return clearTimeout(e)}function o(e){return clearInterval(e)}var a;return{requestAnimationFrame:function(n,r){return a?void a.then(n):void(a=new e(function(e){r||(r=document.body),t(e,r)}).then(n))},setTimeout:n,setInterval:r,setEditorTimeout:function(e,t,r){return n(function(){e.removed||t()},r)},setEditorInterval:function(e,t,n){var i;ret
 urn i=r(function(){e.removed?clearInterval(i):t()},n)},throttle:function(e,t){var r;return function(){var i=arguments;clearTimeout(r),r=n(function(){e.apply(this,i)},t)}},clearInterval:o,clearTimeout:i}}),r(d,[u],function(e){function t(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function n(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function r(e,t){function n(){return!1}function r(){return!0}var i,o=t||{},a;for(i in e)l[i]||(o[i]=e[i]);if(o.target||(o.target=o.srcElement||document),e&&s.test(e.type)&&e.pageX===a&&e.clientX!==a){var c=o.target.ownerDocument||document,u=c.documentElement,d=c.body;o.pageX=e.clientX+(u&&u.scrollLeft||d&&d.scrollLeft||0)-(u&&u.clientLeft||d&&d.clientLeft||0),o.pageY=e.clientY+(u&&u.scrollTop||d&&d.scrollTop||0)-(u&&u.clientTop||d&
 amp;&d.clientTop||0)}return o.preventDefault=function(){o.isDefaultPrevented=r,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},o.stopPropagation=function(){o.isPropagationStopped=r,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},o.stopImmediatePropagation=function(){o.isImmediatePropagationStopped=r,o.stopPropagation()},o.isDefaultPrevented||(o.isDefaultPrevented=n,o.isPropagationStopped=n,o.isImmediatePropagationStopped=n),"undefined"==typeof o.metaKey&&(o.metaKey=!1),o}function i(r,i,o){function a(){o.domLoaded||(o.domLoaded=!0,i(u))}function s(){("complete"===c.readyState||"interactive"===c.readyState&&c.body)&&(n(c,"readystatechange",s),a())}function l(){try{c.documentElement.doScroll("left")}catch(t){return void e.setTimeout(l)}a()}var c=r.document,u={type:"ready"};return o.domLoaded?void i(u):(c.addEventListener?"complete"===c.readyState?a(
 ):t(r,"DOMContentLoaded",a):(t(c,"readystatechange",s),c.documentElement.doScroll&&r.self===r.top&&l()),void t(r,"load",a))}function o(){function e(e,t){var n,r,i,o,a=s[t];if(n=a&&a[e.type])for(r=0,i=n.length;i>r;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var o=this,s={},l,c,u,d,f;c=a+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,o.domLoaded=!1,o.events=s,o.bind=function(n,a,h,p){function m(t){e(r(t||E.event),g)}var g,v,y,b,C,x,w,E=window;if(n&&3!==n.nodeType&&8!==n.nodeType){for(n[c]?g=n[c]:(g=l++,n[c]=g,s[g]={}),p=p||n,a=a.split(" "),y=a.length;y--;)b=a[y],x=m,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),o.domLoaded&&"ready"
 ===b&&"complete"==n.readyState?h.call(p,r({type:b})):(d||(C=f[b],C&&(x=function(t){var n,i;if(n=t.currentTarget,i=t.relatedTarget,i&&n.contains)i=n.contains(i);else for(;i&&i!==n;)i=i.parentNode;i||(t=r(t||E.event),t.type="mouseout"===t.type?"mouseleave":"mouseenter",t.target=n,e(t,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(t){t=r(t||E.event),t.type="focus"===t.type?"focusin":"focusout",e(t,g)}),v=s[g][b],v?"ready"===b&&o.domLoaded?h({type:b}):v.push({func:h,scope:p}):(s[g][b]=v=[{func:h,scope:p}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?i(n,x,o):t(n,C||b,x,w)));return n=v=0,h}},o.unbind=function(e,t,r){var i,a,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return o;if(i=e[c]){if(f=s[i],t){for(t=t.split(" "),l=t.length;l--;)if(d=t
 [l],a=f[d]){if(r)for(u=a.length;u--;)if(a[u].func===r){var h=a.nativeHandler,p=a.fakeName,m=a.capture;a=a.slice(0,u).concat(a.slice(u+1)),a.nativeHandler=h,a.fakeName=p,a.capture=m,f[d]=a}r&&0!==a.length||(delete f[d],n(e,a.fakeName||d,a.nativeHandler,a.capture))}}else{for(d in f)a=f[d],n(e,a.fakeName||d,a.nativeHandler,a.capture);f={}}for(d in f)return o;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return o},o.fire=function(t,n,i){var a;if(!t||3===t.nodeType||8===t.nodeType)return o;i=r(null,i),i.type=n,i.target=t;do a=t[c],a&&e(i,a),t=t.parentNode||t.ownerDocument||t.defaultView||t.parentWindow;while(t&&!i.isPropagationStopped());return o},o.clean=function(e){var t,n,r=o.unbind;if(!e||3===e.nodeType||8===e.nodeType)return o;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return o},o.destroy=function(){s={}},o.cancel=fu
 nction(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var a="mce-data-",s=/^(?:mouse|contextmenu)|click/,l={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1};return o.Event=new o,o.Event.bind(window,"ready",function(){}),o}),r(f,[],function(){function e(e,t,n,r){var i,o,a,s,l,c,d,h,p,m;if((t?t.ownerDocument||t:z)!==D&&B(t),t=t||D,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(L&&!r){if(i=ve.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&I(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&x.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(x.qsa&&(!P||!P.test(e))){if(h=d=F,p=t,m=9===s&&amp
 ;e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=_(e),(d=t.getAttribute("id"))?h=d.replace(be,"\\$&"):t.setAttribute("id",h),h="[id='"+h+"'] ",l=c.length;l--;)c[l]=h+f(c[l]);p=ye.test(e)&&u(t.parentNode)||t,m=c.join(",")}if(m)try{return Z.apply(n,p.querySelectorAll(m)),n}catch(g){}finally{d||t.removeAttribute("id")}}}return k(e.replace(se,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=e.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||
 X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&typeof e.getElementsByTagName!==Y&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function h(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c=[W,o];if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(l=t[F]||(t[F]={}),(
 s=l[r])&&s[0]===W&&s[1]===o)return c[2]=s[2];if(l[r]=c,c[2]=e(t,n,a))return!0}}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(t,n,r){for(var i=0,o=n.length;o>i;i++)e(t,n[i],r);return r}function g(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function v(e,t,n,i,o,a){return i&&!i[F]&&(i=v(i)),o&&!o[F]&&(o=v(o,a)),r(function(r,a,s,l){var c,u,d,f=[],h=[],p=a.length,v=r||m(t||"*",s.nodeType?[s]:s,[]),y=!e||!r&&t?v:g(v,f,e,s,l),b=n?o||(r?e:p||i)?[]:a:y;if(n&&n(y,b,s,l),i)for(c=g(b,h),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[h[u]]=!(y[h[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?te.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d)
 )}}else b=g(b===a?b.splice(p,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,l=h(function(e){return e===t},a,!0),c=h(function(e){return te.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=w.relative[e[s].type])u=[h(p(u),n)];else{if(n=w.filter[e[s].type].apply(null,e[s].matches),n[F]){for(r=++s;i>r&&!w.relative[e[r].type];r++);return v(s>1&&p(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&f(e))}u.push(n)}return p(u)}function b(t,n){var i=n.length>0,o=t.length>0,a=function(r,a,s,l,c){var u,d,f,h=0,p="0",m=r&&[],v=[],y=T,b=r||o&&w.find.TAG("*",c),C=W+=null==y?1:Math.random()||.1,x=b.le
 ngth;for(c&&(T=a!==D&&a);p!==x&&null!=(u=b[p]);p++){if(o&&u){for(d=0;f=t[d++];)if(f(u,a,s)){l.push(u);break}c&&(W=C)}i&&((u=!f&&u)&&h--,r&&m.push(u))}if(h+=p,i&&p!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(h>0)for(;p--;)m[p]||v[p]||(v[p]=J.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&h+n.length>1&&e.uniqueSort(l)}return c&&(W=C,T=y),m};return i?r(a):a}var C,x,w,E,N,_,S,k,T,R,A,B,D,M,L,P,H,O,I,F="sizzle"+-new Date,z=window.document,W=0,V=0,U=n(),$=n(),q=n(),j=function(e,t){return e===t&&(A=!0),0},Y=typeof t,X=1<<31,K={}.hasOwnProperty,G=[],J=G.pop,Q=G.push,Z=G.push,ee=G.slice,te=G.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},ne="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",re="[\\x20\\t\\r\\n
 \\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe="\\["+re+"*("+ie+")(?:"+re+"*([*^$|!~]?=)"+re+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ie+"))|)"+re+"*\\]",ae=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+oe+")*)|.*)\\)|)",se=new RegExp("^"+re+"+|((?:^|[^\\\\])(?:\\\\.)*)"+re+"+$","g"),le=new RegExp("^"+re+"*,"+re+"*"),ce=new RegExp("^"+re+"*([>+~]|"+re+")"+re+"*"),ue=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),de=new RegExp(ae),fe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+&quot
 ;|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,Ce=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),xe=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(G=ee.call(z.childNodes),z.childNo
 des),G[z.childNodes.length].nodeType}catch(we){Z={apply:G.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=e.support={},N=e.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},B=e.setDocument=function(e){var t,n=e?e.ownerDocument||e:z,r=n.defaultView;return n!==D&&9===n.nodeType&&n.documentElement?(D=n,M=n.documentElement,L=!N(n),r&&r!==r.top&&(r.addEventListener?r.addEventListener("unload",function(){B()},!1):r.attachEvent&&r.attachEvent("onunload",function(){B()})),x.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=i(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ge.test(n.getElementsByClassName),x.getById=i(function(e){return M.appendC
 hild(e).id=F,!n.getElementsByName||!n.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if(typeof t.getElementById!==Y&&L){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=x.getElementsByClassName&&function(e,t){return L?t.getElementsByClassName(e):void 0},H=[],P=[],(x.qsa=ge.test(n.querySelectorAll))&&(i(function(e){e.innerHTML="<select ms
 allowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")}),i(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=ge.test(O=M.matches||M.webkitMatchesSelector||M.mozMatchesSelector||M.oMatchesSelector||M.msMatchesSelector))&&i(
 function(e){x.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),H.push("!=",ae)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ge.test(M.compareDocumentPosition),I=t||ge.test(M.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return A=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&r||!x.sortDetached&&t.compareDocumentPosition(e)===r?e===n||e.ownerDocument===z&&I(z,e)?-1:t===n||t.ownerDocument===z&&I(z,t)?1:R?te.call(R,e)-te.call(R,t):0:4&r?-1:1)}:function(e,t){if(e===t)return 
 A=!0,0;var r,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!o||!s)return e===n?-1:t===n?1:o?-1:s?1:R?te.call(R,e)-te.call(R,t):0;if(o===s)return a(e,t);for(r=e;r=r.parentNode;)l.unshift(r);for(r=t;r=r.parentNode;)c.unshift(r);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===z?-1:c[i]===z?1:0},n):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&B(t),n=n.replace(ue,"='$1']"),x.matchesSelector&&L&&(!H||!H.test(n))&&(!P||!P.test(n)))try{var r=O.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(i){}return e(n,D,null,[t]).length>0},e.contains=function(e,t){return(e.ownerDocument||e)!==D&&B(e),I(e,t)},e.attr=function(e,n){(e.ownerDocument||e)!==D&&B(e);var r=w.attrHandle[n.toLowerCase()],i=r&&K.call(w.attrHandle,n.toLowerCase())?r(e,n,!L):t;return i!==t?i:x.attributes||!L?e.getAttribute(n):(i=e.getAttributeN
 ode(n))&&i.specified?i.value:null},e.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},e.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!x.detectDuplicates,R=!x.sortStable&&e.slice(0),e.sort(j),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return R=null,e},E=e.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Ce,xe),e[3]=(e[3]||e[4]||e[5]
 ||"").replace(Ce,xe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Ce,xe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,function(e){ret
 urn t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:n?(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o+" ").indexOf(r)>-1:"|="===n?o===r||o.slice(0,r.length+1)===r+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(
 s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],h=c[0]===W&&c[1],f=c[0]===W&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,h,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++h&&d&&d[m]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[F]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=te.call(e,i[a]),e[r]
 =!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(e){return e=e.replace(Ce,xe),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(t){return fe.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(Ce,xe).toLowerCase(),function(e){var n;do if(n=L?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===M},focus:function(e){ret
 urn e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerC
 ase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++r<t;)e.push(r);return e})}},w.pseudos.nth=w.pseudos.eq;for(C in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[C]=s(C);for(C in{submit:!0,reset:!0})w.pseudos[C]=l(C);return d.prototype=w.filters=w.pseudos,w.setFilters=new d,_=e.tokenize=function(t,n){var r,i,o,a,s,l,c,u=$[t+" "];if(u)return n?0:u.slice(0);for(s=t,l=[],c=w.preFilter;s;){(!r||(i=le.exec(s)))&&(i&&(s=s.slice(i[0].length)||s),l.push(o=[])),r=!1,(i=ce.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(se," ")}),s=s.slice(r.length));for(a in w.filter)!(i=he[a].exec(s))||c[a]&&!(i=c[a]
 (i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?e.error(t):$(t,l).slice(0)},S=e.compile=function(e,t){var n,r=[],i=[],o=q[e+" "];if(!o){for(t||(t=_(e)),n=t.length;n--;)o=y(t[n]),o[F]?r.push(o):i.push(o);o=q(e,b(i,r)),o.selector=e}return o},k=e.select=function(e,t,n,r){var i,o,a,s,l,c="function"==typeof e&&e,d=!r&&_(e=c.selector||e);if(n=n||[],1===d.length){if(o=d[0]=d[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&x.getById&&9===t.nodeType&&L&&w.relative[o[1].type]){if(t=(w.find.ID(a.matches[0].replace(Ce,xe),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.test(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((l=w.find[s])&&(r=l(a.matches[0].replace(Ce,xe),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return Z.a
 pply(n,r),n;break}}return(c||S(e,d))(r,t,!L,n,ye.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(j).join("")===F,x.detectDuplicates=!!A,B(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),i(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;return n?void 0:e[t]===!0?t.toLowe
 rCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),e}),r(h,[],function(){function e(e){return"matchMedia"in window?matchMedia(e).matches:!1}var t=navigator,n=t.userAgent,r,i,o,a,s,l,c,u,d,f,h,p;r=window.opera&&window.opera.buildNumber,d=/Android/.test(n),i=/WebKit/.test(n),o=!i&&!r&&/MSIE/gi.test(n)&&/Explorer/gi.test(t.appName),o=o&&/MSIE (\w+)\./.exec(n)[1],a=-1==n.indexOf("Trident/")||-1==n.indexOf("rv:")&&-1==t.appName.indexOf("Netscape")?!1:11,s=-1==n.indexOf("Edge/")||o||a?!1:12,o=o||a||s,l=!i&&!a&&/Gecko/.test(n),c=-1!=n.indexOf("Mac"),
+u=/(iPad|iPhone)/.test(n),f="FormData"in window&&"FileReader"in window&&"URL"in window&&!!URL.createObjectURL,h=e("only screen and (max-device-width: 480px)")&&(d||u),p=e("only screen and (min-width: 800px)")&&(d||u),s&&(i=!1);var m=!u||f||n.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:r,webkit:i,ie:o,gecko:l,mac:c,iOS:u,android:d,contentEditable:m,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=o,range:window.getSelection&&"Range"in window,documentMode:o&&!s?document.documentMode||7:10,fileApi:f,ceFalse:o===!1||o>8,desktop:!h&&!p}}),r(p,[],function(){function e(e){var t=e,n,r;if(!u(e))for(t=[],n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function n(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else 
 for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function r(e,t){var r=[];return n(e,function(n,i){r.push(t(n,i,e))}),r}function i(e,t){var r=[];return n(e,function(n,i){(!t||t(n,i,e))&&r.push(n)}),r}function o(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function a(e,t,n,r){var i=0;for(arguments.length<3&&(n=e[0]);i<e.length;i++)n=t.call(r,n,e[i],i);return n}function s(e,t,n){var r,i;for(r=0,i=e.length;i>r;r++)if(t.call(n,e[r],r,e))return r;return-1}function l(e,n,r){var i=s(e,n,r);return-1!==i?e[i]:t}function c(e){return e[e.length-1]}var u=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{isArray:u,toArray:e,each:n,map:r,filter:i,indexOf:o,reduce:a,findIndex:s,find:l,last:c}}),r(m,[h,p],function(e,n){function r(e){return null===e||e===t?"":(""+e).replace(h,"")}function i(e,r){return r?"array"==r
 &&n.isArray(e)?!0:typeof e==r:e!==t}function o(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function a(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],c?o[a]=function(){return i[s].apply(this,arguments)}:o[a]=function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],functio
 n(e,t){o[a][t]=e})}}function s(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function l(e,t,r,i){i=i||this,e&&(r&&(e=e[r]),n.each(e,function(e,n){return t.call(i,e,n,r)===!1?!1:void l(e,t,r,i)}))}function c(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;n<e.length;n++)r=e[n],t[r]||(t[r]={}),t=t[r];return t}function u(e,t){var n,r;for(t=t||window,e=e.split("."),n=0,r=e.length;r>n&&(t=t[e[n]],t);n++);return t}function d(e,t){return!e||i(e,"array")?e:n.map(e.split(t||","),r)}function f(t){var n=e.cacheSuffix;return n&&(t+=(-1===t.indexOf("?")?"?":"&")+n),t}var h=/^\s*|\s*$/g;return{trim:r,isArray:n.isArray,is:i,toArray:n.toArray,makeMap:o,each:n.each,map:n.map,grep:n.filter,inArray:n.indexOf,extend:s,create:a,walk:l,createNS:c,resolve:u,explode:d,_addCacheSuffix:f}}),r(g,[d
 ,f,m,h],function(e,n,r,i){function o(e){return"undefined"!=typeof e}function a(e){return"string"==typeof e}function s(e){return e&&e==e.window}function l(e,t){var n,r,i;for(t=t||w,i=t.createElement("div"),n=t.createDocumentFragment(),i.innerHTML=e;r=i.firstChild;)n.appendChild(r);return n}function c(e,t,n,r){var i;if(a(t))t=l(t,v(e[0]));else if(t.length&&!t.nodeType){if(t=f.makeArray(t),r)for(i=t.length-1;i>=0;i--)c(e,t[i],n,r);else for(i=0;i<t.length;i++)c(e,t[i],n,r);return e}if(t.nodeType)for(i=e.length;i--;)n.call(e[i],t);return e}function u(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")}function d(e,t,n){var r,i;return t=f(t)[0],e.each(function(){var e=this;n&&r==e.parentNode?i.appendChild(e):(r=e.parentNode,i=t.cloneNode(!1),e.parentNode.insertBefore(i,e),i.appendChild(e))}),e}function f(e,t){return new f.fn.init(e,t)}function h(e,t){var n;if(t.i
 ndexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===k?"":(""+e).replace(P,"")}function m(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,r,a)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,i,a)!==!1);i++);return e}function g(e,t){var n=[];return m(e,function(e,r){t(r,e)&&n.push(r)}),n}function v(e){return e?9==e.nodeType?e:e.ownerDocument:w}function y(e,n,r){var i=[],o=e[n];for("string"!=typeof r&&r instanceof f&&(r=r[0]);o&&9!==o.nodeType;){if(r!==t){if(o===r)break;if("string"==typeof r&&f(o).is(r))break}1===o.nodeType&&i.push(o),o=o[n]}return i}function b(e,n,r,i){var o=[];for(i instanceof f&&(i=i[0]);e;e=e[n])if(!r||e.nodeType===r){if(i!==t){if(e===i)break;if("string"==typeof i&&f(e).is(i))break}o.push(e)}return o}function C(e,t,n){
 for(e=e[t];e;e=e[t])if(e.nodeType==n)return e;return null}function x(e,t,n){m(n,function(n,r){e[n]=e[n]||{},e[n][t]=r})}var w=document,E=Array.prototype.push,N=Array.prototype.slice,_=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,S=e.Event,k,T=r.makeMap("children,contents,next,prev"),R=r.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),A=r.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),B={"for":"htmlFor","class":"className",readonly:"readOnly"},D={"float":"cssFloat"},M={},L={},P=/^\s*|\s*$/g;return f.fn=f.prototype={constructor:f,selector:"",context:null,length:0,init:function(e,t){var n=this,r,i;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(t&&t.nodeType)n.context=t;else{if(t)return f(e).attr(t);n.context=t=document}if(
 a(e)){if(n.selector=e,r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:_.exec(e),!r)return f(t).find(e);if(r[1])for(i=l(e,v(t)).firstChild;i;)E.call(n,i),i=i.nextSibling;else{if(i=v(t).getElementById(r[2]),!i)return n;if(i.id!==r[2])return n.find(e);n.length=1,n[0]=i}}else this.add(e,!1);return n},toArray:function(){return r.toArray(this)},add:function(e,t){var n=this,r,i;if(a(e))return n.add(f(e));if(t!==!1)for(r=f.unique(n.toArray().concat(f.makeArray(e))),n.length=r.length,i=0;i<r.length;i++)n[i]=r[i];else E.apply(n,f.makeArray(e));return n},attr:function(e,t){var n=this,r;if("object"==typeof e)m(e,function(e,t){n.attr(e,t)});else{if(!o(t)){if(n[0]&&1===n[0].nodeType){if(r=M[e],r&&r.get)return r.get(n[0],e);if(A[e])return n.prop(e)?e:k;t=n[0].getAttribute(e,2),null===t&&(t=k)}return t}this.each(function(){var n;if(1===this.nodeType){if(n=M[e],n&&n.set)return void n.
 set(this,t);null===t?this.removeAttribute(e,2):this.setAttribute(e,t,2)}})}return n},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if(e=B[e]||e,"object"==typeof e)m(e,function(e,t){n.prop(e,t)});else{if(!o(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1==this.nodeType&&(this[e]=t)})}return n},css:function(e,t){function n(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})}function r(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})}var i=this,a,s;if("object"==typeof e)m(e,function(e,t){i.css(e,t)});else if(o(t))e=n(e),"number"!=typeof t||R[e]||(t+="px"),i.each(function(){var n=this.style;if(s=L[e],s&&s.set)return void s.set(this,t);try{this.style[D[e]||e]=t}catch(i){}(null===t||""===t)&&(n.removeProperty?n.removeProperty(r(e)):n.removeAttribute(e))});else{if(a=i[0],s=L[e],s&&s.get)return s.get(a);i
 f(a.ownerDocument.defaultView)try{return a.ownerDocument.defaultView.getComputedStyle(a,null).getPropertyValue(r(e))}catch(l){return k}else if(a.currentStyle)return a.currentStyle[n(e)]}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],S.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(o(e)){n=t.length;try{for(;n--;)t[n].innerHTML=e}catch(r){f(t[n]).empty().append(e)}return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(o(e)){for(n=t.length;n--;)"innerText"in t[n]?t[n].innerText=e:t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return c(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return c(this,arguments,function(e){1===this.nodeType&&thi
 s.insertBefore(e,this.firstChild)},!0)},before:function(){var e=this;return e[0]&&e[0].parentNode?c(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?c(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):e},appendTo:function(e){return f(e).append(this),this},prependTo:function(e){return f(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return d(this,e)},wrapAll:function(e){return d(this,e,!0)},wrapInner:function(e){return this.each(function(){f(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){f(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),f(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return"string&qu
 ot;!=typeof e?n:(-1!==e.indexOf(" ")?m(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n,r){var i,o;o=u(r,e),o!==t&&(i=r.className,o?r.className=p((" "+i+" ").replace(" "+e+" "," ")):r.className+=i?" "+e:e)}),n)},hasClass:function(e){return u(this[0],e)},each:function(e){return m(this,e)},on:function(e,t){return this.each(function(){S.bind(this,e,t)})},off:function(e,t){return this.each(function(){S.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?S.fire(this,e.type,e):S.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new f(N.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,
 r=[];for(t=0,n=this.length;n>t;t++)f.find(e,this[t],r);return f(r)},filter:function(e){return f("function"==typeof e?g(this.toArray(),function(t,n){return e(n,t)}):f.filter(e,this.toArray()))},closest:function(e){var t=[];return e instanceof f&&(e=e[0]),this.each(function(n,r){for(;r;){if("string"==typeof e&&f(r).is(e)){t.push(r);break}if(r==e){t.push(r);break}r=r.parentNode}}),f(t)},offset:function(e){var t,n,r,i=0,o=0,a;return e?this.css(e):(t=this[0],t&&(n=t.ownerDocument,r=n.documentElement,t.getBoundingClientRect&&(a=t.getBoundingClientRect(),i=a.left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,o=a.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:o})},push:E,sort:[].sort,splice:[].splice},r.extend(f,{extend:r.extend,makeArray:function(e){return s(e)||e.nodeType?[e]:r.toArray(e)},inArray:h,isArray:r.isArray,each:m,trim:p,grep:g,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,contains:n.contains,fil
 ter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!=t[r].nodeType&&t.splice(r,1);return t=1===t.length?f.find.matchesSelector(t[0],e)?[t[0]]:[]:f.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return y(e,"parentNode")},next:function(e){return C(e,"nextSibling",1)},prev:function(e){return C(e,"previousSibling",1)},children:function(e){return b(e.firstChild,"nextSibling",1)},contents:function(e){return r.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){f.fn[e]=function(n){var r=this,i=[];return r.each(function(){var e=t.call(i,this,n,i);e&&(f.isArray(e)?i.push.apply(i,e):i.push(e))}),this.length>1&&(T[e]||(i=f.unique(i)),0===e.indexOf("parents")&&(i=i.reverse())),i=f(i),n?i.filter(n):i}}),m({parentsUntil:function(e,t
 ){return y(e,"parentNode",t)},nextUntil:function(e,t){return b(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return b(e,"previousSibling",1,t).slice(1)}},function(e,t){f.fn[e]=function(n,r){var i=this,o=[];return i.each(function(){var e=t.call(o,this,n,o);e&&(f.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=f.unique(o),(0===e.indexOf("parents")||"prevUntil"===e)&&(o=o.reverse())),o=f(o),r?o.filter(r):o}}),f.fn.is=function(e){return!!e&&this.filter(e).length>0},f.fn.init.prototype=f.fn,f.overrideDefaults=function(e){function t(r,i){return n=n||e(),0===arguments.length&&(r=n.element),i||(i=n.context),new t.fn.init(r,i)}var n;return f.extend(t,this),t},i.ie&&i.ie<8&&(x(M,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?k:t},size:function(e){var t=e.size;return 20===t?k:t},"class":function(e){return e.className},
 style:function(e){var t=e.style.cssText;return 0===t.length?k:t}}),x(M,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),i.ie&&i.ie<9&&(D["float"]="styleFloat",x(L,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),f.attrHooks=M,f.cssHooks=L,f}),r(v,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d,f,h="\ufeff";for(e=e||{},t&&(d=t.getValidStyles(
 ),f=t.getInvalidStyles()),u=("\\\" \\' \\; \\: ; : "+h).split(" "),l=0;l<u.length;l++)c[u[l]]=h+l,c[h+l]=u[l];return{toHex:function(e){return e.replace(r,n)},parse:function(t){function s(e,t,n){var r,i,o,a;if(r=m[e+"-top"+t],r&&(i=m[e+"-right"+t],i&&(o=m[e+"-bottom"+t],o&&(a=m[e+"-left"+t])))){var s=[r,i,o,a];for(l=s.length-1;l--&&s[l]===s[l+1];);l>-1&&n||(m[e+t]=-1==l?s[0]:s.join(" "),delete m[e+"-top"+t],delete m[e+"-right"+t],delete m[e+"-bottom"+t],delete m[e+"-left"+t])}}function u(e){var t=m[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return m[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(m[e]=m[t]+" "+m[n]+" "+m[r],delete m[t],delete m[n],delete m[r])}function f(e){return b=!0,c[e]}function h(e,t){return b&&(e=e.replace(/\uFEF
 F[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function p(t,n,r,i,o,a){if(o=o||a)return o=h(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=h(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var m={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),y=y.replace(/\\[0-9a-f]+/g,function(e){return String.fromCharCode(parseInt(e.substr(1),16))}),v&&y.length>0){if(
 !e.allow_script_urls&&("behavior"==v||/expression\s*\(|\/\*|\*\//.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,p),m[v]=b?h(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===m.border&&delete m.border,"none"===m["border-image"]&&delete m["border-image"]}return m},serialize:function(e,t){function n(t){var n,r,o,a;if(n=d[t])for(r=0,o=n.length;o>r;r++)t=n[r],a=e[t],a!==s&&a.length>0&&(i+=(i.length>
 0?" ":"")+t+": "+a+";")}function r(e,t){var n;return n=f["*"],n&&n[e]?!1:(n=f[t],n&&n[e]?!1:!0)}var i="",o,a;if(t&&d)n("*"),n(t);else for(o in e)a=e[o],a!==s&&a.length>0&&(!f||r(o,t))&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(y,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(b,[m],function(e){function t(n){function r(){return P.createDocumentFragment()}function i(e,t){E(F,e,t)}function o(e,t){E(z,e,t)}function a(e){i(e.parentNode,j(e))}functi
 on s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(L[U]=L[V],L[$]=L[W]):(L[V]=L[U],L[W]=L[$]),L.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function h(e,t){var n=L[V],r=L[W],i=L[U],o=L[$],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function p(){N(I)}function m(){return N(H)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=L.extractContents();L.insertNode(e),e.appendChild(t),L.selectNode(e)}function b(){
 return q(new t(n),{startContainer:L[V],startOffset:L[W],endContainer:L[U],endOffset:L[$],collapsed:L.collapsed,commonAncestorContainer:L.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return L[V]==L[U]&&L[W]==L[$]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function E(e,t,r){var i,o;for(e?(L[V]=t,L[W]=r):(L[U]
 =t,L[$]=r),i=L[U];i.parentNode;)i=i.parentNode;for(o=L[V];o.parentNode;)o=o.parentNode;o==i?w(L[V],L[W],L[U],L[$])>0&&L.collapse(e):L.collapse(e),L.collapsed=x(),L.commonAncestorContainer=n.findCommonAncestor(L[V],L[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(L[V]==L[U])return _(e);for(t=L[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==L[V])return S(t,e);++n}for(t=L[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==L[U])return k(t,e);++r}for(o=r-n,a=L[V];o>0;)a=a.parentNode,o--;for(s=L[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function _(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),L[W]==L[$])return t;if(3==L[V].nodeType){if(n=L[V].nodeValue,i=n.substring(L[W],L[$]),e!=O&&(o=L[V],c=L[W],u=L[$]-L[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),L.collapse(F)),e==I)return;return i.length>0&&t.appendChild(P.createTextNode(i)),t}f
 or(o=C(L[V],L[W]),a=L[$]-L[W];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&L.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-L[W],0>=a)return t!=O&&(L.setEndBefore(e),L.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(L.setEndBefore(e),L.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=L[$]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(L.setStartAfter(e),L.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.a
 ppendChild(i),n!=O&&(L.setStartAfter(e),L.collapse(F)),o}function R(e,t){var n=C(L[U],L[$]-1),r,i,o,a,s,l=n!=L[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(L[V],L[W]),r=n!=L[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=L[W],a=o.substring(l),s=o.substring(0,l)):(l=L[$],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==O?n.clone
 (e,F):e:void e.parentNode.removeChild(e)}function M(){return n.create("body",null,g()).outerText}var L=this,P=n.doc,H=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",$="endOffset",q=e.extend,j=n.nodeIndex;return q(L,{startContainer:P,startOffset:0,endContainer:P,endOffset:0,collapsed:F,commonAncestorContainer:P,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:h,deleteContents:p,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:M}),L}return t.prototype.toString=function(){return this.toStringIE()},t}),r(C,[m],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n<e
 .length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),o[r]||(i="&"+e[n+1]+";",a[r]=i,a[i]=r);return a}}var r=e.makeMap,i,o,a,s=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:&
 quot;\u0178"};o={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;","`":"&#96;"},a={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,
 THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,e
 mpty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-5529
 6)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n){return n?(n="x"===n.charAt(0).toLowerCase()?parseInt(n.substr(1),16):parseInt(n,10),n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):d[n]||String.fromCharCode(n)):a[e]||i[e]||t(e)})}};return f}),r(x,[m,u],function(e,t){return function(n,r){function i(e){n.getElementsByTagName("head")[0].appendChild(e)}function o(r,o,c){function u(){for(var e=b.pas
 sed,t=e.length;t--;)e[t]();b.status=2,b.passed=[],b.failed=[]}function d(){for(var e=b.failed,t=e.length;t--;)e[t]();b.status=3,b.passed=[],b.failed=[]}function f(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function h(e,n){e()||((new Date).getTime()-y<l?t.setTimeout(n):d())}function p(){h(function(){for(var e=n.styleSheets,t,r=e.length,i;r--;)if(t=e[r],i=t.ownerNode?t.ownerNode:t.owningElement,i&&i.id===g.id)return u(),!0},p)}function m(){h(function(){try{var e=v.sheet.cssRules;return u(),!!e}catch(t){}},m)}var g,v,y,b;if(r=e._addCacheSuffix(r),s[r]?b=s[r]:(b={passed:[],failed:[]},s[r]=b),o&&b.passed.push(o),c&&b.failed.push(c),1!=b.status){if(2==b.status)return void u();if(3==b.status)return void d();if(b.status=1,g=n.createElement("link"),g.rel="stylesheet",g.type="text/css",g.id="u"+a++,g.async=!1,g.defer=!1,y=(new Date).getTime(),"onload"in g&&!f())g.onloa
 d=p,g.onerror=d;else{if(navigator.userAgent.indexOf("Firefox")>0)return v=n.createElement("style"),v.textContent='@import "'+r+'"',m(),void i(v);p()}i(g),g.href=r}}var a=0,s={},l;r=r||{},l=r.maxLoadTime||5e3,this.load=o}}),r(w,[f,g,v,d,y,b,C,h,m,x],function(e,n,r,i,o,a,s,l,c,u){function d(e,t){var n={},r=t.keep_values,i;return i={set:function(n,r,i){t.url_converter&&(r=t.url_converter.call(t.url_converter_scope||e,r,i,n[0])),n.attr("data-mce-"+i,r).attr(i,r)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},n={style:{set:function(e,t){return null!==t&&"object"==typeof t?void e.css(t):(r&&e.attr("data-mce-style",t),void e.attr("style",t))},get:function(t){var n=t.attr("data-mce-style")||t.attr("style");return n=e.serializeStyle(e.parseStyle(n),t[0].nodeName)}}},r&&(n.href=n.src=i),n}function f(e,t){var n=t.attr("style");n=e.serial
 izeStyle(e.parseStyle(n),t[0].nodeName),n||(n=null),t.attr("data-mce-style",n)}function h(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n}function p(e,t){var o=this,a;o.doc=e,o.win=window,o.files={},o.counter=0,o.stdMode=!b||e.documentMode>=8,o.boxModel=!b||"CSS1Compat"==e.compatMode||o.stdMode,o.styleSheetLoader=new u(e),o.boundEvents=[],o.settings=t=t||{},o.schema=t.schema,o.styles=new r({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),o.fixDoc(e),o.events=t.ownEvents?new i(t.proxy):i.Event,o.attrHooks=d(o,t),a=t.schema?t.schema.getBlockElements():{},o.$=n.overrideDefaults(function(){return{context:e,element:o.getRoot()}}),o.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!a[e.nodeName]):!!a[e]}}var m=c.each,g=c.is,v=c.grep,y=c.trim,b=l.ie,C=/^([a-z0-9],?)+$/i,x=/^[ \t\r\n]*$/;return p
 .prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){var t=this.settings,n;if(b&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!b||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.settings.root_element||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;
 return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),g(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?
 this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.settings.root_element||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(C.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0;
+},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=g(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&"undefined"!=typeof t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"</"+e+">":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3==e.nodeType&&0===e.data.length?this.removeChild(e):this.
 parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&f(this,e)},getStyle:function(e,n,r){return e=this.$$(e),r?e.css(n):(n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=l.ie&&l.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[n]:t)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&f(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this,i,o,a=r.settings;""===n&&(n=null),e=r.$$(e),i=e.attr(t),e.length&&(o=r.attrHooks[t],o&&o.set?o.set(e,n,t):e.attr(t,n),i!=n&&a.onSetAttrib&&a.onSetAttrib({attrElm:e,attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.
 $$(e).each(function(e,r){m(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r=this,i,o;return e=r.$$(e),e.length&&(i=r.attrHooks[t],o=i&&i.get?i.get(e,t):e.attr(t)),"undefined"==typeof o&&(o=n||""),o},getPos:function(e,t){var r=this,i=0,o=0,a,s=r.doc,l=s.body,c;if(e=r.get(e),t=t||l,e){if(t===l&&e.getBoundingClientRect&&"static"===n(l).css("position"))return c=e.getBoundingClientRect(),t=r.boxModel?s.documentElement:l,i=c.left+(s.documentElement.scrollLeft||l.scrollLeft)-t.clientLeft,o=c.top+(s.documentElement.scrollTop||l.scrollTop)-t.clientTop,{x:i,y:o};for(a=e;a&&a!=t&&a.nodeType;)i+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=e.parentNode;a&&a!=t&&a.nodeType;)i-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode}return{x:i,y:o}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e
 ,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==p.DOM&&n===document){var o=p.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,p.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==p.DOM&&n===document?void p.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void m(e.split(","),function(e){var i;e=c._addCacheSuffix(e),t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),b&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){this.$$(
 e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,r){this.$$(e).toggleClass(t,r).each(function(){""===this.className&&n(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"==this.$$(e).css("display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),b?e.each(function(e,r){if(r.canHaveHTML!==!1){for(;r.firstChild;)r.removeChild(r.firstChild);try{r.innerHTML="<br>"+t,r.removeChild(r.firstChild)}catch(i){n("<div>").html("<br>"+t).contents().slice(1).appendTo(r)}return t}}):e.html(t)},getOuterHTML:function(e){return e=this.get(e),1==e.nodeType&&"outerHTML"in e?e.outerHTML:n("<div>").append(n(e).clone()).html()},setOuterHTML:function(
 e,t){var r=this;r.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}r.remove(n(this).html(t),!0)})},decode:s.decode,encode:s.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return g(t,"array")&&(e=e.cloneNode(!0)),n&&m(v(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(c.t
 rim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],m(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(b){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,i,a,s,l,c=0;if(e=e.firstChild){s=new o(e,e.parentNode),t=t||(n.schema?n.schema.getNonEmptyElements():null);do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))
 continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(i=n.getAttribs(e),r=i.length;r--;)if(l=i[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!x.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new a(this)},nodeIndex:h,split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=y(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1=
 =o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.insertBefore(n,e):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(c.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(c.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for
 (i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.start
 Container.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},p.DOM=new p(document),p.nodeIndex=h,p}),r(E,[w,m],function(e,t){function n(){function e(e,n){function i(){a.remove(l),s&&(s.onreadystatechange=s.onload=s=null),n()}function o(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var a=r,s,l;l=a.uniqueId(),s=document.createElement("script"),s.id=l,s.type="text/javascript",s.src=t._addCacheSuffix(e),"onreadystatechange"in s?s.onreadystatechange=function(){/loaded|complete/.test(s.readyState)&&i()}:s.onload=i,s.onerror=o,(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}var n=0,a=1,s=
 2,l={},c=[],u={},d=[],f=0,h;this.isDone=function(e){return l[e]==s},this.markDone=function(e){l[e]=s},this.add=this.load=function(e,t,r){var i=l[e];i==h&&(c.push(e),l[e]=n),t&&(u[e]||(u[e]=[]),u[e].push({func:t,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(c,e,t)},this.loadScripts=function(t,n,r){function c(e){i(u[e],function(e){e.func.call(e.scope)}),u[e]=h}var p;d.push({func:n,scope:r||this}),(p=function(){var n=o(t);t.length=0,i(n,function(t){return l[t]==s?void c(t):void(l[t]!=a&&(l[t]=a,f++,e(t,function(){l[t]=s,f--,c(t),p()})))}),f||(i(d,function(e){e.func.call(e.scope)}),d.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(N,[E,m],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLang
 Pack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=
 u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(_,[],function(){function e(e){return function(t){return!!t&&t.nodeType==e}}function t(e){return e=e.toLowerCase().split(" "),function(t){var n,r;if(t&&t.nodeType)for(r=t.nodeName.toLowerCase(),n=0;n<e.length;n++)if(r===e[n])return!0;return!1}}function n(e,t){return t=t.toLowerCase().split(" "),function(n){var r,i;if(s(n))for(r=0;r<t.length;r++)if(i=getComputedStyle(n,null).getPropertyValue(e),i===t[r])return!0;return!1}}function r(e,t){return function(n){return s(n)&&n[e]===t}}function i(e,t){return function(n){return s(n)&&n.getAttribute(e)===t}}function o(e){return s(e)&&e.hasAttribute("data-mce-bogus")}function a(e){return function(t){if(s(t)){if(t.contentEditable===e)return!0;if(t.getAttribute("data-mce-contenteditable")===e)return!0}return!1}}var s=e(1);retu
 rn{isText:e(3),isElement:s,isComment:e(8),isBr:t("br"),isContentEditableTrue:a("true"),isContentEditableFalse:a("false"),matchNodeNames:t,hasPropValue:r,hasAttributeValue:i,matchStyleValues:n,isBogus:o}}),r(S,[],function(){function e(e){return e==n}function t(e){return e.replace(new RegExp(n,"g"),"")}var n="\u200b";return{isZwsp:e,ZWSP:n,trim:t}}),r(k,[_,S],function(e,t){function n(e){return d(e)&&(e=e.parentNode),u(e)&&e.hasAttribute("data-mce-caret")}function r(e){return d(e)&&t.isZwsp(e.data)}function i(e){return n(e)||r(e)}function o(e,n){var r,o,a,s;if(r=e.ownerDocument,a=r.createTextNode(t.ZWSP),s=e.parentNode,n){if(o=e.previousSibling,d(o)){if(i(o))return o;if(c(o))return o.splitText(o.data.length-1)}s.insertBefore(a,e)}else{if(o=e.nextSibling,d(o)){if(i(o))return o;if(l(o))return o.splitText(1),o}e.nextSibling?s.insertBefore(a,e.nextSibling):s.appendChild(a)}return a}function a(e,t,
 n){var r,i,o;return r=t.ownerDocument,i=r.createElement(e),i.setAttribute("data-mce-caret",n?"before":"after"),i.setAttribute("data-mce-bogus","all"),i.appendChild(r.createTextNode("\xa0")),o=t.parentNode,n?o.insertBefore(i,t):t.nextSibling?o.insertBefore(i,t.nextSibling):o.appendChild(i),i}function s(e){var n;u(e)&&i(e)&&("&nbsp;"!=e.innerHTML?e.removeAttribute("data-mce-caret"):e.parentNode&&e.parentNode.removeChild(e)),d(e)&&(n=t.trim(e.data),0===n.length&&e.parentNode&&e.parentNode.removeChild(e),e.nodeValue=n)}function l(e){return d(e)&&e.data[0]==t.ZWSP}function c(e){return d(e)&&e.data[e.data.length-1]==t.ZWSP}var u=e.isElement,d=e.isText;return{isCaretContainer:i,isCaretContainerBlock:n,isCaretContainerInline:r,insertInline:o,insertBlock:a,remove:s,startsWithCaretContainer:l,endsWithCaretContainer:c}}),r(T,[m,y,_,k],function(e,t,
 n,r){function i(e,t){var n=e.childNodes;return t--,t>n.length-1?t=n.length-1:0>t&&(t=0),n[t]||e}function o(e){this.walk=function(t,n){function r(e){var t;return t=e[0],3===t.nodeType&&t===c&&u>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===f&&e.length>0&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function l(e,t,i){var a=i?"nextSibling":"previousSibling";for(g=e,v=g.parentNode;g&&g!=t;g=v)v=g.parentNode,y=o(g==e?g:g[a],a),y.length&&(i||y.reverse(),n(r(y)))}var c=t.startContainer,u=t.startOffset,d=t.endContainer,f=t.endOffset,h,p,m,g,v,y,b;if(b=e.select("td.mce-item-selected,th.mce-item-selected"),b.length>0)return void s(b,function(e){n([e])});if(1==c.nodeType&&c.hasChildNodes()&&(c=c.childN
 odes[u]),1==d.nodeType&&d.hasChildNodes()&&(d=i(d,f)),c==d)return n(r([c]));for(h=e.findCommonAncestor(c,d),g=c;g;g=g.parentNode){if(g===d)return l(c,h,!0);if(g===h)break}for(g=d;g;g=g.parentNode){if(g===c)return l(d,h);if(g===h)break}p=a(c,h)||c,m=a(d,h)||d,l(c,p,!0),y=o(p==c?p:p.nextSibling,"nextSibling",m==d?m.nextSibling:m),y.length&&n(r(y)),l(d,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&r<n.nodeValue.length&&(i=t(n,r),n=i.previousSibling,o>r?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r<n.nodeValue.length&&(n=t(n,r),r=0),3==i.nodeType&&o>0&&o<i.nodeValue.length&&(i=t(i,o).previousSibling,o=i.nodeValue.length)),{startContainer:n,startOffset:r,endContainer:i,endOffset:o}},this.normalize=functi
 on(n){function r(r){function a(e){return e&&/^(TD|TH|CAPTION)$/.test(e.nodeName)}function s(n,r){for(var i=new t(n,e.getParent(n.parentNode,e.isBlock)||g);n=i[r?"prev":"next"]();)if("BR"===n.nodeName)return!0}function u(e){for(;e&&e!=g;){if(l(e))return!0;e=e.parentNode}return!1}function d(e,t){return e.previousSibling&&e.previousSibling.nodeName==t}function f(n,r){var a,s,l;if(r=r||h,l=e.getParent(r.parentNode,e.isBlock)||g,n&&"BR"==r.nodeName&&C&&e.isEmpty(l))return h=r.parentNode,p=e.nodeIndex(r),void(i=!0);for(a=new t(r,l);v=a[n?"prev":"next"]();){if("false"===e.getContentEditableParent(v)||c(v))return;if(3===v.nodeType&&v.nodeValue.length>0)return h=v,p=n?v.nodeValue.length:0,void(i=!0);if(e.isBlock(v)||y[v.nodeName.toLowerCase()])return;s=v}o&&s&&(h=s,i=!0,p=0)}var h,p,m,g=e.getRoot(),v,y,b,C;if(h=n[(r?"start":"end"
 )+"Container"],p=n[(r?"start":"end")+"Offset"],C=1==h.nodeType&&p===h.childNodes.length,y=e.schema.getNonEmptyElements(),b=r,!c(h)){if(1==h.nodeType&&p>h.childNodes.length-1&&(b=!1),9===h.nodeType&&(h=e.getRoot(),p=0),h===g){if(b&&(v=h.childNodes[p>0?p-1:0])){if(c(v))return;if(y[v.nodeName]||"TABLE"==v.nodeName)return}if(h.hasChildNodes()){if(p=Math.min(!b&&p>0?p-1:p,h.childNodes.length-1),h=h.childNodes[p],p=0,u(h)||c(h))return;if(h.hasChildNodes()&&!/TABLE/.test(h.nodeName)){v=h,m=new t(h,g);do{if(l(v)||c(v)){i=!1;break}if(3===v.nodeType&&v.nodeValue.length>0){p=b?0:v.nodeValue.length,h=v,i=!0;break}if(y[v.nodeName.toLowerCase()]&&!a(v)){p=e.nodeIndex(v),h=v.parentNode,"IMG"!=v.nodeName||b||p++,i=!0;break}}while(v=b?m.next():m.prev())}}}o&&(3===h.nodeType&&0===p&&f(!0),1===h.nodeType&&(v=h.childNodes[p],v||(
 v=h.childNodes[p-1]),!v||"BR"!==v.nodeName||d(v,"A")||s(v)||s(v,!0)||f(!0,v))),b&&!o&&3===h.nodeType&&p===h.nodeValue.length&&f(!1),i&&n["set"+(r?"Start":"End")](h,p)}}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}function a(t,n,r){var i,o,a;if(i=r.elementFromPoint(t,n),o=r.body.createTextRange(),"HTML"==i.tagName&&(i=r.body),o.moveToElementText(i),a=e.toArray(o.getClientRects()),a=a.sort(function(e,t){return e=Math.abs(Math.max(e.top-n,e.bottom-n)),t=Math.abs(Math.max(t.top-n,t.bottom-n)),e-t}),a.length>0){n=(a[0].bottom+a[0].top)/2;try{return o.moveToPoint(t,n),o.collapse(!0),o}catch(s){}}return null}var s=e.each,l=n.isContentEditableFalse,c=r.isCaretContainer;return o.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&am
 p;&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},o.getCaretRangeFromPoint=function(e,t,n){var r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(o){r=a(e,t,n)}}return r},o.getSelectedNode=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset==n+1?t.childNodes[n]:null},o.getNode=function(e,t){return 1==e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},o}),r(R,[T,h,u],function(e,t,n){return function(r){function i(e){var t,n;if(n=r.$(e).parentsUntil(r.getBody()).add(e),n.length===a.length){for(t=n.length;t>=0&&n[t]===a[t];t--);if(-1===t)re
 turn a=n,!0}return a=n,!1}var o,a=[];"onselectionchange"in r.getDoc()||r.on("NodeChange Click MouseUp KeyUp Focus",function(t){var n,i;n=r.selection.getRng(),i={startContainer:n.startContainer,startOffset:n.startOffset,endContainer:n.endContainer,endOffset:n.endOffset},"nodechange"!=t.type&&e.compareRanges(i,o)||r.fire("SelectionChange"),o=i}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);(t.range||!r.selection.isCollapsed())&&!i(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("MouseUp",function(e){e.isDefaultPrevented()||("IMG"==r.selection.getNode().nodeName?n.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())}),this.nodeChanged=function(e){var t=r.selection,n,i,o;r.initialized&&t&&!r.settings.disable_nodechange&&!r.r
 eadonly&&(o=r.getBody(),n=t.getStart()||o,n=n.ownerDocument!=r.getDoc()?r.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),i=[],r.dom.getParent(n,function(e){return e===o?!0:void i.push(e)}),e=e||{},e.element=n,e.parents=i,r.fire("NodeChange",e))}}}),r(A,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeo
 f e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r
 ,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"=
 ==a||0===a.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(B,[m],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e,t){var n={},r,i;for(r=0,i=e.length;i>r;r++)n[e[r]]=t||{};return n}var s,c,u,d=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),c=3;c<d.length;c++)"string"==typeof d[c]&&(d[c]=t(d[c])),r.push.apply(r,d[c]);for(e=t(e),s=e.length;s--;)u=[].concat(l,t(n)),a[e[s]]={attributes:i(u),attributesOrder:u,children:i(r,o)}}function r(e,n){var r,i,o,s;for(e=t(e),r=e.length,n=t(n);r--;)for(i=a[e[r]],o=0,s=n.length;s>o;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},l,c,u,d,f,h;return i[e]?i[e]:(l=t("id access
 key class dir lang style tabindex title"),c=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),u=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(l.push.apply(l,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),c.push.apply(c,t("article aside details dialog figure header footer hgroup section nav")),u.push.apply(u,t("audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(l.push("xml:lang"),h=t("acronym applet basefont big font strike tt"),u.push.apply(u,h),s(h,function(e){n(e,"",u)}),f=t("center dir isindex noframes"),c.push.apply(c,f),d=[].concat(c,u),s(f,function(e){n(e,&q
 uot;",d)})),d=d||[].concat(c,u),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",d),n("address dt dd div caption","",d),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",u),n("blockquote","cite",d),n("ol&quo
 t;,"reversed start type","li"),n("ul","","li"),n("li","value",d),n("dl","","dt dd"),n("a","href target rel media hreflang type",u),n("q","cite",u),n("ins del","cite datetime",d),n("img","src sizes srcset alt usemap ismap width height"),n("iframe","src name width height",d),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",d,"param"),n("param","name value"),n("map","name",d,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span
 ","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",d),n("th","colspan rowspan headers scope abbr",d),n("form","accept-charset action autocomplete enctype method name novalidate target",d),n("fieldset","disabled form name",d,"legend"),n("label","form for",u),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?d:u),n("select","disabled form multiple name required size",&quot
 ;option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",d,"li"),n("noscript","",d),"html4"!=e&&(n("wbr"),n("ruby","",u,"rt rp"),n("figcaption","",d),n("mark rt rp summary bdi","",u),n("canvas","width height",d),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",d,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",d,"track source"),n("picture","","img source"),n("source","src srcse
 t type media sizes"),n("track","kind src srclang label default"),n("datalist","",u,"option"),n("article section nav aside header footer","",d),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",d,"figcaption"),n("time","datetime",u),n("dialog","open",d),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",u),n("progress","value max",u),n("meter","value min max low high optimum",u),n("details","open",d,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(r("script","language xml:space"),r("style","xml:space"),r("object","declare classi
 d code codebase codetype archive standby align border hspace vspace"),r("embed","align name hspace vspace"),r("param","valuetype type"),r("a","charset name rev shape coords"),r("br","clear"),r("applet","codebase archive code object alt name width height align hspace vspace"),r("img","name longdesc align border hspace vspace"),r("iframe","longdesc frameborder marginwidth marginheight scrolling align"),r("font basefont","size color face"),r("input","usemap align"),r("select","onchange"),r("textarea"),r("h1 h2 h3 h4 h5 h6 div p legend caption","align"),r("ul","type compact"),r("li","type"),r("ol dl menu dir","compact"),r("pre","width xml:space"),r("hr","align no
 shade size width"),r("isindex","prompt"),r("table","summary width frame rules cellspacing cellpadding align bgcolor"),r("col","width align char charoff valign"),r("colgroup","width align char charoff valign"),r("thead","align char charoff valign"),r("tr","align char charoff valign bgcolor"),r("th","axis align char charoff valign nowrap bgcolor width height"),r("form","accept"),r("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),r("tfoot","align char charoff valign"),r("tbody","align char charoff valign"),r("area","nohref"),r("body","background bgcolor text link vlink alink")),"html4"!=e&&(r("input button select textarea","autofocus"),r("input textarea&q
 uot;,"placeholder"),r("a","download"),r("link script img","crossorigin"),r("iframe","sandbox seamless allowfullscreen")),s(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,delete a.script,i[e]=a,a)}function r(e,t){var n;return e&&(n={},"string"==typeof e&&(e={"*":e}),s(e,function(e,r){n[r]=n[r.toUpperCase()]="map"==t?a(e,/[, ]/):c(e,/[, ]/)})),n}var i={},o={},a=e.makeMap,s=e.each,l=e.extend,c=e.explode,u=e.inArray;return function(e){function o(t,n,r){var o=e[t];return o?o=a(o,/[, ]/,a(o.toUpperCase(),/[, ]/)):(o=i[t],o||(o=a(n," ",a(n.toUpperCase()," ")),o=l(o,r),i[t]=o)),o}function d(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function f(e){var n,r,i,o,s,l,c,f,h,p,m,g,v,b,x,w,E,N,_,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[
 ([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),y["@"]&&(w=y["@"].attributes,E=y["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(b=s[1],h=s[2],x=s[3],f=s[5],g={},v=[],l={attributes:g,attributesOrder:v},"#"===b&&(l.paddEmpty=!0),"-"===b&&(l.removeEmpty=!0),"!"===s[4]&&(l.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];v.push.apply(v,E)}if(f)for(f=t(f,"|"),i=0,o=f.length;o>i;i++)if(s=k.exec(f[i])){if(c={},m=s[1],p=s[2].replace(/::/g,":"),b=s[3],_=s[4],"!"===m&&(l.attributesRequired=l.attributesRequired||[],l.attributesRequired.push(p),c.required=!0),"-"===m){delete g[p],v.splice(u(v,p),1);continue}b&&("="===b&&(l.attributesDefault=l.attributesDefault||[],l.attributesDefault.push({name:p,value:_}),c.defaultValue=_),":"===b&&a
 mp;(l.attributesForced=l.attributesForced||[],l.attributesForced.push({name:p,value:_}),c.forcedValue=_),"<"===b&&(c.validValues=a(_,"?"))),T.test(p)?(l.attributePatterns=l.attributePatterns||[],c.pattern=d(p),l.attributePatterns.push(c)):(g[p]||v.push(p),g[p]=c)}w||"@"!=h||(w=g,E=v),x&&(l.outputName=h,y[x]=l),T.test(h)?(l.pattern=d(h),C.push(l)):y[h]=l}}function h(e){y={},C=[],f(e),s(E,function(e,t){b[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(i.text_block_elements=i.block_elements=null,s(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",o=t[2];if(b[o]=b[i],L[o]=i,r||(R[o.toUpperCase()]={},R[o]={}),!y[o]){var a=y[i];a=l({},a),delete a.removeEmptyAttrs,delete a.removeEmpty,y[o]=a}s(b,function(e,t){e[i]&&(b[t]=e=l({},b[t]),e[o]=e[i])})}))}function m(n){var r=/^([+\-]?)(\w+)\[([^\]]+)\]$/;i[e.schema]=null,n&&s(t(n,","),function(e){var n=
 r.exec(e),i,o;n&&(o=n[1],i=o?b[n[2]]:b[n[2]]={"#comment":{}},i=b[n[2]],s(t(n[3],"|"),function(e){"-"===o?delete i[e]:i[e]={}}))})}function g(e){var t=y[e],n;if(t)return t;for(n=C.length;n--;)if(t=C[n],t.pattern.test(e))return t}var v=this,y={},b={},C=[],x,w,E,N,_,S,k,T,R,A,B,D,M,L={},P={};e=e||{},E=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),
+x=r(e.valid_styles),w=r(e.invalid_styles,"map"),T=r(e.valid_classes,"map"),N=o("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=o("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),S=o("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),k=o("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),A=o("non_empty_elements","td th iframe video audio object script",S),B=o("move_caret_before_on_enter_elements","table",A),D=o("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),R=o("block_elements","hr 
 table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption",D),M=o("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),s((e.special||"script noscript style textarea").split(" "),function(e){P[e]=new RegExp("</"+e+"[^>]*>","gi")}),e.valid_elements?h(e.valid_elements):(s(E,function(e,t){y[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},b[t]=e.children}),"html5"!=e.schema&&s(t("strong/b em/i"),function(e){e=t(e,"/"),y[e[1]].outputName=e[0]}),y.img.attributesDefault=[{name:"alt",value:""}],s(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){y[e]&&(y[e].removeEmpty=!0)}),s(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){y[e].paddEmpty=!0}),s(t(&qu
 ot;span"),function(e){y[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),f(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&s(c(e.invalid_elements),function(e){y[e]&&delete y[e]}),g("span")||f("span[!data-mce-type|*]"),v.children=b,v.getValidStyles=function(){return x},v.getInvalidStyles=function(){return w},v.getValidClasses=function(){return T},v.getBoolAttrs=function(){return k},v.getBlockElements=function(){return R},v.getTextBlockElements=function(){return D},v.getTextInlineElements=function(){return M},v.getShortEndedElements=function(){return S},v.getSelfClosingElements=function(){return _},v.getNonEmptyElements=function(){return A},v.getMoveCaretBeforeOnEnterElements=function(){return B},v.getWhiteSpaceElements=function(){return N},v.getSpecialElements=function(){return P},v.isValidChild=function(e,t){var n=b[e];return!(!n||!n[t])},v.isValid=function(e,t){var n,r,i=g(e);if(i){if(!t)
 return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},v.getElementRule=g,v.getCustomElements=function(){return L},v.addValidElements=f,v.setValidElements=h,v.addCustomElements=p,v.addValidChildren=m,v.elements=y}}),r(D,[B,C,m],function(e,t,n){function r(e,t,n){var r=1,i,o,a,s;for(s=e.getShortEndedElements(),a=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g,a.lastIndex=i=n;o=a.exec(t);){if(i=a.lastIndex,"/"===o[1])r--;else if(!o[1]){if(o[2]in s)continue;r++}if(0===r)break}return i}function i(i,a){function s(){}var l=this;i=i||{},l.schema=a=a||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),o("comment cdata text start end pi doctype".split(" "),function(e){e&&(l[e]=i[e]||s)}),l.parse=function(e){function o(e){var t,n;for(t=h.length;t--&&h[t].name!==e;);if(t>=0){for(n=h.len
 gth-1;n>=t;n--)e=h[n],e.valid&&l.end(e.name);h.length=t}}function s(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in x?t:z(n||r||o||""),E&&!y&&0!==t.indexOf("data-")){if(a=T[t],!a&&R){for(s=R.length;s--&&(a=R[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(V[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{c=decodeURIComponent(c)}catch(u){c=unescape(c)}if(U.test(c))return;if(!i.allow_html_data_urls&&$.test(c)&&!/^data:image\//i.test(c))return}p.map[t]=n,p.push({name:t,value:n})}var l=this,c,u=0,d,f,h=[],p,m,g,v,y,b,C,x,w,E,N,_,S,k,T,R,A,B,D,M,L,P,H,O,I,F=0,z=t.decode,W,V=n.makeMap("src,href,data,background,formaction,poster"),U=/((java|vb)script|mhtml):/i,$=/^data:/i;for(P=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*
 ?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,C=a.getShortEndedElements(),L=i.self_closing_elements||a.getSelfClosingElements(),x=a.getBoolAttrs(),E=i.validate,b=i.remove_internals,W=i.fix_self_closing,O=a.getSpecialElements();c=P.exec(e);){if(u<c.index&&l.text(z(e.substr(u,c.index-u))),d=c[6])d=d.toLowerCase(),":"===d.charAt(0)&&(d=d.substr(1)),o(d);else if(d=c[7]){if(d=d.toLowerCase(),":"===d.charAt(0)&&(d=d.substr(1)),w=d in C,W&&L[d]&&h.length>0&&h[h.length-1].name===d&&o(d),!E||(N=a.getElementRule(d))){if(_=!0,E&&(T=N.attributes,R=N.attributePatterns),(k=c[8])?(y=-1!==k.indexOf("data-mce-type"),y&&amp
 ;b&&(_=!1),p=[],p.map={},k.replace(H,s)):(p=[],p.map={}),E&&!y){if(A=N.attributesRequired,B=N.attributesDefault,D=N.attributesForced,M=N.removeEmptyAttrs,M&&!p.length&&(_=!1),D)for(m=D.length;m--;)S=D[m],v=S.name,I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I});if(B)for(m=B.length;m--;)S=B[m],v=S.name,v in p.map||(I=S.value,"{$uid}"===I&&(I="mce_"+F++),p.map[v]=I,p.push({name:v,value:I}));if(A){for(m=A.length;m--&&!(A[m]in p.map););-1===m&&(_=!1)}if(S=p.map["data-mce-bogus"]){if("all"===S){u=r(a,e,P.lastIndex),P.lastIndex=u;continue}_=!1}}_&&l.start(d,p,w)}else _=!1;if(f=O[d]){f.lastIndex=u=c.index+c[0].length,(c=f.exec(e))?(_&&(g=e.substr(u,c.index-u)),u=c.index+c[0].length):(g=e.substr(u),u=e.length),_&&(g.length>0&&l.text(g,!0),l.end(d)),P.lastIndex=u;continue}w||(k&&k.indexOf("/"
 )==k.length-1?_&&l.end(d):h.push({name:d,valid:_}))}else(d=c[1])?(">"===d.charAt(0)&&(d=" "+d),i.allow_conditional_comments||"[if"!==d.substr(0,3)||(d=" "+d),l.comment(d)):(d=c[2])?l.cdata(d):(d=c[3])?l.doctype(d):(d=c[4])&&l.pi(d,c[5]);u=c.index+c[0].length}for(u<e.length&&l.text(z(e.substr(u))),m=h.length-1;m>=0;m--)d=h[m],d.valid&&l.end(d.name)}}var o=n.each;return i.findEndTag=r,i}),r(M,[A,B,D,m],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,h,p,m,g,v,y,b;for(m=i("tr,td,th,tbody,thead,tfoot,table"),p=l.getNonEmptyElements(),g=l.getTextBlockElements(),v=l.getSpecialElements(),n=0;n<t.length;n++)if(r=t[n],r.parent&&!r.fixed)if(g[r.name]&&"li"==r.parent.name){for(y=r.next;y&&g[y.name];)y.name="li",y.fixed=!0,r.parent.insert(y,r.parent),y=y.next;r.unwrap(r)}else{for
 (a=[r],o=r.parent;o&&!l.isValidChild(o.name,r.name)&&!m[o.name];o=o.parent)a.push(o);if(o&&a.length>1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),h=0;h<a.length-1;h++){for(l.isValidChild(c.name,a[h].name)?(d=u.filterNode(a[h].clone()),c.append(d)):d=c,f=a[h].firstChild;f&&f!=a[h+1];)b=f.next,d.append(f),f=b;c=d}s.isEmpty(p)?o.insert(r,a[0],!0):(o.insert(s,a[0],!0),o.insert(r,s)),o=a[0],(o.isEmpty(p)||o.firstChild===o.lastChild&&"br"===o.firstChild.name)&&o.empty().remove()}else if(r.parent){if("li"===r.name){if(y=r.prev,y&&("ul"===y.name||"ul"===y.name)){y.append(r);continue}if(y=r.next,y&&("ul"===y.name||"ul"===y.name)){y.insert(r,y.firstChild,!0);continue}r.wrap(u.filterNode(new e("ul",1)));continue}l.isValidChild(r.parent.name,"div")&&l.isValidChild("div",r.name)?r.wrap(u.filterNode(new e("div",1))):v
 [r.name]?r.empty().remove():r.unwrap()}}}var u=this,d={},f=[],h={},p={};r=r||{},r.validate="validate"in r?r.validate:!0,r.root_name=r.root_name||"body",u.schema=l=l||new t,u.filterNode=function(e){var t,n,r;n in d&&(r=h[n],r?r.push(e):h[n]=[e]),t=f.length;for(;t--;)n=f[t].name,n in e.attributes.map&&(r=p[n],r?r.push(e):p[n]=[e]);return e},u.addNodeFilter=function(e,t){o(a(e),function(e){var n=d[e];n||(d[e]=n=[]),n.push(t)})},u.addAttributeFilter=function(e,t){o(a(e),function(e){var n;for(n=0;n<f.length;n++)if(f[n].name===e)return void f[n].callbacks.push(t);f.push({name:e,callbacks:[t]})})},u.parse=function(t,o){function a(){function e(e){e&&(t=e.firstChild,t&&3==t.type&&(t.value=t.value.replace(R,"")),t=e.lastChild,t&&3==t.type&&(t.value=t.value.replace(D,"")))}var t=y.firstChild,n,i;if(l.isValidChild(y.name,I.toLowerCase())){for(;t;)n=t.next,3==t.type||1==t.type&&"p&quot
 ;!==t.name&&!T[t.name]&&!t.attr("data-mce-type")?i?i.append(t):(i=u(I,1),i.attr(r.forced_root_block_attrs),y.insert(i,t),i.append(t)):(e(i),i=null),t=n;e(i)}}function u(t,n){var r=new e(t,n),i;return t in d&&(i=h[t],i?i.push(r):h[t]=[r]),r}function m(e){var t,n,r,i,o=l.getBlockElements();for(t=e.prev;t&&3===t.type;){if(r=t.value.replace(D,""),r.length>0)return void(t.value=r);if(n=t.next){if(3==n.type&&n.value.length){t=t.prev;continue}if(!o[n.name]&&"script"!=n.name&&"style"!=n.name){t=t.prev;continue}}i=t.prev,t.remove(),t=i}}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,E,N,_,S,k,T,R,A=[],B,D,M,L,P,H,O,I;if(o=o||{},h={},p={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),H=l.children,k=r.validate,I="forced_root_block"in o?o.force
 d_root_block:r.forced_root_block,P=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,D=/[ \t\r\n]+$/,M=/[ \t\r\n]+/g,L=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(M," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=H[b.name],s&&H[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].
 name,a in t.map&&(_=p[a],_?_.push(r):p[a]=[r]);T[e]&&m(r),n||(b=r),!B&&P[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||L.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(D,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||L.test(i))&&(n.remove(),n=o),n=o}if(B&&P[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,T[b.name]?b.empty().remove():b.unwrap(),void(b=a);b=b.pa
 rent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in h){for(_=d[S],C=h[S],E=C.length;E--;)C[E].parent||C.splice(E,1);for(x=0,w=_.length;w>x;x++)_[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(_=f[x],_.name in p){for(C=p[_.name],E=C.length;E--;)C[E].parent||C.splice(E,1);for(E=0,N=_.callbacks.length;N>E;E++)_.callbacks[E](C,_.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,h,p;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(h=l.getElemen
 tRule(c.name),h&&(h.removeEmpty?c.remove():h.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(p=new e("#text",3),p.value="\xa0",i.replace(p))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}}),r.validate&&l.getValidClasses()&&u.addAttributeFilter("class",function(e){for(var t=e.length,n,r,i,o,a,s=l.getValidClasses(),c,u;t--;){for(n=e[t],r=n.attr("class").split(" "),a="",i=0;i<r.length;i++)o=r[i],u=!1,c=s["*"],c&&c[o]&&(u=!0),c=s[n.name],!u&&c&&c[o]&&(u=!0),u&&
 (a&&(a+=" "),a+=o);a.length||(a=null),n.attr("class",a)}})}}),r(L,[C,m],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');!n||l?r[r.length]=">":r[r.length]=" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push("</",e,">"),i&&a[e]&&r.length>0&am
 p;&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("<![CDATA[",e,"]]>")},comment:function(e){r.push("<!--",e,"-->")},pi:function(e,t){t?r.push("<?",e," ",s(t),"?>"):r.push("<?",e,"?>"),i&&r.push("\n")},doctype:function(e){r.push("<!DOCTYPE",e,">",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(P,[L,B],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,h,p,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c
 .length>1&&(f=[],f.map={},m=r.getElementRule(e.name))){for(h=0,p=m.attributesOrder.length;p>h;h++)u=m.attributesOrder[h],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(h=0,p=c.length;p>h;h++)u=c[h].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(H,[w,M,D,C,P,A,B,h,m,S],function(e,t,n,r,i,o,a,s,l,c){function u(e){function t(e){return e&&"br"===e.name}var n,r;n=e.lastChild,t(n)&&(r=n.prev,t(r)&&(n.remove(),r.remove()))}var d=l.each,f=l.trim,h=e.DOM,p=new RegExp(["<span[^>]+dat
 a-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi");return function(e,o){function l(){var e=o.getBody().innerHTML,t=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,r,i,a,s,l,u=o.schema;for(e=c.trim(e.replace(p,"")),l=u.getShortEndedElements();s=t.exec(e);)i=t.lastIndex,a=s[0].length,r=l[s[1]]?i:n.findEndTag(u,e,i),e=e.substring(0,i-a)+e.substring(r),t.lastIndex=i-a;return f(e)}var m,g,v;return o&&(m=o.dom,g=o.schema),m=m||h,g=g||new a(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,v=new t(e,g),v.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),v.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a
 ="data-mce-"+n,s=e.url_converter,l=e.url_converter_scope,c;r--;)i=t[r],o=i.attributes.map[a],o!==c?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=m.serializeStyle(m.parseStyle(o),i.name):s&&(o=s.call(l,o,n,i.name)),i.attr(n,o.length>0?o:null))}),v.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class"),r&&(r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null))}),v.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),v.addNodeFilter("noscript",function(e){for(var t=e.length,n;t--;)n=e[t].firstChild,n&&(n.value=r.decode(n.value))}),v.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/(<!--\[CDATA\[
 |\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o,a;r--;)i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t?(a=i.attr("type"),a&&i.attr("type","mce-no/type"==a?null:a.replace(/^mce\-/,"")),o.length>0&&(i.firstChild.value="// <![CDATA[\n"+n(o)+"\n// ]]>")):o.length>0&&(i.firstChild.value="<!--\n"+n(o)+"\n-->")}),v.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.valu
 e.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),v.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&v.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),v.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:g,addNodeFilter:v.addNodeFilter,addAttributeFilter:v.addAttributeFilter,serialize:function(t,n){var r=this,o
 ,a,l,h,p,y;return s.ie&&m.select("script,style,select,map").length>0?(p=t.innerHTML,t=t.cloneNode(!1),m.setHTML(t,p)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(a=o.createHTMLDocument(""),d("BODY"==t.nodeName?t.childNodes:[t],function(e){a.body.appendChild(a.importNode(e,!0))}),t="BODY"!=t.nodeName?a.body.firstChild:a.body,l=m.doc,m.doc=a),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,r.onPreProcess(n)),y=v.parse(f(n.getInner?t.innerHTML:m.getOuterHTML(t)),n),u(y),h=new i(e,g),n.content=h.serialize(y),n.cleanup||(n.content=c.trim(n.content),n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||r.onPostProcess(n),l&&(m.doc=l),n.node=null,n.content},addRules:function(e){g.addValidElements(e)},setRules:function(e){g.setValidElements(e)},onPreProcess:function(e){o&&o.fire("PreProcess",
 e)},onPostProcess:function(e){o&&o.fire("PostProcess",e)},getTrimmedContent:l}}}),r(O,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentEleme
 nt();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r);if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(3==l.nodeType&&(u=l.nodeValue,s+=u.length,s>=i)){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(3==l.nodeType&&(
 s+=l.nodeValue.length,s>=i)){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.insid
 e}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,p;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=h,n=0),3==t.nod
 eType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(p=t.childNodes,p.length?(n>=p.length?i.insertAfter(a,p[p.length-1]):t.insertBefore(a,p[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="<span>&#xFEFF;</span>",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,h=f.body,p,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=h.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="&#xFEFF;":d=null,s.innerHTML="<span>&#xFEFF;</span><span>&#xFEFF;</span>",r.moveToElementText(s.lastChild),r.select(),i.
 doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=h.createControlRange(),a.addElement(m),a.select(),p=e.getRng(),p.item&&m===p.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(I,[h],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(t){return e.mac?t.metaKey:t.ctrlKey&&!t.altKey}}}),r(F,[I,m,u,h,_],function(e,t,n,r,i){var o=i.isContentEditableFalse;return function(i,a){function s(e){var t=a.settings.object_resizing;return t===!1||r.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:e==a.getBody()?!1:a.dom.is(e,t))}function l(t){var n,r,i,o,s;n=t.screenX-B,r=t.screenY-D,F=n*R[2]+
 P,z=r*R[3]+H,F=5>F?5:F,z=5>z?5:z,i="IMG"==_.nodeName&&a.settings.resize_img_proportional!==!1?!e.modifierPressed(t):e.modifierPressed(t)||"IMG"==_.nodeName&&R[2]*R[3]!==0,i&&($(n)>$(r)?(z=q(F*O),F=q(z/O)):(F=q(z/O),z=q(F*O))),E.setStyles(S,{width:F,height:z}),o=R.startPos.x+n,s=R.startPos.y+r,o=o>0?o:0,s=s>0?s:0,E.setStyles(k,{left:o,top:s,display:"block"}),k.innerHTML=F+" &times; "+z,R[2]<0&&S.clientWidth<=F&&E.setStyle(S,"left",M+(P-F)),R[3]<0&&S.clientHeight<=z&&E.setStyle(S,"top",L+(H-z)),n=j.scrollWidth-Y,r=j.scrollHeight-X,n+r!==0&&E.setStyles(k,{left:o-n,top:s-r}),I||(a.fire("ObjectResizeStart",{target:_,width:P,height:H}),I=!0)}function c(){function e(e,t){t&&(_.style[e]||!a.schema.isValid(_.nodeName.toLowerCase(),e)?E.setStyle(_,e,t):E.setAttrib(_,e,t))}I=!1,e("width",F),e("height",z)
 ,E.unbind(W,"mousemove",l),E.unbind(W,"mouseup",c),V!=W&&(E.unbind(V,"mousemove",l),E.unbind(V,"mouseup",c)),E.remove(S),E.remove(k),U&&"TABLE"!=_.nodeName||u(_),a.fire("ObjectResized",{target:_,width:F,height:z}),E.setAttrib(_,"style",E.getAttrib(_,"style")),a.nodeChanged()}function u(e,t,n){var i,o,u,f,h;d(),b(),i=E.getPos(e,j),M=i.x,L=i.y,h=e.getBoundingClientRect(),o=h.width||h.right-h.left,u=h.height||h.bottom-h.top,_!=e&&(y(),_=e,F=z=0),f=a.fire("ObjectSelected",{target:e}),s(e)&&!f.isDefaultPrevented()?N(T,function(e,i){function a(t){B=t.screenX,D=t.screenY,P=_.clientWidth,H=_.clientHeight,O=H/P,R=e,e.startPos={x:o*e[0]+M,y:u*e[1]+L},Y=j.scrollWidth,X=j.scrollHeight,S=_.cloneNode(!0),E.addClass(S,"mce-clonedresizable"),E.setAttrib(S,"data-mce-bogus","all"),S.contentEditable=!1,S.unSelectabe=!0,E.setStyles(S,{left:M,top:L,margi
 n:0}),S.removeAttribute("data-mce-selected"),j.appendChild(S),E.bind(W,"mousemove",l),E.bind(W,"mouseup",c),V!=W&&(E.bind(V,"mousemove",l),E.bind(V,"mouseup",c)),k=E.add(j,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},P+" &times; "+H)}var s;return t?void(i==t&&a(n)):(s=E.get("mceResizeHandle"+i),s&&E.remove(s),s=E.add(j,"div",{id:"mceResizeHandle"+i,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+i+"-resize; margin:0; padding:0"}),r.ie&&(s.contentEditable=!1),E.bind(s,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),a(e)}),e.elm=s,void E.setStyles(s,{left:o*e[0]+M-s.offsetWidth/2,top:u*e[1]+L-s.offsetHeight/2}))}):d(),_.setAttribute("data-mce-selected","1&qu
 ot;)}function d(){var e,t;b(),_&&_.removeAttribute("data-mce-selected");for(e in T)t=E.get("mceResizeHandle"+e),t&&(E.unbind(t),E.remove(t))}function f(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n,r;if(!I&&!a.removed)return N(E.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),r="mousedown"==e.type?e.target:i.getNode(),r=E.$(r).closest(U?"table":"table,img,hr")[0],t(r,j)&&(C(),n=i.getStart(!0),t(n,r)&&t(i.getEnd(!0),r)&&(!U||r!=n&&"IMG"!==n.nodeName))?void u(r):void d()}function h(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function p(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function m(e){var t=e.srcElement,n,r,i,o,s,l,c;n=t.getBoundingClientRect(),l=A.clientX-n.left,c=A.clientY-n.top;for(r in T)if(i=
 T[r],o=t.offsetWidth*i[0],s=t.offsetHeight*i[1],$(o-l)<8&&$(s-c)<8){R=i;break}I=!0,a.fire("ObjectResizeStart",{target:_,width:_.clientWidth,height:_.clientHeight}),a.getDoc().selection.empty(),u(t,r,A)}function g(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function v(e){var t=e.srcElement;if(o(t))return void g(e);if(t!=_){if(a.fire("ObjectSelected",{target:t}),y(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(d(),_=t,h(t,"resizestart",m))}}function y(){p(_,"resizestart",m)}function b(){for(var e in T){var t=T[e];t.elm&&(E.unbind(t.elm),delete t.elm)}}function C(){try{a.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function x(e){var t;if(U){t=W.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function w(){_=S=null,U&&(y(),p(j,"controlselect&quo
 t;,v))}var E=a.dom,N=t.each,_,S,k,T,R,A,B,D,M,L,P,H,O,I,F,z,W=a.getDoc(),V=document,U=r.ie&&r.ie<11,$=Math.abs,q=Math.round,j=a.getBody(),Y,X;T={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var K=".mce-content-body";return a.contentStyles.push(K+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+K+" .mce-resizehandle:hover {background: #000}"+K+" *[data-mce-selected] {outline: 1px solid black;resize: none}"+K+" .mce-clonedresizable {position: absolute;"+(r.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+K+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-ind
 ex: 10001}"),a.on("init",function(){U?(a.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(d(),x(e.target))}),h(j,"controlselect",v),a.on("mousedown",function(e){A=e})):(C(),r.ie>=11&&(a.on("mousedown click",function(e){var t=e.target.nodeName;!I&&/^(TABLE|IMG|HR)$/.test(t)&&(a.selection.select(e.target,"TABLE"==t),"mousedown"==e.type&&a.nodeChanged())}),a.dom.bind(j,"mscontrolselect",function(e){function t(e){n.setEditorTimeout(a,function(){a.selection.select(e)})}return o(e.target)?(e.preventDefault(),void t(e.target)):void(/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&t(e.target)))})));var e=n.throttle(f);a.on("nodechange ResizeEditor ResizeWindow drop",e),a.on("keydown keyup",function(t){_&&"TABLE"==_.nodeName&&e(t)}),a.
 on("hide blur",d)}),a.on("remove",b),{isResizable:s,showResizeRect:u,hideResizeRect:d,updateResizeRect:f,controlSelect:x,destroy:w}}}),r(z,[],function(){function e(e){return function(){return e}}function t(e){return function(t){return!e(t)}}function n(e,t){return function(n){return e(t(n))}}function r(){var e=a.call(arguments);return function(t){for(var n=0;n<e.length;n++)if(e[n](t))return!0;return!1}}function i(){var e=a.call(arguments);return function(t){for(var n=0;n<e.length;n++)if(!e[n](t))return!1;return!0}}function o(e){var t=a.call(arguments);return t.length-1>=e.length?e.apply(this,t.slice(1)):function(){var e=t.concat([].slice.call(arguments));return o.apply(this,e)}}var a=[].slice;return{constant:e,negate:t,and:i,or:r,curry:o,compose:n}}),r(W,[_,p,k],function(e,t,n){function r(e){return m(e)?!1:d(e)?f(e.parentNode)?!1:!0:h(e)||u(e)||p(e)||c(e)}function i(e,t){for(e=e.parentNode;e&&e!=t;e=e.parentNode){if(c(e))return!1;if(l(e))return!0}
 return!0}function o(e){return c(e)?t.reduce(e.getElementsByTagName("*"),function(e,t){return e||l(t)},!1)!==!0:!1}function a(e){return h(e)||o(e)}function s(e,t){return r(e)&&i(e,t)}var l=e.isContentEditableTrue,c=e.isContentEditableFalse,u=e.isBr,d=e.isText,f=e.matchNodeNames("script style textarea"),h=e.matchNodeNames("img input textarea hr iframe video audio object"),p=e.matchNodeNames("table"),m=n.isCaretContainer;return{isCaretCandidate:r,isInEditable:i,isAtomic:a,isEditableCaretCandidate:s}}),r(V,[],function(){function e(e){return e?{left:c(e.left),top:c(e.top),bottom:c(e.bottom),right:c(e.right),width:c(e.width),height:c(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function t(t,n){return t=e(t),n?t.right=t.left:(t.left=t.left+t.width,t.right=t.left),t.width=0,t}function n(e,t){return e.left===t.left&&e.top===t.top&&e.bottom===t.bottom&&e.right===t.right}function r(e,t,n){return e>=0&
 &e<=Math.min(t.height,n.height)/2;
+}function i(e,t){return e.bottom<t.top?!0:e.top>t.bottom?!1:r(t.top-e.bottom,e,t)}function o(e,t){return e.top>t.bottom?!0:e.bottom<t.top?!1:r(t.bottom-e.top,e,t)}function a(e,t){return e.left<t.left}function s(e,t){return e.right>t.right}function l(e,t){return i(e,t)?-1:o(e,t)?1:a(e,t)?-1:s(e,t)?1:0}var c=Math.round;return{clone:e,collapse:t,isEqual:n,isAbove:i,isBelow:o,isLeft:a,isRight:s,compare:l}}),r(U,[],function(){function e(e){return"string"==typeof e&&e.charCodeAt(0)>=768&&t.test(e)}var t=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\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\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\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\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c
 \u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]");return{isExtendingChar:e}}),r($,[z,_,w,T,W,V,U],function(e,t,n,r,i,o,a){function s(e){return e&&/[\r\n\t ]/.test(e)}function l(e){var t=e.startContainer,n=e.startOffset,
 r;return s(e.toString())&&g(t.parentNode)&&(r=t.data,s(r[n-1])||s(r[n+1]))?!0:!1}function c(e){function t(e){var t=e.ownerDocument,n=t.createRange(),r=t.createTextNode("\xa0"),i=e.parentNode,a;return i.insertBefore(r,e),n.setStart(r,0),n.setEnd(r,1),a=o.clone(n.getBoundingClientRect()),i.removeChild(r),a}function n(e){var n,r;return r=e.getClientRects(),n=r.length>0?o.clone(r[0]):o.clone(e.getBoundingClientRect()),y(e)&&0===n.left?t(e):n}function r(e,t){return e=o.collapse(e,t),e.width=1,e.right=e.left+1,e}function i(e){0!==e.height&&(c.length>0&&o.isEqual(e,c[c.length-1])||c.push(e))}function s(e,t){var o=e.ownerDocument.createRange();return t<e.data.length&&a.isExtendingChar(e.data[t])?c:(t>0&&(o.setStart(e,t-1),o.setEnd(e,t),l(o)||i(r(n(o),!1))),void(t<e.data.length&&(o.setStart(e,t),o.setEnd(e,t+1),l(o)||i(r(n(o),!0)))))}var c=[],u,f;if(v(e.container()))return s(e.container(),e.offset()),c;i
 f(d(e.container()))if(e.isAtEnd())f=C(e.container(),e.offset()),v(f)&&s(f,f.data.length),m(f)&&!y(f)&&i(r(n(f),!1));else{if(f=C(e.container(),e.offset()),v(f)&&s(f,0),m(f)&&e.isAtEnd())return i(r(n(f),!1)),c;u=C(e.container(),e.offset()-1),m(u)&&!y(u)&&(h(u)||h(f)||!m(f))&&i(r(n(u),!1)),m(f)&&i(r(n(f),!0))}return c}function u(t,n,r){function i(){return v(t)?0===n:0===n}function o(){return v(t)?n>=t.data.length:n>=t.childNodes.length}function a(){var e;return e=t.ownerDocument.createRange(),e.setStart(t,n),e.setEnd(t,n),e}function s(){return r||(r=c(new u(t,n))),r}function l(){return s().length>0}function d(e){return e&&t===e.container()&&n===e.offset()}function f(e){return C(t,e?n-1:n)}return{container:e.constant(t),offset:e.constant(n),toRange:a,getClientRects:s,isVisible:l,isAtStart:i,isAtEnd:o,isEqual:d,getNode:f}}var d=t.isElement,f=i.isCaretCandidate,h=t.matchStyleValues("displ
 ay","block table"),p=t.matchStyleValues("float","left right"),m=e.and(d,f,e.negate(p)),g=e.negate(t.matchStyleValues("white-space","pre pre-line pre-wrap")),v=t.isText,y=t.isBr,b=n.nodeIndex,C=r.getNode;return u.fromRangeStart=function(e){return new u(e.startContainer,e.startOffset)},u.fromRangeEnd=function(e){return new u(e.endContainer,e.endOffset)},u.after=function(e){return new u(e.parentNode,b(e)+1)},u.before=function(e){return new u(e.parentNode,b(e))},u}),r(q,[_,w,z,p,$],function(e,t,n,r,i){function o(e){var t=e.parentNode;return v(t)?o(t):t}function a(e){return e?r.reduce(e.childNodes,function(e,t){return v(t)&&"BR"!=t.nodeName?e=e.concat(a(t)):e.push(t),e},[]):[]}function s(e,t){for(;(e=e.previousSibling)&&g(e);)t+=e.data.length;return t}function l(e){return function(t){return e===t}}function c(t){var n,i,s;return n=a(o(t)),i=r.findIndex(n,l(t),t),n=n.slice(0,i+1),s=r.reduce(n,function(e,t,r){r
 eturn g(t)&&g(n[r-1])&&e++,e},0),n=r.filter(n,e.matchNodeNames(t.nodeName)),i=r.findIndex(n,l(t),t),i-s}function u(e){var t;return t=g(e)?"text()":e.nodeName.toLowerCase(),t+"["+c(e)+"]"}function d(e,t,n){var r=[];for(t=t.parentNode;t!=e&&(!n||!n(t));t=t.parentNode)r.push(t);return r}function f(t,i){var o,a,l=[],c,f,h;return o=i.container(),a=i.offset(),g(o)?c=s(o,a):(f=o.childNodes,a>=f.length?(c="after",a=f.length-1):c="before",o=f[a]),l.push(u(o)),h=d(t,o),h=r.filter(h,n.negate(e.isBogus)),l=l.concat(r.map(h,function(e){return u(e)})),l.reverse().join("/")+","+c}function h(t,n,i){var o=a(t);return o=r.filter(o,function(e,t){return!g(e)||!g(o[t-1])}),o=r.filter(o,e.matchNodeNames(n)),o[i]}function p(e,t){for(var n=e,r=0,o;g(n);){if(o=n.data.length,t>=r&&r+o>=t){e=n,t-=r;break}if(!g(n.nextSibling)){e=n,t=o;break}r+=o,n=n.nextSibling}return t>e.data.length&&(t=e.
 data.length),new i(e,t)}function m(e,t){var n,o,a;return t?(n=t.split(","),t=n[0].split("/"),a=n.length>1?n[1]:"before",o=r.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),h(e,t[1],parseInt(t[2],10))):null},e),o?g(o)?p(o,parseInt(a,10)):(a="after"===a?y(o)+1:y(o),new i(o.parentNode,a)):null):null}var g=e.isText,v=e.isBogus,y=t.nodeIndex;return{create:f,resolve:m}}),r(j,[h,m,k,q,$,_],function(e,t,n,r,i,o){function a(a){var l=a.dom;this.getBookmark=function(e,c){function u(e,n){var r=0;return t.each(l.select(e),function(e){return"all"!==e.getAttribute("data-mce-bogus")?e==n?!1:void r++:void 0}),r}function d(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&amp
 ;(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function f(e){function t(e,t){var r=e[t?"startContainer":"endContainer"],i=e[t?"startOffset":"endOffset"],o=[],a,s,u=0;if(3==r.nodeType){if(c)for(a=r.previousSibling;a&&3==a.nodeType;a=a.previousSibling)i+=a.nodeValue.length;o.push(i)}else s=r.childNodes,i>=s.length&&s.length&&(u=1,i=Math.max(0,s.length-1)),o.push(l.nodeIndex(s[i],c)+u);for(;r&&r!=n;r=r.parentNode)o.push(l.nodeIndex(r,c));return o}var n=l.getRoot(),r={};return r.start=t(e,!0),a.isCollapsed()||(r.end=t(e)),r}function h(e){function t(e){var t;if(n.isCaretContainer(e)){if(o.isText(e)&&n.isCaretContainerBlock(e)&&(e=e.parentNode),t=e.previousSibling,s(t))return t;if(t=e.nextSibling,s(t))return t}}return t(e.startContainer)||t(e.endContainer)}var p,m,g,v,y,b,C="&#xFEFF;",x;if(2==e)return b=a.getNode(),y=b?b.n
 odeName:null,p=a.getRng(),s(b)||"IMG"==y?{name:y,index:u(y,b)}:a.tridentSel?a.tridentSel.getBookmark(e):(b=h(p),b?(y=b.tagName,{name:y,index:u(y,b)}):f(p));if(3==e)return p=a.getRng(),{start:r.create(l.getRoot(),i.fromRangeStart(p)),end:r.create(l.getRoot(),i.fromRangeEnd(p))};if(e)return{rng:a.getRng()};if(p=a.getRng(),g=l.uniqueId(),v=a.isCollapsed(),x="overflow:hidden;line-height:0px",p.duplicate||p.item){if(p.item)return b=p.item(0),y=b.nodeName,{name:y,index:u(y,b)};m=p.duplicate();try{p.collapse(),p.pasteHTML('<span data-mce-type="bookmark" id="'+g+'_start" style="'+x+'">'+C+"</span>"),v||(m.collapse(!1),p.moveToElementText(m.parentElement()),0===p.compareEndPoints("StartToEnd",m)&&m.move("character",-1),m.pasteHTML('<span data-mce-type="bookmark" id="'+g+'_end" style="'+x+'">'+C+"</span>"))}catch(w){return null}}else{if(b=a.ge
 tNode(),y=b.nodeName,"IMG"==y)return{name:y,index:u(y,b)};m=d(p.cloneRange()),v||(m.collapse(!1),m.insertNode(l.create("span",{"data-mce-type":"bookmark",id:g+"_end",style:x},C))),p=d(p),p.collapse(!0),p.insertNode(l.create("span",{"data-mce-type":"bookmark",id:g+"_start",style:x},C))}return a.moveToBookmark({id:g,keep:1}),{id:g}},this.moveToBookmark=function(n){function i(e){var t=n[e?"start":"end"],r,i,o,a;if(t){for(o=t[0],i=d,r=t.length-1;r>=1;r--){if(a=i.childNodes,t[r]>a.length-1)return;i=a[t[r]]}3===i.nodeType&&(o=Math.min(t[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(t[0],i.childNodes.length)),e?u.setStart(i,o):u.setEnd(i,o)}return!0}function o(r){var i=l.get(n.id+"_"+r),o,a,s,c,u=n.keep;if(i&&(o=i.parentNode,"start"==r?(u?(o=i.firstChild,a=1):a=l.nodeIndex(i),f=h=o,p=m=a):(u?(o=i.firstChild,a=1):a=l.nodeIndex(
 i),h=o,m=a),!u)){for(c=i.previousSibling,s=i.nextSibling,t.each(t.grep(i.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});i=l.get(n.id+"_"+r);)l.remove(i,1);c&&s&&c.nodeType==s.nodeType&&3==c.nodeType&&!e.opera&&(a=c.nodeValue.length,c.appendData(s.nodeValue),l.remove(s),"start"==r?(f=h=c,p=m=a):(h=c,m=a))}}function s(t){return!l.isBlock(t)||t.innerHTML||e.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t}function c(){var e,t;return e=l.createRng(),t=r.resolve(l.getRoot(),n.start),e.setStart(t.container(),t.offset()),t=r.resolve(l.getRoot(),n.end),e.setEnd(t.container(),t.offset()),e}var u,d,f,h,p,m;if(n)if(t.isArray(n.start)){if(u=l.createRng(),d=l.getRoot(),a.tridentSel)return a.tridentSel.moveToBookmark(n);i(!0)&&i()&&a.setRng(u)}else"string"==typeof n.start?a.setRng(c(n)):n.id?(o("start"),o("end"),f&
 &(u=l.createRng(),u.setStart(s(f),p),u.setEnd(s(h),m),a.setRng(u))):n.name?a.select(l.select(n.name)[n.index]):n.rng&&a.setRng(n.rng)}}var s=o.isContentEditableFalse;return a.isBookmarkNode=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},a}),r(Y,[y,O,F,T,j,_,h,m],function(e,n,r,i,o,a,s,l){function c(e,t,i,a){var s=this;s.dom=e,s.win=t,s.serializer=i,s.editor=a,s.bookmarkManager=new o(s),s.controlSelection=new r(s,a),s.win.getSelection||(s.tridentSel=new n(s))}var u=l.each,d=l.trim,f=s.ie;return c.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire(&
 quot;BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="<br>"+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='<span id="__caret">_</span>',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.
 body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('<span id="__mce_tmp">_</span>'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(e){var t=this,n=t.getRng(),r,i,o,a;if(n.duplicate||n.item){if(n.item)return n.item(0);for(o=n.duplicate(),o.collapse(1),r=o.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.dom.getRoot()),i=a=n.parentElement();a=a.parentNode;)if(a==r){r=i;break}return r}return r=n.startContainer,1==r.nodeType&&r.hasChildNodes()&&(e&
 &n.collapsed||(r=r.childNodes[Math.min(r.childNodes.length-1,n.startOffset)])),r&&3==r.nodeType?r.parentNode:r},getEnd:function(e){var t=this,n=t.getRng(),r,i;return n.duplicate||n.item?n.item?n.item(0):(n=n.duplicate(),n.collapse(0),r=n.parentElement(),r.ownerDocument!==t.dom.doc&&(r=t.dom.getRoot()),r&&"BODY"==r.nodeName?r.lastChild||r:r):(r=n.endContainer,i=n.endOffset,1==r.nodeType&&r.hasChildNodes()&&(e&&n.collapsed||(r=r.childNodes[i>0?i-1:i])),r&&3==r.nodeType?r.parentNode:r)},getBookmark:function(e,t){return this.bookmarkManager.getBookmark(e,t)},moveToBookmark:function(e){return this.bookmarkManager.moveToBookmark(e)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}r
 eturn e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a,s,l;if(!n.win)return null;if(a=n.win.document,!e&&n.lastFocusBookmark){var c=n.lastFocusBookmark;return c.startContainer?(i=a.createRange(),i.setStart(c.startContainer,c.startOffset),i.setEnd(c.endContainer,c.endOffset)):i=c,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(u){}if(l=n.editor.fire("Ge
 tSelectionRange",{range:i}),l.range!==i)return l.range;if(f&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(u){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r,i,o;if(e)if(e.select){n.explicitRange=null;try{e.select()}catch(a){}}else if(n.tridentSel){if(e.cloneRange)try{n.tridentSel.addRange(e)}catch(a){}}else{if(r=n.getSel(),o=n.editor.fire("SetSelectionRange",{range:e}),e=o.range,r){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(a)
 {}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}e.collapsed||e.startContainer!=e.endContainer||!r.setBaseAndExtent||s.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(i=e.startContainer.childNodes[e.startOffset],i&&"IMG"==i.tagName&&n.getSel().setBaseAndExtent(i,0,i,1))}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.
 length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return s.range&&new i(e.dom).norm
 alize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};u(n.selectorChangedData,function(e,t){u(o,function(n){return i.is(n,t)?(r[t]||(u(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),u(r,function(e,n){a[n]||(delete r[n],u(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){function n(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var r,i,o=this,s=o.dom,l=s.getRoot(),c,u,d=0;if(a.is
 Element(e)){if(t===!1&&(d=e.offsetHeight),"BODY"!=l.nodeName){var f=o.getScrollContainer();if(f)return r=n(e).y-n(f).y+d,u=f.clientHeight,c=f.scrollTop,void((c>r||r+25>c+u)&&(f.scrollTop=c>r?r:r-u+25))}i=s.getViewPort(o.editor.getWin()),r=s.getPos(e).y+d,c=i.y,u=i.h,(r<i.y||r+25>c+u)&&o.editor.getWin().scrollTo(0,c>r?r:r-u+25)}},placeCaretAt:function(e,t){this.setRng(i.getCaretRangeFromPoint(e,t,this.editor.getDoc()))},_moveEndPoint:function(t,n,r){var i=n,o=new e(n,i),a=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==d(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(s.ie&&s.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?o.next():o.prev());&
 quot;BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},c}),r(X,[j,m],function(e,t){function n(t){this.compare=function(n,i){function o(e){var n={};return r(t.getAttribs(e),function(r){var i=r.nodeName.toLowerCase();0!==i.indexOf("_")&&"style"!==i&&"data-mce-style"!==i&&(n[i]=t.getAttrib(e,i))}),n}function a(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(n=t[r],"undefined"==typeof n)return!1;if(e[r]!=n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0}return n.nodeName!=i.nodeName?!1:a(o(n),o(i))&&a(t.parseStyle(t.getAttrib(n,"style")),t.parseStyle(t.getAttrib(i,"style")))?!e.isBookmarkNode(n)&&!e.isBookmarkNode(i):!1}}var r=t.each;return n}),r(K,[m],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="&qu
 ot;,l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())
 ||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(G,[y,T,j,X,m,K],function(e,t,n,r,i,o){return function(a){function s(e){return e.nodeType&&(e=e.nodeName),!!a.schema.getTextBlockElements()[e.toLowerCase()]}function l(e){return/^(TH|TD)$/.test(e.nodeName)}function c(e){return e&&/^(IMG)$/.test(e.nodeName)}function u(e,t){return q.getParents(e,t,q.getRoot())}function d(e){return 1===e.nodeType&&"_mce_caret"===e.id}function f(){m({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],
 valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align
 -right",ceFalseOverride:!0},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:
 "strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){le(n,function(t,n){q.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,
 expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),le("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){m(e,{block:e,remove:"all"})}),m(a.settings.formats)}function h(){a.addShortcut("meta+b","bold_desc","Bold"),a.addShortcut("meta+i","italic_desc","Italic"),a.addShortcut("meta+u","underline_desc","Underline");for(var e=1;6>=e;e++)a.addShortcut("access+"+e,"",["FormatBlock",!1,"h"+e]);a.addShortcut("access+7","",["FormatBlock",!1,"p"]),a.addShortcut("access+8","",["FormatBlock",!1,"div"]),a.addShortcut("access
 +9","",["FormatBlock",!1,"address"])}function p(e){return e?$[e]:$}function m(e,t){e&&("string"!=typeof e?le(e,function(e,t){m(t,e)}):(t=t.length?t:[t],le(t,function(e){e.deep===re&&(e.deep=!e.selector),e.split===re&&(e.split=!e.selector||e.inline),e.remove===re&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),$[e]=t))}function g(e){return e&&$[e]&&delete $[e],$}function v(e){var t;return a.dom.getParent(e,function(e){return t=a.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function y(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=v(e.parentNode),a.dom.getStyle(e,"color")&&t?a.dom.setStyle(e,"text-decoration",t):a.dom
 .getStyle(e,"text-decoration")===t&&a.dom.setStyle(e,"text-decoration",null))}function b(t,n,r){function i(e,t){if(t=t||u,e){if(t.onformat&&t.onformat(e,t,n,r),le(t.styles,function(t,r){q.setStyle(e,r,D(t,n))}),t.styles){var i=q.getAttrib(e,"style");i&&e.setAttribute("data-mce-style",i)}le(t.attributes,function(t,r){q.setAttrib(e,r,D(t,n))}),le(t.classes,function(t){t=D(t,n),q.hasClass(e,t)||q.addClass(e,t)})}}function o(){function t(t,n){var i=new e(n);for(r=i.current();r;r=i.prev())if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}var n=a.selection.getRng(),i=n.startContainer,o=n.endContainer;if(i!=o&&0===n.endOffset){var s=t(i,o),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function l(e,r,o){var a=[],l,f,h=!0;l=u.inline||u.block,f=q.create(l),i(f),Y.walk(e,function(e){function r(e){var g,v,y,b,C;return C=h,g=e.nodeName.toLowerCase(),v=e.parentNode.nodeName.toLowerCas
 e(),1===e.nodeType&&ie(e)&&(C=h,h="true"===ie(e),b=!0),R(g,"br")?(p=0,void(u.block&&q.remove(e))):u.wrapper&&w(e,t,n)?void(p=0):h&&!b&&u.block&&!u.wrapper&&s(g)&&X(v,l)?(e=q.rename(e,l),i(e),a.push(e),void(p=0)):u.selector&&(le(c,function(t){return"collapsed"in t&&t.collapsed!==m?void 0:q.is(e,t.selector)&&!d(e)?(i(e,t),y=!0,!1):void 0}),!u.inline||y)?void(p=0):void(!h||b||!X(l,g)||!X(v,l)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||d(e)||u.inline&&K(e)?(p=0,le(ce(e.childNodes),r),b&&(h=C),p=0):(p||(p=q.clone(f,ee),e.parentNode.insertBefore(p,e),a.push(p)),p.appendChild(e)))}var p;le(e,r)}),u.links===!0&&le(a,function(e){function t(e){"A"===e.nodeName&&i(e,u),le(ce(e.childNodes),t)}t(e)}),le(a,function(e){function r(e){var t=0;return le(e.childNodes,function(
 e){M(e)||se(e)||t++}),t}function o(e){var t,n;return le(e.childNodes,function(e){return 1!=e.nodeType||se(e)||d(e)?void 0:(t=e,ee)}),t&&!se(t)&&T(t,u)&&(n=q.clone(t,ee),i(n),q.replace(n,e,te),q.remove(t,1)),n||e}var s;if(s=r(e),(a.length>1||!K(e))&&0===s)return void q.remove(e,1);if(u.inline||u.wrapper){if(u.exact||1!==s||(e=o(e)),le(c,function(t){le(q.select(t.inline,e),function(e){se(e)||O(t,n,e,t.exact?e:null)})}),w(e.parentNode,t,n))return q.remove(e,1),e=0,te;u.merge_with_parents&&q.getParent(e.parentNode,function(r){return w(r,t,n)?(q.remove(e,1),e=0,te):void 0}),e&&u.merge_siblings!==!1&&(e=z(F(e),e),e=z(e,F(e,te)))}})}var c=p(t),u=c[0],f,h,m=!r&&j.isCollapsed();if("false"!==ie(j.getNode())){if(u)if(r)r.nodeType?(h=q.createRng(),h.setStartBefore(r),h.setEndAfter(r),l(P(h,c),null,!0)):l(r,null,!0);else if(m&&u.inline&&!q.select("td.mce-item-selected,th.mce-item-selected").len
 gth)V("apply",t,n);else{var g=a.selection.getNode();G||!c[0].defaultBlock||q.getParent(g,q.isBlock)||b(c[0].defaultBlock),a.selection.setRng(o()),f=j.getBookmark(),l(P(j.getRng(te),c),f),u.styles&&(u.styles.color||u.styles.textDecoration)&&(ue(g,y,"childNodes"),y(g)),j.moveToBookmark(f),U(j.getRng(te)),a.nodeChanged()}}else{r=j.getNode();for(var v=0,C=c.length;C>v;v++)if(c[v].ceFalseOverride&&q.is(r,c[v].selector))return void i(r,c[v])}}function C(e,t,n,r){function i(e){var n,r,o,a,s;if(1===e.nodeType&&ie(e)&&(a=b,b="true"===ie(e),s=!0),n=ce(e.childNodes),b&&!s)for(r=0,o=h.length;o>r&&!O(h[r],t,e,e);r++);if(m.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function o(n){var i;return le(u(n.parentNode).reverse(),function(n){var o;i||"_start"==n.id||"_end"==n.id||(o=w(n,e,t,r),o&&o.split!==!1&&(i=n))}),i}function s(e,n,r,i){var
  o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=q.clone(o,ee),c=0;c<h.length;c++)if(O(h[c],t,a,a)){a=0;break}a&&(s&&a.appendChild(s),l||(l=a),s=a)}!i||m.mixed&&K(e)||(n=q.split(e,n)),s&&(r.parentNode.insertBefore(s,r),l.appendChild(r))}return n}function c(e){return s(o(e),e,e,!0)}function d(e){var t=q.get(e?"_start":"_end"),n=t[e?"firstChild":"lastChild"];return se(n)&&(n=n[e?"firstChild":"lastChild"]),3==n.nodeType&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),q.remove(t,!0),n}function f(e){var t,n,r=e.commonAncestorContainer;if(e=P(e,h,te),m.split){if(t=W(e,te),n=W(e),t!=n){if(/^(TR|TH|TD)$/.test(t.nodeName)&&t.firstChild&&(t="TR"==t.nodeName?t.firstChild.firstChild||t:t.firstChild||t),r&&/^T(HEAD|BODY|FOOT|R)$/.test(r.nodeName)&&l(n)&
 amp;&n.firstChild&&(n=n.firstChild||n),q.isChildOf(t,n)&&!K(n)&&!l(t)&&!l(n))return t=L(t,"span",{id:"_start","data-mce-type":"bookmark"}),c(t),void(t=d(te));t=L(t,"span",{id:"_start","data-mce-type":"bookmark"}),n=L(n,"span",{id:"_end","data-mce-type":"bookmark"}),c(t),c(n),t=d(te),n=d()}else t=n=c(t);e.startContainer=t.parentNode?t.parentNode:t,e.startOffset=J(t),e.endContainer=n.parentNode?n.parentNode:n,e.endOffset=J(n)+1}Y.walk(e,function(e){le(e,function(e){i(e),1===e.nodeType&&"underline"===a.dom.getStyle(e,"text-decoration")&&e.parentNode&&"underline"===v(e.parentNode)&&O({deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,e)})})}var h=p(e),m=h[0],g,y,b=!0;if(n)return void(n.nodeType?(y=q.createRng(),y.setStartBefore(n)
 ,y.setEndAfter(n),f(y)):f(n));if("false"!==ie(j.getNode()))j.isCollapsed()&&m.inline&&!q.select("td.mce-item-selected,th.mce-item-selected").length?V("remove",e,t,r):(g=j.getBookmark(),f(j.getRng(te)),j.moveToBookmark(g),m.inline&&E(e,t,j.getStart())&&U(j.getRng(!0)),a.nodeChanged());else{n=j.getNode();for(var C=0,x=h.length;x>C&&(!h[C].ceFalseOverride||!O(h[C],t,n,n));C++);}}function x(e,t,n){var r=p(e);!E(e,t,n)||"toggle"in r[0]&&!r[0].toggle?b(e,t,n):C(e,t,n)}function w(e,t,n,r){function i(e,t,i){var o,a,s=t[i],l;if(t.onmatch)return t.onmatch(e,t,i);if(s)if(s.length===re){for(o in s)if(s.hasOwnProperty(o)){if(a="attributes"===i?q.getAttrib(e,o):A(e,o),r&&!a&&!t.exact)return;if((!r||t.exact)&&!R(a,B(D(s[o],n),o)))return}}else for(l=0;l<s.length;l++)if("attributes"===i?q.getAttrib(e,s[l]):A(e,s[l]))return t;return t}var o=p(t),a,s,l;if(o&&amp
 ;e)for(s=0;s<o.length;s++)if(a=o[s],T(e,a)&&i(e,a,"attributes")&&i(e,a,"styles")){if(l=a.classes)for(s=0;s<l.length;s++)if(!q.hasClass(e,l[s]))return;return a}}function E(e,t,n){function r(n){
+var r=q.getRoot();return n===r?!1:(n=q.getParent(n,function(n){return n.parentNode===r||!!w(n,e,t,!0)}),w(n,e,t))}var i;return n?r(n):(n=j.getNode(),r(n)?te:(i=j.getStart(),i!=n&&r(i)?te:ee))}function N(e,t){var n,r=[],i={};return n=j.getStart(),q.getParent(n,function(n){var o,a;for(o=0;o<e.length;o++)a=e[o],!i[a]&&w(n,a,t)&&(i[a]=!0,r.push(a))},q.getRoot()),r}function _(e){var t=p(e),n,r,i,o,a;if(t)for(n=j.getStart(),r=u(n),o=t.length-1;o>=0;o--){if(a=t[o].selector,!a||t[o].defaultBlock)return te;for(i=r.length-1;i>=0;i--)if(q.is(r[i],a))return te}return ee}function S(e,t,n){var r;return ne||(ne={},r={},a.on("NodeChange",function(e){var t=u(e.element),n={};t=i.grep(t,function(e){return 1==e.nodeType&&!e.getAttribute("data-mce-bogus")}),le(ne,function(e,i){le(t,function(o){return w(o,i,{},e.similar)?(r[i]||(le(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):void 0})}),le(r,function(i,o){n[o]||(delete r
 [o],le(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),le(e.split(","),function(e){ne[e]||(ne[e]=[],ne[e].similar=n),ne[e].push(t)}),this}function k(e){return o.getCssText(a,e)}function T(e,t){return R(e,t.inline)?te:R(e,t.block)?te:t.selector?1==e.nodeType&&q.is(e,t.selector):void 0}function R(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function A(e,t){return B(q.getStyle(e,t),t)}function B(e,t){return("color"==t||"backgroundColor"==t)&&(e=q.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function D(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function M(e){return e&&3===e.nodeType&&/
 ^([\t \r\n]+|)$/.test(e.nodeValue)}function L(e,t,n){var r=q.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function P(t,n,r){function i(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=q.getRoot(),3==r.nodeType&&!M(r)&&(e?v>0:b<r.nodeValue.length))return r;for(;;){if(!n[0].block_expand&&K(i))return i;for(o=i[a];o;o=o[a])if(!se(o)&&!M(o)&&!t(o))return i;if(i==s||i.parentNode==s){r=i;break}i=i.parentNode}return r}function o(e,t){for(t===re&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)e=e.childNodes[t],e&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}}function l(e){for(var t=e;t;){if(1===t.nodeType&&ie(t))return"false"===ie(t)?t:e;t=t.parentNode}return e}function c(t,
 n,i){function o(e,t){var n,o,a=e.nodeValue;return"undefined"==typeof t&&(t=i?a.length:0),i?(n=a.lastIndexOf(" ",t),o=a.lastIndexOf("\xa0",t),n=n>o?n:o,-1===n||r||n++):(n=a.indexOf(" ",t),o=a.indexOf("\xa0",t),n=-1!==n&&(-1===o||o>n)?n:o),n}var s,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,q.getParent(t,K)||a.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c}}else if(K(l))break;return u?(n=i?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,o,a,s;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=u(e),o=0;o<i.length;o++)for(a=0;a<n.length;a++)if(s=n[a],!("collapsed"in s&&s.collapsed!==t.collapsed)&&q.is(i[o],s.selector))return i[o];return e}function f(e,t){var r,i=q.getRoot();if(n[0].wrapper||(r=q.getParent(e,n[0].blo
 ck,i)),r||(r=q.getParent(3==e.nodeType?e.parentNode:e,function(e){return e!=i&&s(e)})),r&&n[0].wrapper&&(r=u(r,"ul,ol").reverse()[0]||r),!r)for(r=e;r[t]&&!K(r[t])&&(r=r[t],!R(r,"br")););return r||e}var h,p,m,g=t.startContainer,v=t.startOffset,y=t.endContainer,b=t.endOffset;if(1==g.nodeType&&g.hasChildNodes()&&(h=g.childNodes.length-1,g=g.childNodes[v>h?h:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(h=y.childNodes.length-1,y=y.childNodes[b>h?h:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=l(g),y=l(y),(se(g.parentNode)||se(g))&&(g=se(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(se(y.parentNode)||se(y))&&(y=se(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=c(g,v,!0),m&&(g=m.container,v=m.offset),m=c(y,b),m&&(y=m.container,b=m.off
 set)),p=o(y,b),p.node)){for(;p.node&&0===p.offset&&p.node.previousSibling;)p=o(p.node.previousSibling);p.node&&p.offset>0&&3===p.node.nodeType&&" "===p.node.nodeValue.charAt(p.offset-1)&&p.offset>1&&(y=p.node,y.splitText(p.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=i(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=i())),n[0].selector&&n[0].expand!==ee&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(K(g)||(g=i(!0)),K(y)||(y=i()))),1==g.nodeType&&(v=J(g),g=g.parentNode),1==y.nodeType&&(b=J(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function H(e,t){return t.links&&"A&quot
 ;==e.tagName}function O(e,t,n,r){var i,o,a;if(!T(n,e)&&!H(n,e))return ee;if("all"!=e.remove)for(le(e.styles,function(i,o){i=B(D(i,t),o),"number"==typeof o&&(o=i,r=0),(e.remove_similar||!r||R(A(r,o),i))&&q.setStyle(n,o,""),a=1}),a&&""===q.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),le(e.attributes,function(e,i){var o;if(e=D(e,t),"number"==typeof i&&(i=e,r=0),!r||R(q.getAttrib(r,i),e)){if("class"==i&&(e=q.getAttrib(n,i),e&&(o="",le(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void q.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),Z.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),le(e.classes,function(e){e=D(e,t),(!r||q.hasClass(r,e))&&q.re
 moveClass(n,e)}),o=q.getAttribs(n),i=0;i<o.length;i++)if(0!==o[i].nodeName.indexOf("_"))return ee;return"none"!=e.remove?(I(n,e),te):void 0}function I(e,t){function n(e,t,n){return e=F(e,t,n),!e||"BR"==e.nodeName||K(e)}var r=e.parentNode,i;t.block&&(G?r==q.getRoot()&&(t.list_block&&R(e,t.list_block)||le(ce(e.childNodes),function(e){X(G,e.nodeName.toLowerCase())?i?i.appendChild(e):(i=L(e,G),q.setAttribs(i,a.settings.forced_root_block_attrs)):i=0})):K(e)&&!K(r)&&(n(e,ee)||n(e.firstChild,te,1)||e.insertBefore(q.create("br"),e.firstChild),n(e,te)||n(e.lastChild,ee,1)||e.appendChild(q.create("br")))),t.selector&&t.inline&&!R(t.inline,e)||q.remove(e,1)}function F(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1==e.nodeType||!M(e))return e}function z(e,t){function n(e,t){for(i=e;i;i=i[t]){if(3==i.nodeType&&0!==i.nodeValue.lengt
 h)return e;if(1==i.nodeType&&!se(i))return i}return e}var i,o,a=new r(q);if(e&&t&&(e=n(e,"previousSibling"),t=n(t,"nextSibling"),a.compare(e,t))){for(i=e.nextSibling;i&&i!=t;)o=i,i=i.nextSibling,e.appendChild(o);return q.remove(t),le(ce(t.childNodes),function(t){e.appendChild(t)}),e}return t}function W(t,n){var r,i,o;return r=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"],1==r.nodeType&&(o=r.childNodes.length-1,!n&&i&&i--,r=r.childNodes[i>o?o:i]),3===r.nodeType&&n&&i>=r.nodeValue.length&&(r=new e(r,a.getBody()).next()||r),3!==r.nodeType||n||0!==i||(r=new e(r,a.getBody()).prev()||r),r}function V(t,n,r,i){function o(e){var t=q.create("span",{id:g,"data-mce-bogus":!0,style:v?"color:red":""});return e&&t.appendChild(a.getDoc().createTextNode(Q)),t}function l(e,t){for(;e;){i
 f(3===e.nodeType&&e.nodeValue!==Q||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function c(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=j.getRng(!0),l(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),q.remove(e)):(n=u(e),n.nodeValue.charAt(0)===Q&&(n.deleteData(0,1),r.startContainer==n&&r.startOffset>0&&r.setStart(n,r.startOffset-1),r.endContainer==n&&r.endOffset>0&&r.setEnd(n,r.endOffset-1)),q.remove(e,1)),j.setRng(r);else if(e=c(j.getStart()),!e)for(;e=q.get(g);)d(e,!1)}function f(){var e,t,i,a,s,l,d;e=j.getRng(!0),a=e.startOffset,l=e.startContainer,d=l.nodeValue,t=c(j.getStart()),t&&(i=u(t)),d&&a>0&&a<d.length&&/\w/.test(d.charAt(a))&&/\w/.test(d.charAt(a-1))?(s=j.getBookmark(),e.colla
 pse(!0),e=P(e,p(n)),e=Y.split(e),b(n,r,e),j.moveToBookmark(s)):(t&&i.nodeValue===Q?b(n,r,t):(t=o(!0),i=t.firstChild,e.insertNode(t),a=1,b(n,r,t)),j.setCursorLocation(i,a))}function h(){var e=j.getRng(!0),t,a,l,c,u,d,f=[],h,m;for(t=e.startContainer,a=e.startOffset,u=t,3==t.nodeType&&(a!=t.nodeValue.length&&(c=!0),u=u.parentNode);u;){if(w(u,n,r,i)){d=u;break}u.nextSibling&&(c=!0),f.push(u),u=u.parentNode}if(d)if(c)l=j.getBookmark(),e.collapse(!0),e=P(e,p(n),!0),e=Y.split(e),C(n,r,e),j.moveToBookmark(l);else{for(m=o(),u=m,h=f.length-1;h>=0;h--)u.appendChild(q.clone(f[h],!1)),u=u.firstChild;u.appendChild(q.doc.createTextNode(Q)),u=u.firstChild;var g=q.getParent(d,s);g&&q.isEmpty(g)?d.parentNode.replaceChild(m,d):q.insertAfter(m,d),j.setCursorLocation(u,1),q.isEmpty(d)&&q.remove(d)}}function m(){var e;e=c(j.getStart()),e&&!q.isEmpty(e)&&ue(e,function(e){1!=e.nodeType||e.id===g||q.isEmpty(e)||q.setAttrib(e,"data-mce-b
 ogus",null)},"childNodes")}var g="_mce_caret",v=a.settings.caret_debug;a._hasCaretEvents||(ae=function(){var e=[],t;if(l(c(j.getStart()),e))for(t=e.length;t--;)q.setAttrib(e[t],"data-mce-bogus","1")},oe=function(e){var t=e.keyCode;d(),8==t&&j.isCollapsed()&&j.getStart().innerHTML==Q&&d(c(j.getStart())),(37==t||39==t)&&d(c(j.getStart())),m()},a.on("SetContent",function(e){e.selection&&m()}),a._hasCaretEvents=!0),"apply"==t?f():h()}function U(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if((t.startContainer!=t.endContainer||!c(t.startContainer.childNodes[t.startOffset]))&&(3==n.nodeType&&r>=n.nodeValue.length&&(r=J(n),n=n.parentNode,i=!0),1==n.nodeType))for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,q.getParent(n,q.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!M(a))return l=q.create
 ("a",{"data-mce-bogus":"all"},Q),a.parentNode.insertBefore(l,a),t.setStart(a,0),j.setRng(t),void q.remove(l)}var $={},q=a.dom,j=a.selection,Y=new t(q),X=a.schema.isValidChild,K=q.isBlock,G=a.settings.forced_root_block,J=q.nodeIndex,Q="\ufeff",Z=/^(src|href|style)$/,ee=!1,te=!0,ne,re,ie=q.getContentEditable,oe,ae,se=n.isBookmarkNode,le=i.each,ce=i.grep,ue=i.walk,de=i.extend;de(this,{get:p,register:m,unregister:g,apply:b,remove:C,toggle:x,match:E,matchAll:N,matchNode:w,canApply:_,formatChanged:S,getCssText:k}),f(),h(),a.on("BeforeGetContent",function(e){ae&&"raw"!=e.format&&ae()}),a.on("mouseup keydown",function(e){oe&&oe(e)})}}),r(J,[I,h],function(e,t){return function(e){function n(){return e.serializer.getTrimmedContent()}function r(t){e.setDirty(t)}function i(e){o.typing=!1,o.add({},e)}var o=this,a=0,s=[],l,c,u=0;return e.on("init",function(){o.add()}),e.on("BeforeExecComman
 d",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o.beforeChange()}),e.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&i(e)}),e.on("ObjectResizeStart Cut",function(){o.beforeChange()}),e.on("SaveContent ObjectResized blur",i),e.on("DragEnd",i),e.on("KeyUp",function(a){var l=a.keyCode;a.isDefaultPrevented()||((l>=33&&36>=l||l>=37&&40>=l||45==l||13==l||a.ctrlKey)&&(i(),e.nodeChanged()),(46==l||8==l||t.mac&&(91==l||93==l))&&e.nodeChanged(),c&&o.typing&&(e.isDirty()||(r(s[0]&&n()!=s[0].content),e.isDirty()&&e.fire("change",{level:s[0],lastLevel:null})),e.fire("TypingUndo"),c=!1,e.nodeChanged()))}),e.on("KeyDown",function(e){var t=e.keyCode;if(!e.isDefaultPreve
 nted()){if(t>=33&&36>=t||t>=37&&40>=t||45==t)return void(o.typing&&i(e));var n=e.ctrlKey&&!e.altKey||e.metaKey;!(16>t||t>20)||224==t||91==t||o.typing||n||(o.beforeChange(),o.typing=!0,o.add({},e),c=!0)}}),e.on("MouseDown",function(e){o.typing&&i(e)}),e.addShortcut("meta+z","","Undo"),e.addShortcut("meta+y,meta+shift+z","","Redo"),e.on("AddUndo Undo Redo ClearUndos",function(t){t.isDefaultPrevented()||e.nodeChanged()}),o={data:s,typing:!1,beforeChange:function(){u||(l=e.selection.getBookmark(2,!0))},add:function(t,i){var o,c=e.settings,d;if(t=t||{},t.content=n(),u||e.removed)return null;if(d=s[a],e.fire("BeforeAddUndo",{level:t,lastLevel:d,originalEvent:i}).isDefaultPrevented())return null;if(d&&d.content==t.content)return null;if(s[a]&&(s[a].beforeBookmark=l),c.custom_undo_redo_levels&&s.length>c.custom_undo_re
 do_levels){for(o=0;o<s.length-1;o++)s[o]=s[o+1];s.length--,a=s.length}t.bookmark=e.selection.getBookmark(2,!0),a<s.length-1&&(s.length=a+1),s.push(t),a=s.length-1;var f={level:t,lastLevel:d,originalEvent:i};return e.fire("AddUndo",f),a>0&&(r(!0),e.fire("change",f)),t},undo:function(){var t;return o.typing&&(o.add(),o.typing=!1),a>0&&(t=s[--a],e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(t.beforeBookmark),r(!0),e.fire("undo",{level:t})),t},redo:function(){var t;return a<s.length-1&&(t=s[++a],e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(t.bookmark),r(!0),e.fire("redo",{level:t})),t},clear:function(){s=[],a=0,o.typing=!1,e.fire("ClearUndos")},hasUndo:function(){return a>0||o.typing&&s[0]&&n()!=s[0].content},hasRedo:function(){return a<s.length-1&&!this.typing},transact:function(e){o.beforeCha
 nge();try{u++,e()}finally{u--}o.add()}}}}),r(Q,[y,T,h],function(e,t,n){var r=n.ie&&n.ie<11;return function(i){function o(o){function h(e){return e&&a.isBlock(e)&&!/^(TD|TH|CAPTION|FORM)$/.test(e.nodeName)&&!/^(fixed|absolute)/i.test(e.style.position)&&"true"!==a.getContentEditable(e)}function p(e){return e&&/^(TD|TH|CAPTION)$/.test(e.nodeName)}function m(e){var t;a.isBlock(e)&&(t=s.getRng(),e.appendChild(a.create("span",null,"\xa0")),s.select(e),e.lastChild.outerHTML="",s.setRng(t))}function g(e){var t=e,n=[],r;if(t){for(;t=t.firstChild;){if(a.isBlock(t))return;1!=t.nodeType||d[t.nodeName.toLowerCase()]||n.push(t)}for(r=n.length;r--;)t=n[r],!t.hasChildNodes()||t.firstChild==t.lastChild&&""===t.firstChild.nodeValue?a.remove(t):"A"==t.nodeName&&" "===(t.innerText||t.textContent)&&a.remove(t)}}function v(t){function r(e){for(;e;){if(1=
 =e.nodeType||3==e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}var i,o,l,c=t,u;if(t){if(n.ie&&n.ie<9&&L&&L.firstChild&&L.firstChild==L.lastChild&&"BR"==L.firstChild.tagName&&a.remove(L.firstChild),/^(LI|DT|DD)$/.test(t.nodeName)){var d=r(t.firstChild);d&&/^(UL|OL|DL)$/.test(d.nodeName)&&t.insertBefore(a.doc.createTextNode("\xa0"),t.firstChild)}if(l=a.createRng(),n.ie||t.normalize(),t.hasChildNodes()){for(i=new e(t,t);o=i.current();){if(3==o.nodeType){l.setStart(o,0),l.setEnd(o,0);break}if(f[o.nodeName.toLowerCase()]){l.setStartBefore(o),l.setEndBefore(o);break}c=o,o=i.next()}o||(l.setStart(c,0),l.setEnd(c,0))}else"BR"==t.nodeName?t.nextSibling&&a.isBlock(t.nextSibling)?((!P||9>P)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0
 ),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}}function y(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function b(e){e.innerHTML=r?"":'<br data-mce-bogus="1">'}function C(e){var t=D,n,i,o,s=u.getTextInlineElements();if(e||"TABLE"==z?(n=a.create(e||V),y(n)):n=L.cloneNode(!1),o=n,l.keep_styles!==!1)do if(s[t.nodeName]){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='<br data-mce-bogus="1">'),n}function x(t){var n,r,i;if(3==D.nodeType&&(t?M>0:M<D.nodeValue.length))return!1;if(D.parentNode==L&&U&&!t)return!0;if(t&&1==D.nodeType&&D==L.firstChild)return!0;if("TABLE"===D.nodeName||D.previousSibling
 &&"TABLE"==D.previousSibling.nodeName)return U&&!t||!U&&t;for(n=new e(D,L),3==D.nodeType&&(t&&0===M?n.prev():t||M!=D.nodeValue.length||n.next());r=n.current();){if(1===r.nodeType){if(!r.getAttribute("data-mce-bogus")&&(i=r.nodeName.toLowerCase(),d[i]&&"br"!==i))return!1}else if(3===r.nodeType&&!/^[ \t\r\n]*$/.test(r.nodeValue))return!1;t?n.prev():n.next()}return!0}function w(e,t){var n,r,o,s,l,c,d=V||"P";if(r=a.getParent(e,a.isBlock),!r||!h(r)){if(r=r||B,c=r==i.getBody()||p(r)?r.nodeName.toLowerCase():r.parentNode.nodeName.toLowerCase(),!r.hasChildNodes())return n=a.create(d),y(n),r.appendChild(n),R.setStart(n,0),R.setEnd(n,0),n;for(s=e;s.parentNode!=r;)s=s.parentNode;for(;s&&!a.isBlock(s);)o=s,s=s.previousSibling;if(o&&u.isValidChild(c,d.toLowerCase())){for(n=a.create(d),y(n),o.parentNode.insertBefore(n,o),s=o;s&&!a.isBlock(s);)l=s.nextSibling,n.appendChil
 d(s),s=l;R.setStart(e,t),R.setEnd(e,t)}}return e}function E(){function e(e){for(var t=F[e?"firstChild":"lastChild"];t&&1!=t.nodeType;)t=t[e?"nextSibling":"previousSibling"];return t===L}function t(){var e=F.parentNode;return/^(LI|DT|DD)$/.test(e.nodeName)?e:F}if(F!=i.getBody()){var n=F.parentNode.nodeName;/^(OL|UL|LI)$/.test(n)&&(V="LI"),O=V?C(V):a.create("BR"),e(!0)&&e()?"LI"==n?a.insertAfter(O,t()):a.replace(O,F):e(!0)?"LI"==n?(a.insertAfter(O,t()),O.appendChild(a.doc.createTextNode(" ")),O.appendChild(F)):F.parentNode.insertBefore(O,F):e()?(a.insertAfter(O,t()),m(O)):(F=t(),A=R.cloneRange(),A.setStartAfter(L),A.setEndAfter(F),I=A.extractContents(),"LI"==V&&"LI"==I.firstChild.nodeName?(O=I.firstChild,a.insertAfter(I,F)):(a.insertAfter(I,F),a.insertAfter(O,F))),a.remove(L),v(O),c.add()}}function N(){i.execCommand("InsertLineBreak",!
 1,o)}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function S(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function k(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}function T(){O=/^(H[1-6]|PRE|FIGURE)$/.test(z)&&"HGROUP"!=W?C(V):C(),l.end_container_on_empty_block&&h(F)&&a.isEmpty(L)?O=a.split(F,L):a.insertAfter(O,L),v(O)}var R,A,B,D,M,L,P,H,O,I,F,z,W,V,U;if(R=s.getRng(!0),!o.isDefaultPrevented()){if(!R.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(R),D=R.startContainer,M=R.startOffset,V=(l.force_p_newlines?"p":"")||l.forced_root_block,V=V?V.toUpperCase():"",P=a.doc.documentMode,H=o.s
 hiftKey,1==D.nodeType&&D.hasChildNodes()&&(U=M>D.childNodes.length-1,D=D.childNodes[Math.min(M,D.childNodes.length-1)]||D,M=U&&3==D.nodeType?D.nodeValue.length:0),B=S(D)){if(c.beforeChange(),!a.isBlock(B)&&B!=a.getRoot())return void((!V||H)&&N());if((V&&!H||!V&&H)&&(D=w(D,M)),L=a.getParent(D,a.isBlock),F=L?a.getParent(L.parentNode,a.isBlock):null,z=L?L.nodeName.toUpperCase():"",W=F?F.nodeName.toUpperCase():"","LI"!=W||o.ctrlKey||(L=F,z=W),/^(LI|DT|DD)$/.test(z)){if(!V&&H)return void N();if(a.isEmpty(L))return void E()}if("PRE"==z&&l.br_in_pre!==!1){if(!H)return void N()}else if(!V&&!H&&"LI"!=z||V&&H)return void N();V&&L===i.getBody()||(V=V||"P",x()?T():x(!0)?(O=L.parentNode.insertBefore(C(),L),m(O),v(L)):(A=R.cloneRange(),A.setEndAfter(L),I=A.extractContents(),_(I),O=I.firstChild,a.insertAfter(I,L),g(O),k(L),a.
 isEmpty(L)&&b(L),O.normalize(),a.isEmpty(O)?(a.remove(O),T()):v(O)),a.setAttrib(O,"id",""),i.fire("NewBlock",{newBlock:O}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements(),f=u.getMoveCaretBeforeOnEnterElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(Z,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,h,p,m=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",
 m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){p=t,t=t.nextSibling,r.remove(p);continue}h||(h=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(h,t),g=!0),p=t,t=t.nextSibling,h.appendChild(p)}else h=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(ee,[P,h,m,X,T,y],function(e,n,r,i,o,a){var s=r.each,l=r.extend,c=r.map,u=r.inArray,d=r.ex
 plode,f=n.ie,h=n.ie&&n.ie<11,p=!0,m=!1;return function(r){function g(e,t,n,i){var o,a,l=0;if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||i&&i.skip_focus||r.focus(),i=r.fire("BeforeExecCommand",{command:e,ui:t,value:n}),i.isDefaultPrevented())return!1;if(a=e.toLowerCase(),o=M.exec[a])return o(a,t,n),r.fire("ExecCommand",{command:e,ui:t,value:n}),!0;if(s(r.plugins,function(i){return i.execCommand&&i.execCommand(e,t,n)?(r.fire("ExecCommand",{command:e,ui:t,value:n}),l=!0,!1):void 0}),l)return l;if(r.theme&&r.theme.execCommand&&r.theme.execCommand(e,t,n))return r.fire("ExecCommand",{command:e,ui:t,value:n}),!0;try{l=r.getDoc().execCommand(e,t,n)}catch(c){}return l?(r.fire("ExecCommand",{command:e,ui:t,value:n}),!0):!1}function v(e){var t;if(!r._isHidden()){if(e=e.toLowerCase(),t=M.state[e])return t(e);try{return r.getDoc().queryCommandState(e)}catch(n){}return!1}}
 function y(e){var t;if(!r._isHidden()){if(e=e.toLowerCase(),t=M.value[e])return t(e);try{return r.getDoc().queryCommandValue(e)}catch(n){}}}function b(e,t){t=t||"exec",s(e,function(e,n){s(n.toLowerCase().split(","),function(n){M[t][n]=e})})}function C(e,t,n){e=e.toLowerCase(),M.exec[e]=function(e,i,o,a){return t.call(n||r,i,o,a)}}function x(e){if(e=e.toLowerCase(),M.exec[e])return!0;try{return r.getDoc().queryCommandSupported(e)}catch(t){}return!1}function w(e,t,n){e=e.toLowerCase(),M.state[e]=function(){return t.call(n||r)}}function E(e,t,n){e=e.toLowerCase(),M.value[e]=function(){return t.call(n||r)}}function N(e){return e=e.toLowerCase(),!!M.exec[e]}function _(e,n,i){return n===t&&(n=m),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function S(e){return D.match(e)}function k(e,n){D.toggle(e,n?{value:n}:t),r.nodeChanged()}function T(e){P=B.getBookmark(e)}function R(){B.moveToBookmark(P)}var A,B,D,M={state:{},exec:{},value:{}},L=r.settings,P;r.on(
 "PreInit",function(){A=r.dom,B=r.selection,L=r.settings,D=r.formatter}),l(this,{execCommand:g,queryCommandState:v,queryCommandValue:y,queryCommandSupported:x,addCommands:b,addCommand:C,addQueryStateHandler:w,addQueryValueHandler:E,hasCustomCommand:N}),b({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{_(e)}catch(o){i=p}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.notificationManager.open({text:a,type:"error"})}},unlink:function(){if(B.isCollapsed()){var e=B.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}D.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,Just
 ifyNone":function(e){var t=e.substring(7);"full"==t&&(t="justify"),s("left,center,right,justify".split(","),function(e){t!=e&&D.remove("align"+e)}),"none"!=t&&k("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;_(e),t=A.getParent(B.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(T(),A.split(n,t),R()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){k(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){k(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=d(L.font_size_style_values),r=d(L.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),k(e,n)},RemoveFormat:function(e){D.remove(e)},mceBlockQuote:function(){k("blockquote")},FormatBlock:function(e,t,n){return k(n||"p")},mceCleanup:function(){var e=B.getBookmark()
 ;r.setContent(r.getContent({cleanup:p}),{cleanup:p}),B.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||B.getNode();i!=r.getBody()&&(T(),r.dom.remove(i,p),R())},mceSelectNodeDepth:function(e,t,n){var i=0;A.getParent(B.getNode(),function(e){return 1==e.nodeType&&i++==n?(B.select(e),m):void 0},r.getBody())},mceSelectNode:function(e,t,n){B.select(n)},mceInsertContent:function(t,n,o){function a(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=B.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^&nbsp;/," "):t("previousSibling")||(e=e.replace(/^ /,"&nbsp;")),i<r.length?e=e.replace(/&nbsp;(<br>|)$/," "):t("nextSibling")||(e=e.replace(/(&nbsp;| )(<br>|)$/,"&nbsp;"))),e}function l(){var e,t,n;e=B.getRng(!0),t=e.startContainer,n=e.startOffset,3==t.nodeType&&e.collapsed&&("\xa0"===t.da
 ta[n]?(t.deleteData(n,1),/[\u00a0| ]$/.test(o)||(o+=" ")):"\xa0"===t.data[n-1]&&(t.deleteData(n-1,1),/[\u00a0| ]$/.test(o)||(o=" "+o)))}function c(e){if(N)for(x=e.firstChild;x;x=x.walk(!0))S[x.name]&&x.attr("data-mce-new","true")}function u(){if(N){var e=r.getBody(),t=new i(A);s(A.select("*[data-mce-new]"),function(n){n.removeAttribute("data-mce-new");for(var r=n.parentNode;r&&r!=e;r=r.parentNode)t.compare(r,n)&&A.remove(n,!0)})}}function d(e){function t(e){for(var t=r.getBody();e&&e!==t;e=e.parentNode)if("false"===r.dom.getContentEditable(e))return e;return null}var n;if(e){if(B.scrollIntoView(e),n=t(e))return A.remove(e),void B.select(n);C=A.createRng(),x=e.previousSibling,x&&3==x.nodeType?(C.setStart(x,x.nodeValue.length),f||(w=e.nextSibling,w&&3==w.nodeType&&(x.appendData(w.data),w.parentNode.removeChild(w)))):(C.setStartBefore(e),C.setE
 ndBefore(e)),A.remove(e),B.setRng(C)}}var h,p,m,g,v,y,b,C,x,w,E,N,_,S=r.schema.getTextInlineElements();"string"!=typeof o&&(N=o.merge,_=o.data,o=o.content),/^ | $/.test(o)&&(o=a(o)),h=r.parser,p=new e({validate:L.validate},r.schema),E='<span id="mce_marker" data-mce-type="bookmark">&#xFEFF;&#x200B;</span>',y={content:o,format:"html",selection:!0},r.fire("BeforeSetContent",y),o=y.content,-1==o.indexOf("{$caret}")&&(o+="{$caret}"),o=o.replace(/\{\$caret\}/,E),C=B.getRng();var k=C.startContainer||(C.parentElement?C.parentElement():null),T=r.getBody();k===T&&B.isCollapsed()&&A.isBlock(T.firstChild)&&A.isEmpty(T.firstChild)&&(C=A.createRng(),C.setStart(T.firstChild,0),C.setEnd(T.firstChild,0),B.setRng(C)),B.isCollapsed()||(r.selection.setRng(r.selection.getRng()),r.getDoc().execCommand("Delete",!1,null),l()),m=B.getNode();var R={conte
 xt:m.nodeName.toLowerCase(),data:_};if(v=h.parse(o,R),c(v),x=v.lastChild,"mce_marker"==x.attr("id"))for(b=x,x=x.prev;x;x=x.walk(!0))if(3==x.type||!A.isBlock(x.name)){r.schema.isValidChild(x.parent.name,"span")&&x.parent.insert(b,x,"br"===x.name);break}if(r._selectionOverrides.showBlockCaretContainer(m),R.invalid){for(B.setContent(E),m=B.getNode(),g=r.getBody(),9==m.nodeType?m=x=g:x=m;x!==g;)m=x,x=x.parentNode;o=m==g?g.innerHTML:A.getOuterHTML(m),o=p.serialize(h.parse(o.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return p.serialize(v)}))),m==g?A.setHTML(g,o):A.setOuterHTML(m,o)}else o=p.serialize(v),x=m.firstChild,w=m.lastChild,!x||x===w&&"BR"===x.nodeName?A.setHTML(m,o):B.setContent(o);u(),d(A.get("mce_marker")),r.fire("SetContent",y),r.addVisual()},mceInsertRawHTML:function(e,t,n){B.setContent("tiny_mce_marker"),r.setContent(r.getContent().re
 place(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){k(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,i;t=L.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),v("InsertUnorderedList")||v("InsertOrderedList")?_(e):(L.forced_root_block||A.getParent(B.getNode(),A.isBlock)||D.apply("div"),s(B.getSelectedBlocks(),function(o){if("false"!==A.getContentEditable(o)&&"LI"!=o.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==A.getStyle(o,"direction",!0)?"Right":"Left","outdent"==e?(i=Math.max(0,parseInt(o.style[a]||0,10)-t),A.setStyle(o,a,i?i+n:"")):(i=parseInt(o.style[a]||0,10)+t+n,A.setStyle(o,a,i))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"<hr />")},mceToggl
 eVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,B.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=A.getParent(B.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||D.remove("link"),n.href&&D.apply("link",n,r)},selectAll:function(){var e=A.getRoot(),t;B.getRng().setStart?(t=A.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),B.setRng(t)):(t=B.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){_("Delete");var e=r.getBody();A.isEmpty(e)&&(r.setContent(""),e.firstChild&&A.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")},InsertL
 ineBreak:function(e,t,n){function i(){for(var e=new a(m,v),t,n=r.schema.getNonEmptyElements();t=e.next();)if(n[t.nodeName.toLowerCase()]||t.length>0)return!0}var s=n,l,c,u,d=B.getRng(!0);new o(A).normalize(d);var f=d.startOffset,m=d.startContainer;if(1==m.nodeType&&m.hasChildNodes()){var g=f>m.childNodes.length-1;m=m.childNodes[Math.min(f,m.childNodes.length-1)]||m,f=g&&3==m.nodeType?m.nodeValue.length:0}var v=A.getParent(m,A.isBlock),y=v?v.nodeName.toUpperCase():"",b=v?A.getParent(v.parentNode,A.isBlock):null,C=b?b.nodeName.toUpperCase():"",x=s&&s.ctrlKey;"LI"!=C||x||(v=b,y=C),m&&3==m.nodeType&&f>=m.nodeValue.length&&(h||i()||(l=A.create("br"),d.insertNode(l),d.setStartAfter(l),d.setEndAfter(l),c=!0)),l=A.create("br"),d.insertNode(l);var w=A.doc.documentMode;return h&&"PRE"==y&&(!w||8>w)&&l.parentNode.insertBefore(A.doc.createTextNode(&quot
 ;\r"),l),u=A.create("span",{},"&nbsp;"),l.parentNode.insertBefore(u,l),B.scrollIntoView(u),A.remove(u),c?(d.setStartBefore(l),d.setEndBefore(l)):(d.setStartAfter(l),d.setEndAfter(l)),B.setRng(d),r.undoManager.add(),p}}),b({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=B.isCollapsed()?[A.getParent(B.getNode(),A.isBlock)]:B.getSelectedBlocks(),r=c(n,function(e){return!!D.matchNode(e,t)});return-1!==u(r,p)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return S(e)},mceBlockQuote:function(){return S("blockquote")},Outdent:function(){var e;if(L.inline_styles){if((e=A.getParent(B.getStart(),A.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return p;if((e=A.getParent(B.getEnd(),A.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return p}return v("InsertUnorderedList")||v("InsertOrderedList")||!L.inline_styles&a
 mp;&!!A.getParent(B.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=A.getParent(B.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),b({"FontSize,FontName":function(e){var t=0,n;return(n=A.getParent(B.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),b({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(te,[m],function(e){function t(e,o){var a=this,s,l;if(e=r(e),
+o=a.settings=o||{},s=o.base_uri,/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(a.source=e);var c=0===e.indexOf("//");0!==e.indexOf("/")||c||(e=(s?s.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(l=o.base_uri?o.base_uri.path:new t(location.href).directory,""===o.base_uri.protocol?e="//mce_host"+a.toAbsPath(l,e):(e=/([^#?]*)([#?]?.*)/.exec(e),e=(s&&s.protocol||"http")+"://mce_host"+a.toAbsPath(l,e[1])+e[2])),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(i,function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),a[t]=r}),s&&(a.protocol||(a.protocol=s.protocol),a.userInfo||(a.userInfo=s.userInfo),a.port||"mce_host"!=
 =a.host||(a.port=s.port),a.host&&"mce_host"!==a.host||(a.host=s.host),a.source=""),c&&(a.protocol="")}var n=e.each,r=e.trim,i="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),o={ftp:21,http:80,https:443,mailto:25};return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},t
 oAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(n&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=o[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.length<n.length)for(o=0,a=n.length;a>o;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=
 0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t.parseDataUri=function(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}},t}),r(ne,[m],function(e){function t(){}var n=e.each,r=e.ex
 tend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],"function"==typeof f&&c[d]?u[d]=s(d,f):u
 [d]=f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(re,[m],function(e){function t(t){function n(){return!1}function r(){return!0}function i(e,i){var o,s,l,c;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=u),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=r},i.stopPropagation=function(){i.isPropagationStopped=r},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=r},i.isDefaultPrevented=n,i.isPropagationStopped=n,i.isImmediatePropagationStopped=n),t.beforeFire&&t.beforeFire(i),o=d[e])for(s=0,l=o.length;l>s;s++){if(c=o[s],c.once&&a(e,c.func),i.isImmediatePropagationStopped())return i.stopPropagation(),i;if(c.func.call(u,i)===!1)return i.preventDefault(),i}return i}function o(t,r,i,o){var a,s,l;if(r===!1&&(r=n),r)for(r={func:r},o&&e.extend(r,o),s=t.toLowerCase().split(" "),l=s.length;l--;)t=s[l],a=d[t],a||(a=d[t]=[],f(t,!0)),i?a.unshift(r):a.push(r);return c}function a(e,t){var n,r,
 i,o,a;if(e)for(o=e.toLowerCase().split(" "),n=o.length;n--;){if(e=o[n],r=d[e],!e){for(i in d)f(i,!1),delete d[i];return c}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),d[e]=r);else r.length=0;r.length||(f(e,!1),delete d[e])}}else{for(e in d)f(e,!1);d={}}return c}function s(e,t,n){return o(e,t,n,{once:!0})}function l(e){return e=e.toLowerCase(),!(!d[e]||0===d[e].length)}var c=this,u,d={},f;t=t||{},u=t.scope||c,f=t.toggleEvent||n,c.fire=i,c.on=o,c.off=a,c.once=s,c.has=l}var n=e.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchend"," ");return t.isNative=function(e){return!!n[e.toLowerCase()]},t}),r(ie,[],function(){function
  e(e){this.create=e.create}return e.create=function(t,n){return new e({create:function(e,r){function i(t){e.set(r,t.value)}function o(e){t.set(n,e.value)}var a;return e.on("change:"+r,o),t.on("change:"+n,i),a=e._bindings,a||(a=e._bindings=[],e.on("destroy",function(){for(var e=a.length;e--;)a[e]()})),a.push(function(){t.off("change:"+n,i)}),t.get(n)}})},e}),r(oe,[re],function(e){function t(t){return t._eventDispatcher||(t._eventDispatcher=new e({scope:t,toggleEvent:function(n,r){e.isNative(n)&&t.toggleNativeEvent&&t.toggleNativeEvent(n,r)}})),t._eventDispatcher}return{fire:function(e,n,r){var i=this;if(i.removed&&"remove"!==e)return n;if(n=t(i).fire(e,n,r),r!==!1&&i.parent)for(var o=i.parent();o&&!n.isPropagationStopped();)o.fire(e,n,!1),o=o.parent();return n},on:function(e,n,r){return t(this).on(e,n,r)},off:function(e,n){return t(this).off(e,n)},once:function(e,n){return t(this).once(e,n)},has
 EventListeners:function(e){return t(this).has(e)}}}),r(ae,[ie,oe,ne,m],function(e,t,n,r){function i(e){return e.nodeType>0}function o(e,t){var n,a;if(e===t)return!0;if(null===e||null===t)return e===t;if("object"!=typeof e||"object"!=typeof t)return e===t;if(r.isArray(t)){if(e.length!==t.length)return!1;for(n=e.length;n--;)if(!o(e[n],t[n]))return!1}if(i(e)||i(t))return e===t;a={};for(n in t){if(!o(e[n],t[n]))return!1;a[n]=!0}for(n in e)if(!a[n]&&!o(e[n],t[n]))return!1;return!0}return n.extend({Mixins:[t],init:function(t){var n,r;t=t||{};for(n in t)r=t[n],r instanceof e&&(t[n]=r.create(this,n));this.data=t},set:function(t,n){var r,i,a=this.data[t];if(n instanceof e&&(n=n.create(this,t)),"object"==typeof t){for(r in t)this.set(r,t[r]);return this}return o(a,n)||(this.data[t]=n,i={target:this,name:t,value:n,oldValue:a},this.fire("change:"+t,i),this.fire("change",i)),this},get:function(e){return this.data[e]},ha
 s:function(e){return e in this.data},bind:function(t){return e.create(this,t)},destroy:function(){this.fire("destroy")}})}),r(se,[ne],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.classes.contains(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?
 "="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.pseudo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a<n.length;a++)">"!=n[a]&&e.push(c(n[a],[],"&g
 t;"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,h,p;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,p=e,h=0,i=o-1;i>=0;i--)for(c=a[i];p;){if(c.pseudo)for(f=p.parent().items(),u=d=f.length;u--&&f[u]!==p;);for(s=0,l=c.length;l>s;s++)if(!c[s](p,u,d)){s=l+1;break}if(s===l){h++;break}if(i===o-1)break;p=p.parent()}if(h===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(le,[m,se,ne],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;retur
 n i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].classes.contains(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&am
 p;i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this},addClass:function(e){return this.each(function(t){t.classes.add(e)})},removeClass:function(e){return this.each(function(t){t.classes.remove(e)})}},e.each("fire on off show hide append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(ce,[m,w],function(e,t){var n=0;return{id:function(){return"mceu_"+n++},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(
 e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},getRuntimeStyle:function(e,n){return t.DOM.getStyle(e,n,!0)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(ue,[],function(){return{parseBox:function(e){var t,n=10;if(e)return"number&qu
 ot;==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}}}}),r(de,[m],function(e){function t(){}function n(e){this.cls=[],this.cls._map={},this.onchange=e||t,this.prefix=""}return e.extend(n.prototype,{add:function(e){return e&&!this.contains(e)&&(this.cls._map[e]=!0,this.cls.push(e),this._change()),this},remove:function(e){if(this.contains(e)){for
 (var t=0;t<this.cls.length&&this.cls[t]!==e;t++);this.cls.splice(t,1),delete this.cls._map[e],this._change()}return this},toggle:function(e,t){var n=this.contains(e);return n!==t&&(n?this.remove(e):this.add(e),this._change()),this},contains:function(e){return!!this.cls._map[e]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),n.prototype.toString=function(){var e;if(this.clsValue)return this.clsValue;e="";for(var t=0;t<this.cls.length;t++)t>0&&(e+=" "),e+=this.prefix+this.cls[t];return e},n}),r(fe,[u],function(e){var t={},n;return{add:function(r){var i=r.parent();if(i){if(!i._layout||i._layout.isNative())return;t[i._id]||(t[i._id]=i),n||(n=!0,e.requestAnimationFrame(function(){var e,r;n=!1;for(e in t)r=t[e],r.state.get("rendered")&&r.reflow();t={}},document.body))}},remove:function(e){t[e._id]&&delete t[e._id]}}}),r(he,[ne,m,re,ae,le,ce,g,ue,de,fe],function(e,t,n,r,i,o,a,s,l,c){function
  u(e){return e._eventDispatcher||(e._eventDispatcher=new n({scope:e,toggleEvent:function(t,r){r&&n.isNative(t)&&(e._nativeEvents||(e._nativeEvents={}),e._nativeEvents[t]=!0,e.state.get("rendered")&&d(e))}})),e._eventDispatcher}function d(e){function t(t){var n=e.getParentCtrl(t.target);n&&n.fire(t.type,t)}function n(){var e=c._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),c._lastHoverCtrl=null)}function r(t){var n=e.getParentCtrl(t.target),r=c._lastHoverCtrl,i=0,o,a,s;if(n!==r){if(c._lastHoverCtrl=n,a=n.parents().toArray().reverse(),a.push(n),r){for(s=r.parents().toArray().reverse(),s.push(r),i=0;i<s.length&&a[i]===s[i];i++);for(o=s.length-1;o>=i;o--)r=s[o],r.fire("mouseleave",{target:r.getEl()})}for(o=i;o<a.length;o++)n=a[o],n.fire("mouseenter",{target:n.getEl()})}}function i(t){t.preventDefault
 (),"mousewheel"==t.type?(t.deltaY=-1/40*t.wheelDelta,t.wheelDeltaX&&(t.deltaX=-1/40*t.wheelDeltaX)):(t.deltaX=0,t.deltaY=t.detail),t=e.fire("wheel",t)}var o,s,l,c,u,d;if(u=e._nativeEvents){for(l=e.parents().toArray(),l.unshift(e),o=0,s=l.length;!c&&s>o;o++)c=l[o]._eventsRoot;for(c||(c=l[l.length-1]||e),e._eventsRoot=c,s=o,o=0;s>o;o++)l[o]._eventsRoot=c;var p=c._delegates;p||(p=c._delegates={});for(d in u){if(!u)return!1;"wheel"!==d||h?("mouseenter"===d||"mouseleave"===d?c._hasMouseEnter||(a(c.getEl()).on("mouseleave",n).on("mouseover",r),c._hasMouseEnter=1):p[d]||(a(c.getEl()).on(d,t),p[d]=!0),u[d]=!1):f?a(e.getEl()).on("mousewheel",i):a(e.getEl()).on("DOMMouseScroll",i)}}}var f="onmousewheel"in document,h=!1,p="mce-",m,g=0,v={Statics:{classPrefix:p},isRtl:function(){return m.rtl},classPrefix:p,init:function(e){function n(e){var t;for(e=e.split(" &
 quot;),t=0;t<e.length;t++)i.classes.add(e[t])}var i=this,o,c;i.settings=e=t.extend({},i.Defaults,e),i._id=e.id||"mceu_"+g++,i._aria={role:e.role},i._elmCache={},i.$=a,i.state=new r({visible:!0,active:!1,disabled:!1,value:""}),i.data=new r(e.data),i.classes=new l(function(){i.state.get("rendered")&&(i.getEl().className=this.toString())}),i.classes.prefix=i.classPrefix,o=e.classes,o&&(i.Defaults&&(c=i.Defaults.classes,c&&o!=c&&n(c)),n(o)),t.each("title text name visible disabled active value".split(" "),function(t){t in e&&i[t](e[t])}),i.on("click",function(){return i.disabled()?!1:void 0}),i.settings=e,i.borderBox=s.parseBox(e.border),i.paddingBox=s.parseBox(e.padding),i.marginBox=s.parseBox(e.margin),e.hidden&&i.hide()},Properties:"parent,name",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLo
 okup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},initLayoutRect:function(){var e=this,t=e.settings,n,r,i=e.getEl(),a,l,c,u,d,f,h,p;n=e.borderBox=e.borderBox||s.measureBox(i,"border"),e.paddingBox=e.paddingBox||s.measureBox(i,"padding"),e.marginBox=e.marginBox||s.measureBox(i,"margin"),p=o.getSize(i),f=t.minWidth,h=t.minHeight,c=f||p.width,u=h||p.height,a=t.width,l=t.height,d=t.autoResize,d="undefined"!=typeof d?d:!a&&!l,a=a||c,l=l||u;var m=n.left+n.right,g=n.top+n.bottom,v=t.maxWidth||65535,y=t.maxHeight||65535;return e._layoutRect=r={x:t.x||0,y:t.y||0,w:a,h:l,deltaW:m,deltaH:g,contentW:a-m,contentH:l-g,innerW:a-m,innerH:l-g,startMinWidth:f||0,startMinHeight:h||0,minW:Math.min(c,v),minH:Math.min(u,y),maxW:v,maxH:y,autoResize:d,scrollW:0},e._lastLayoutRect={},r},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,l;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&
 amp;(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=i<n.minW?n.minW:i,i=i>n.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=i<n.minH?n.minH:i,i=i>n.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=i<n.minW-o?n.minW-o:i,i=i>n.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=i<n.minH-a?n.minH-a:i,i=i>n.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(l=m.repaintControls,l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o,a,s,l,c,u;c=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,i=e._layoutRect,l=e._lastRepaintRect||{},o=e.borderBox,a=o.left+o.right,s=o.top+o.bottom,i.x!==l.x&amp
 ;&(t.left=c(i.x)+"px",l.x=i.x),i.y!==l.y&&(t.top=c(i.y)+"px",l.y=i.y),i.w!==l.w&&(u=c(i.w-a),t.width=(u>=0?u:0)+"px",l.w=i.w),i.h!==l.h&&(u=c(i.h-s),t.height=(u>=0?u:0)+"px",l.h=i.h),e._hasBody&&i.innerW!==l.innerW&&(u=c(i.innerW),r=e.getEl("body"),r&&(n=r.style,n.width=(u>=0?u:0)+"px"),l.innerW=i.innerW),e._hasBody&&i.innerH!==l.innerH&&(u=c(i.innerH),r=r||e.getEl("body"),r&&(n=n||r.style,n.height=(u>=0?u:0)+"px"),l.innerH=i.innerH),e._lastRepaintRect=l,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return"string"!=typeof e?e:function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t?t.call(n,i):(i.action=e,void this.fire("execute",i))}}var r=this;return u(r).on(e,n(t)),r},off:function(e,t){return u
 (this).off(e,t),this},fire:function(e,t,n){var r=this;if(t=t||{},t.control||(t.control=r),t=u(r).fire(e,t),n!==!1&&r.parent)for(var i=r.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return u(this).has(e)},parents:function(e){var t=this,n,r=new i;for(n=t.parent();n;n=n.parent())r.add(n);return e&&(r=r.filter(e)),r},parentsAndSelf:function(e){return new i(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=a("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().
 blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return m.translate?m.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),r,i;if(e.items){var o=e.items().toArray();for(i=o.length;i--;)o[i].remove()}n&&n.items&&(r=[],n.items().each(function(t){t!==e&&r.push(t)}),n.items().set(r),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&a(t).off();var s
 =e.getRoot().controlIdLookup;return s&&delete s[e._id],t&&t.parentNode&&t.parentNode.removeChild(t),e.state.set("rendered",!1),e.state.destroy(),e.fire("remove"),e},renderBefore:function(e){return a(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return a(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var e=this,t=e.settings,n,r,i,o,s;e.$el=a(e.getEl()),e.state.set("rendered",!0);for(o in t)0===o.indexOf("on")&&e.on(o.substr(2),t[o]);if(e._eventsRoot){for(i=e.parent();!s&&i;i=i.parent())s=i._eventsRoot;if(s)for(o in s._nativeEvents)e._nativeEvents[o]=!0}d(e),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e.s
 ettings.border&&(r=e.borderBox,e.$el.css({"border-top-width":r.top,"border-right-width":r.right,"border-bottom-width":r.bottom,"border-left-width":r.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var u in e._aria)e.aria(u,e._aria[u]);e.state.get("visible")===!1&&(e.getEl().style.display="none"),e.bindStates(),e.state.on("change:visible",function(t){var n=t.value,r;e.state.get("rendered")&&(e.getEl().style.display=n===!1?"none":"",e.getEl().getBoundingClientRect()),r=e.parent(),r&&(r._lastRect=null),e.fire(n?"show":"hide"),c.add(e)}),e.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r
 =n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){c.remove(this);var e=this.parent();return e._layout&&!e._layout.isNative()&&e.reflow(),this}};return t.each("text title visible disabled active value".split(" "),function(e){v[e]=function(t){return 0===arguments.length?this.state.get(e):("undefined"!=typeof t&&this.state.set(e,t),this)}}),m=e.extend(v)}),r(pe,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCas
 e()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(me,[],function(){return function(e){function t(e){return e&&1===e.nodeType}function n(e){return e=e||C,t(e)?e.getAttribute("role"):null}function r(e){for(var t,r=e||C;r=r.parentNode;)if(t=n(r))return t}function i(e){var n=C;return t(n)?n.getAttribute("aria-"+e):void 0}function o(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t}function a(e){return o(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(n(e))?!0:!1}function s(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){a(e)&&n.push(e);for(var r=0;r<e.childNodes.length;r++)t(e.childNodes[r])}}var n=[];return t(e||b.getEl()),n}function l(e){var t,n;e=e||x,n=e.parents().toArray(),n.
 unshift(e);for(var r=0;r<n.length&&(t=n[r],!t.settings.ariaRoot);r++);return t}function c(e){var t=l(e),n=s(t.getEl());t.settings.ariaRemember&&"lastAriaIndex"in t?u(t.lastAriaIndex,n):u(0,n)}function u(e,t){return 0>e?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function d(e,t){var n=-1,r=l();t=t||s(r.getEl());for(var i=0;i<t.length;i++)t[i]===C&&(n=i);n+=e,r.lastAriaIndex=u(n,t)}function f(){var e=r();"tablist"==e?d(-1,s(C.parentNode)):x.parent().submenu?v():d(-1)}function h(){var e=n(),t=r();"tablist"==t?d(1,s(C.parentNode)):"menuitem"==e&&"menu"==t&&i("haspopup")?y():d(1)}function p(){d(-1)}function m(){var e=n(),t=r();"menuitem"==e&&"menubar"==t?y():"button"==e&&i("haspopup")?y({key:"down"}):d(1)}function g(e){var t=r();if("tablist"==t){var n=s(x.getEl("body")
 )[0];n&&n.focus()}else d(e.shiftKey?-1:1)}function v(){x.fire("cancel")}function y(e){e=e||{},x.fire("click",{target:C,aria:e})}var b=e.root,C,x;try{C=document.activeElement}catch(w){C=document.body}return x=b.getParentCtrl(C),b.on("keydown",function(e){function t(e,t){o(C)||t(e)!==!1&&e.preventDefault()}if(!e.isDefaultPrevented())switch(e.keyCode){case 37:t(e,f);break;case 39:t(e,h);break;case 38:t(e,p);break;case 40:t(e,m);break;case 27:v();break;case 14:case 13:case 32:t(e,y);break;case 9:g(e)!==!1&&e.preventDefault()}}),b.on("focusin",function(e){C=e.target,x=e.control}),{focusFirst:c}}}),r(ge,[he,le,se,pe,me,m,g,de,fe],function(e,t,n,r,i,o,a,s,l){var c={};return e.extend({init:function(e){var n=this;n._super(e),e=n.settings,e.fixed&&n.state.set("fixed",!0),n._items=new t,n.isRtl()&&n.classes.add("rtl"),n.bodyClasses=new s(function(){n.state.get("rendered")&&(n.g
 etEl("body").className=this.toString())}),n.bodyClasses.prefix=n.classPrefix,n.classes.add("container"),n.bodyClasses.add("container-body"),e.containerCls&&n.classes.add(e.containerCls),n._layout=r.create((e.layout||"")+"layout"),n.settings.items?n.add(n.settings.items):n.add(n.render()),n._hasBody=!0},items:function(){return this._items},find:function(e){return e=c[e]=c[e]||new n(e),e.find(this)},add:function(e){var t=this;return t.items().add(t.create(e)).parent(t),t},focus:function(e){var t=this,n,r,i;return e&&(r=t.keyboardNav||t.parents().eq(-1)[0].keyboardNav)?void r.focusFirst(t):(i=t.find("*"),t.statusbar&&i.add(t.statusbar.items()),i.each(function(e){return e.settings.autofocus?(n=null,!1):void(e.canFocus&&(n=n||e))}),n&&n.focus(),t)},replace:function(e,t){for(var n,r=this.items(),i=r.length;i--;)if(r[i]===e){r[i]=t;break}i>=0&&(n=t.getEl(),n&&n.parentNode.
 removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r;t.parent(e),t.state.get("rendered")||(r=e.getEl("body"),r.hasChildNodes()&&n<=r.childNodes.length-1?a(r.childNodes[n]).before(t.renderHtml()):a(r).append(t.renderHtml()),t.postRender(),l.add(t))}),e._layout.applyClasses(e.items().filter(":visible")),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return 
 e=r.create(e),i=r.items(),!n&&t<i.length-1&&(t+=1),t>=0&&t<i.length&&(o=i.slice(0,t).toArray(),a=i.slice(t).toArray(),i.set(o.concat(e,a))),r.renderNew()},fromJSON:function(e){var t=this;for(var n in e)t.find("#"+n).value(e[n]);return t},toJSON:function(){var e=this,t={};return e.find("*").each(function(e){var n=e.name(),r=e.value();n&&"undefined"!=typeof r&&(t[n]=r)}),t},renderHtml:function(){var e=this,t=e._layout,n=this.settings.role;return e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"'+(n?' role="'+this.settings.role+'"':"")+'><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e.state.set("re
 ndered",!0),e.settings.style&&e.$el.css(e.settings.style),e.settings.border&&(t=e.borderBox,e.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(l.remove(this),this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(ve,[g],function(e){function t(e){var t,n,r,i,o,a,s,l,c=Math.
 max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}function n(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<t.length;n++)e[t[n]]=e.changedTouches[0][t[n]]}return function(r,i){function o(){return s.getElementById(i.handle||r)}var a,s=i.document||document,l,c,u,d,f,h;i=i||{},c=function(r){var c=t(s),p,m;n(r),r.preventDefault(),l=r.button,p=o(),f=r.screenX,h=r.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,a=e("<div>").css({position:"absolute",top:0,left:0,width:c.width,height:c.height,zIndex:2147483647,opacity:1e-4,cursor:m}).appendTo(s.body),e(s).on("mousemove touchmove&quot
 ;,d).on("mouseup touchend",u),i.start(r)},d=function(e){return n(e),e.button!==l?u(e):(e.deltaX=e.screenX-f,e.deltaY=e.screenY-h,e.preventDefault(),void i.drag(e))},u=function(t){n(t),e(s).off("mousemove touchmove",d).off("mouseup touchend",u),a.remove(),i.stop&&i.stop(t)},this.destroy=function(){e(o()).off()},e(o()).on("mousedown touchstart",c);
+}}),r(ye,[g,ve],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,h,p,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),e(i.getEl("absend")).css(y,i.layoutRect()[l]-1),!c)return void e(f).css("display","none");e(f).css("display","block"),d=i.getEl("body"),h=i.getEl("scroll"+t+"t"),p=d["client"+s]-2*o,p-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=p/m,v={},v[y]=d["offset"+a]+o,v[b]=p,e(f).css(v),v={},v[y]=d["scroll"+a]*g,v[b]=p*g,e(h).css(v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,
 "Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;e(i.getEl()).append('<div id="'+u+'" class="'+d+"scrollbar "+d+"scrollbar-"+n+'"><div id="'+u+'t" class="'+d+'scrollbar-thumb"></div></div>'),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e("#"+u).addClass(d+"active")},drag:function(e){var t,u,d,f,h=i.layoutRect();u=h.contentW>h.innerW,d=h.contentH>h.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e("#"+u).removeClass(d+"active")}})}i.classes.add("scroll"),n("v","Top","Height","
 Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e(i.getEl("body")).on("scroll",n)),n())}}}),r(be,[ge,ye],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div>":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1" role="group">'+(e._preBodyHtml||"&
 quot;)+n+"</div>"}})}),r(Ce,[ce],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,h;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t.state.get("fixed")&&"static"==e.getRuntimeStyle(document.body,"position")&&(a-=f.x,s-=f.y),i=t.getEl(),h=e.getSize(i),l=h.width,c=h.height,h=e.getSize(n),u=h.width,d=h.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o<r.length;o++){var a=t(this,n,r[o]);if(this.state.get("fixed")){if(a.x>0&&a.x+a.w<i.w&&a.y>0&&a.y+a.
 h<i.h)return r[o]}else if(a.x>i.x&&a.x+a.w<i.w+i.x&&a.y>i.y&&a.y+a.h<i.h+i.y)return r[o]}return r[0]},moveRel:function(e,n){"string"!=typeof n&&(n=this.testMoveRel(e,n));var r=t(this,e,n);return this.moveTo(r.x,r.y)},moveBy:function(e,t){var n=this,r=n.layoutRect();return n.moveTo(r.x+e,r.y+t),n},moveTo:function(t,n){function r(e,t,n){return 0>e?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i.state.get("rendered")?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(xe,[ce],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect(
 {minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(we,[be,Ce,xe,ce,g,u],function(e,t,n,r,i,o){function a(e,t){for(;e;){if(e==t)return!0;e=e.parent()}}function s(e){for(var t=v.length;t--;){var n=v[t],r=n.getParentCtrl(e.target);if(n.settings.autohide){if(r&&(a(r,n)||n.parent()===r))continue;e=n.fire("autohide",{target:e.target}),e.isDefaultPrevented()||n.hide()}}}function l(){p||(p=function(e){2!=e.button&&s(e)},i(document).on("click touchstart",p))}function c(){m||(m=function(){var e;for(e=v.length;e--;)d(v[e])},i(window).on("scroll",m))}function u(){if(!g){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;g=function(){document.all&&t==e.clientWidth&&n==e.clientHeight||(t=e.clientWidth,n=e.clientHeight,C.hideAll())},i(window).on("resize",g)}}function d(e){function t(t,n){for(var r,i=0;i<v.length;i++)if(v[i]!=e)for(r=v[i].pa
 rent();r&&(r=r.parent());)r==e&&v[i].fixed(t).moveBy(0,n).repaint()}var n=r.getViewPort().y;e.settings.autofix&&(e.state.get("fixed")?e._autoFixY>n&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY<n&&(e.fixed(!0).layoutRect({y:0}).repaint(),t(!0,n-e._autoFixY))))}function f(e,t){var n,r=C.zIndex||65535,o;if(e)y.push(t);else for(n=y.length;n--;)y[n]===t&&y.splice(n,1);if(y.length)for(n=0;n<y.length;n++)y[n].modal&&(r++,o=y[n]),y[n].getEl().style.zIndex=r,y[n].zIndex=r,r++;var a=document.getElementById(t.classPrefix+"modal-block");o?i(a).css("z-index",o.zIndex-1):a&&(a.parentNode.removeChild(a),b=!1),C.currentZIndex=r}function h(e){var t;for(t=v.length;t--;)v[t]===e&&v.splice(t,1);for(t=y.length;t--;)y[t]===e&&y.splice(t,1)}var p,m,g,v=[],y=[],b,C=e.extend({Mixins:[t,n],init:function(e){var t=this;t._su
 per(e),t._eventsRoot=t,t.classes.add("floatpanel"),e.autohide&&(l(),u(),v.push(t)),e.autofix&&(c(),t.on("move",function(){d(this)})),t.on("postrender show",function(e){if(e.control==t){var n,r=t.classPrefix;t.modal&&!b&&(n=i("#"+r+"modal-block"),n[0]||(n=i('<div id="'+r+'modal-block" class="'+r+"reset "+r+'fade"></div>').appendTo(t.getContainerElm())),o.setTimeout(function(){n.addClass(r+"in"),i(t.getEl()).addClass(r+"in")}),b=!0),f(!0,t)}}),t.on("show",function(){t.parents().each(function(e){return e.state.get("fixed")?(t.fixed(!0),!1):void 0})}),e.popover&&(t._preBodyHtml='<div class="'+t.classPrefix+'arrow"></div>',t.classes.add("popover").add("bottom").add(t.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t.state.get("fixed")!=e){
 if(t.state.get("rendered")){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e=this,t,n=e._super();for(t=v.length;t--&&v[t]!==e;);return-1===t&&v.push(e),n},hide:function(){return h(this),f(!1,this),this._super()},hideAll:function(){C.hideAll()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||(e.remove(),f(!1,e)),e},remove:function(){h(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return C.hideAll=function(){for(var e=v.length;e--;){var t=v[e];t&&t.settings.autohide&&(t.hide(),v.splice(e,1))}},C}),r(Ee,[we,be,ce,g,ve,ue,h,u],function(e,t,n,r,i,o,a,s){function l(e){var t="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-
 scale=1.0",n=r("meta[name=viewport]")[0],i;a.overrideViewPort!==!1&&(n||(n=document.createElement("meta"),n.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),i=n.getAttribute("content"),i&&"undefined"!=typeof f&&(f=i),n.setAttribute("content",e?t:f))}function c(e){for(var t=0;t<d.length;t++)if(d[t]._fullscreen)return;r([document.documentElement,document.body]).removeClass(e+"fullscreen")}function u(){function e(){var e,t=n.getWindowSize(),r;for(e=0;e<d.length;e++)r=d[e].layoutRect(),d[e].moveTo(d[e].settings.x||Math.max(0,t.w/2-r.w/2),d[e].settings.y||Math.max(0,t.h/2-r.h/2))}var t={w:window.innerWidth,h:window.innerHeight};s.setInterval(function(){var e=window.innerWidth,n=window.innerHeight;(t.w!=e||t.h!=n)&&(t={w:e,h:n},r(window).trigger("resize"))},100),r(window).on("resize",e)}var d=[],f=&
 quot;",h=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.classes.add("rtl"),n.classes.add("window"),n.bodyClasses.add("window-body"),n.state.set("fixed",!0),e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.classes.add("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria(&qu
 ot;label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=e.settings.x||Math.max(0,a.w/2-t.w/2),t.y=e.settings.y||Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._i
 d,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='<div id="'+n+'-head" class="'+r+'window-head"><div id="'+n+'-title" class="'+r+'title">'+e.encode(i.title)+'</div><button type="button" class="'+r+'close" aria-hidden="true">\xd7</button><div id="'+n+'-dragh" class="'+r+'dragh"></div></div>'),i.url&&(s='<iframe src="'+i.url+'" tabindex="-1"></iframe>'),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'<div id="'+n+'" class="'+e.classes+'" hidefocus="1"><div class="'+e.classPrefix+'reset" role="application">'+o+'<div id="'+n+'-body" class="'+e.bodyClasses+'">'+s+"</div>"+
 a+"</div></div>"},fullscreen:function(e){var t=this,i=document.documentElement,a,l=t.classPrefix,c;if(e!=t._fullscreen)if(r(window).on("resize",function(){var e;if(t._fullscreen)if(a)t._timer||(t._timer=s.setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(a=!0)}}),c=t.layoutRect(),t._fullscreen=e,e){t._initial={x:c.x,y:c.y,w:c.w,h:c.h},t.borderBox=o.parseBox("0"),t.getEl("head").style.display="none",c.deltaH-=c.headerH+2,r([i,document.body]).addClass(l+"fullscreen"),t.classes.add("fullscreen");var u=n.getWindowSize();t.moveTo(0,0).resizeTo(u.w,u.h)}else t.borderBox=o.parseBox(t.settings.border),t.getEl("head").style.display="",c.deltaH+=c.headerH,r([i,document.body]).removeClass(l+"fullscreen"),t.classes.remo
 ve("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.classes.add("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()}),d.push(e),l(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t;for(e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),t=d.length;t--;)d[t]===e&&d.splice(t,1);l(d.length>0),c(e.classPrefix)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return a.desktop||u(),h}),r(Ne,[Ee],function(e){var t=e.extend({init:f
 unction(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){function r(e,t,n){return{type:"button",text:e,subtype:n?"primary":"",onClick:function(e){e.control.parents()[1].close(),o(t)}}}var i,o=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:i=[r("Ok",!0,!0),r("Cancel",!1)];break;case t.YES_NO:case t.YES_NO_CANCEL:i=[r("Yes",1,!0),r("No",0)],n.buttons==t.YES_NO_CANCEL&&i.push(r("Cancel",-1));break;default:i=[r("Ok",!0,!0)]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center&qu
 ot;,buttons:i,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){o(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(_e,[Ee,Ne],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,n.on("remove",function(){for(var e=o.length;e--;)o[e].close()}),i.open=function(t,r){var i;return n.editorManager.setActive(n),t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.
 bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);o.length||n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},1===o.length&&n.nodeChanged(),i.renderTo().reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)},i.getWindows=function(){return o}}}),r(Se,[he,Ce],function(e,t){return e.extend({M
 ixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'" role="presentation"><div class="'+t+'tooltip-arrow"></div><div class="'+t+'tooltip-inner">'+e.encode(e.state.get("text"))+"</div></div>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(ke,[he,Se],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),
 ["bc-tc","bc-tl","bc-tr"]);r.classes.toggle("tooltip-n","bc-tc"==i),r.classes.toggle("tooltip-nw","bc-tl"==i),r.classes.toggle("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){function e(e){n.aria("disabled",e),n.classes.toggle("disabled",e)}function t(e){n.aria("pressed",e),n.classes.toggle("active",e)}var n=this;return n.state.on("change:disabled",function(t){e(t.value)}),n.state.on("change:active",function(e){t(e.value)}),n.state.
 get("disabled")&&e(!0),n.state.get("active")&&t(!0),n._super()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(Te,[ke],function(e){return e.extend({Defaults:{value:0},init:function(e){var t=this;t._super(e),t.classes.add("progress"),t.settings.filter||(t.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this,t=e._id,n=this.classPrefix;return'<div id="'+t+'" class="'+e.classes+'"><div class="'+n+'bar-container"><div class="'+n+'bar"></div></div><div class="'+n+'text">0%</div></div>'},postRender:function(){var e=this;return e._super(),e.value(e.settings.value),e},bindStates:function(){function e(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}var t=this;return t.state.on("change:value",func
 tion(t){e(t.value)}),e(t.state.get("value")),t._super()}})}),r(Re,[he,Ce,Te],function(e,t,n){return e.extend({Mixins:[t],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||e.timeout>0)&&!e.closeButton?t.closeButton=!1:(t.classes.add("has-close"),t.closeButton=!0),e.progressBar&&(t.progressBar=new n),t.on("click",function(e){-1!=e.target.className.indexOf(t.classPrefix+"close")&&t.close()})},renderHtml:function(){var e=this,t=e.classPrefix,n="",r="",i="",o="";return e.icon&&(n='<i class="'+t+"ico "+t+"i-"+e.icon+'"></i>'),e.color&&(o=' style="background-color: '+e.color+'"'),e.c
 loseButton&&(r='<button type="button" class="'+t+'close" aria-hidden="true">\xd7</button>'),e.progressBar&&(i=e.progressBar.renderHtml()),'<div id="'+e._id+'" class="'+e.classes+'"'+o+' role="presentation">'+n+'<div class="'+t+'notification-inner">'+e.state.get("text")+"</div>"+i+r+"</div>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().childNodes[1].innerHTML=t.value}),e.progressBar&&e.progressBar.bindStates(),e._super()},close:function(){var e=this;return e.fire("close").isDefaultPrevented()||e.remove(),e},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(Ae,[Re,u],function(e,t){return function(n){function r(){return l.length?l[l.length-1]:void 0}function i(){t.requestAnima
 tionFrame(function(){o(),a()})}function o(){for(var e=0;e<l.length;e++)l[e].moveTo(0,0)}function a(){if(l.length>0){var e=l.slice(0,1)[0],t=n.inline?n.getElement():n.getContentAreaContainer();if(e.moveRel(t,"tc-tc"),l.length>1)for(var r=1;r<l.length;r++)l[r].moveRel(l[r-1].getEl(),"bc-tc")}}var s=this,l=[];s.notifications=l,n.on("remove",function(){for(var e=l.length;e--;)l[e].close()}),n.on("ResizeEditor",a),n.on("ResizeWindow",i),s.open=function(t){var r;return n.editorManager.setActive(n),r=new e(t),l.push(r),t.timeout>0&&(r.timer=setTimeout(function(){r.close()},t.timeout)),r.on("close",function(){var e=l.length;for(r.timer&&n.getWin().clearTimeout(r.timer);e--;)l[e]===r&&l.splice(e,1);a()}),r.renderTo(),a(),r},s.close=function(){r()&&r().close()},s.getNotifications=function(){return l}}}),r(Be,[w],function(e){function t(t,n,r){for(var i=[];n&&n!=t;n=n.parentNode)i.
 push(e.nodeIndex(n,r));return i}function n(e,t){var n,r,i;for(r=e,n=t.length-1;n>=0;n--){if(i=r.childNodes,t[n]>i.length-1)return null;r=i[t[n]]}return r}return{create:t,resolve:n}}),r(De,[I,T,y,Be,A,C,h,m,u,k],function(e,t,n,r,i,o,a,s,l,c){return function(u){function d(e,t){try{u.getDoc().execCommand(e,!1,t)}catch(n){}}function f(){var e=u.getDoc().documentMode;return e?e:6}function h(e){return e.isDefaultPrevented()}function p(e){var t,n;e.dataTransfer&&(u.selection.isCollapsed()&&"IMG"==e.target.tagName&&Q.select(e.target),t=u.selection.getContent(),t.length>0&&(n=oe+escape(u.id)+","+escape(t),e.dataTransfer.setData(ae,n)))}function m(e){var t;return e.dataTransfer&&(t=e.dataTransfer.getData(ae),t&&t.indexOf(oe)>=0)?(t=t.substr(oe.length).split(","),{id:unescape(t[0]),html:unescape(t[1])}):null}function g(e){u.queryCommandSupported("mceInsertClipboardContent")?u.execCommand("m
 ceInsertClipboardContent",!1,{content:e}):u.execCommand("mceInsertContent",!1,e)}function v(){function i(e){var t=C.schema.getBlockElements(),n=u.getBody();if("BR"!=e.nodeName)return!1;for(e=e;e!=n&&!t[e.nodeName];e=e.parentNode)if(e.nextSibling)return!1;return!0}function o(e,t){var n;for(n=e.nextSibling;n&&n!=t;n=n.nextSibling)if((3!=n.nodeType||0!==X.trim(n.data).length)&&n!==t)return!1;return n===t}function a(e,t,r){var o,a,s;for(s=C.schema.getNonEmptyElements(),o=new n(r||e,e);a=o[t?"next":"prev"]();){if(s[a.nodeName]&&!i(a))return a;if(3==a.nodeType&&a.data.length>0)return a}}function c(e){var n,r,i,o,s;if(!e.collapsed&&(n=C.getParent(t.getNode(e.startContainer,e.startOffset),C.isBlock),r=C.getParent(t.getNode(e.endContainer,e.endOffset),C.isBlock),s=u.schema.getTextBlockElements(),n!=r&&s[n.nodeName]&&s[r.nodeName]&&"false"!==C.getContentEditable(n)
 &&"false"!==C.getContentEditable(r)))return e.deleteContents(),i=a(n,!1),o=a(r,!0),C.isEmpty(r)||X(n).append(r.childNodes),X(r).remove(),i?1==i.nodeType?"BR"==i.nodeName?(e.setStartBefore(i),e.setEndBefore(i)):(e.setStartAfter(i),e.setEndAfter(i)):(e.setStart(i,i.data.length),e.setEnd(i,i.data.length)):o&&(1==o.nodeType?(e.setStartBefore(o),e.setEndBefore(o)):(e.setStart(o,0),e.setEnd(o,0))),x.setRng(e),!0}function d(e,n){var r,i,s,l,c,d;if(!e.collapsed)return e;if(c=e.startContainer,d=e.startOffset,3==c.nodeType)if(n){if(d<c.data.length)return e}else if(d>0)return e;if(r=t.getNode(e.startContainer,e.startOffset),s=C.getParent(r,C.isBlock),i=a(u.getBody(),n,r),l=C.getParent(i,C.isBlock),!r||!i)return e;if(l&&s!=l)if(n){if(!o(s,l))return e;1==r.nodeType?"BR"==r.nodeName?e.setStartBefore(r):e.setStartAfter(r):e.setStart(r,r.data.length),1==i.nodeType?e.setEnd(i,0):e.setEndBefore(i)}else{if(!o(l,s))return e;1==i.nodeType?&quot
 ;BR"==i.nodeName?e.setStartBefore(i):e.setStartAfter(i):e.setStart(i,i.data.length),1==r.nodeType?e.setEnd(r,0):e.setEndBefore(r)}return e}function f(e){var t=x.getRng();return t=d(t,e),c(t)?!0:void 0}function v(e,t){function n(e,n){return m=X(n).parents().filter(function(e,t){return!!u.schema.getTextInlineElements()[t.nodeName]}),l=e.cloneNode(!1),m=s.map(m,function(e){return e=e.cloneNode(!1),l.hasChildNodes()?(e.appendChild(l.firstChild),l.appendChild(e)):l.appendChild(e),l.appendChild(e),e}),m.length?(p=C.create("br"),m[0].appendChild(p),C.replace(l,e),t.setStartBefore(p),t.setEndBefore(p),u.selection.setRng(t),p):null}function i(e){return e&&u.schema.getTextBlockElements()[e.tagName]}var o,a,l,c,d,f,h,p,m;if(t.collapsed&&(f=t.startContainer,h=t.startOffset,a=C.getParent(f,C.isBlock),i(a)))if(1==f.nodeType){if(f=f.childNodes[h],f&&"BR"!=f.tagName)return;if(d=e?a.nextSibling:a.previousSibling,C.isEmpty(a)&&i(d)&&C.i
 sEmpty(d)&&n(a,f))return C.remove(d),!0}else if(3==f.nodeType){if(o=r.create(a,f),c=a.cloneNode(!0),f=r.resolve(c,o),e){if(h>=f.data.length)return;f.deleteData(h,1)}else{if(0>=h)return;f.deleteData(h-1,1)}if(C.isEmpty(c))return n(a,f)}}function y(e){var t,n,r;f(e)||(s.each(u.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&u.dom.setAttrib(e,"style",u.dom.getAttrib(e,"style"))}),t=new w(function(){}),t.observe(u.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),u.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),n=u.selection.getRng(),r=n.startContainer.parentNode,s.each(t.takeRecords(),function(e){if(C.isChildOf(e.target,u.getBody())){if("style"==e.attributeName){var t=e.target.getAttribute(&q
 uot;data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}s.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),C.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),u.selection.setRng(n))}})}}),t.disconnect(),s.each(u.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")}))}var b=u.getDoc(),C=u.dom,x=u.selection,w=window.MutationObserver,E,N;w||(E=!0,w=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener(
 "DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMSubtreeModified",e,!1),r.removeEventListener("DOMNodeInsertedIntoDocument",e,!1),r.removeEventListener("DOMNodeInserted",e,!1),r.removeEventListener("DOMAttrModified",t,!1)},this.takeRecords=function(){return n}}),u.on("keydown",function(e){var t=e.keyCode==G,n=e.ctrlKey||e.metaKey;if(!h(e)&&(t||e.keyCode==K)){var r=u.selection.getRng(),i=r.startContainer,o=r.startOffset;if(t&&e.shiftKey)return;if(v(t,r))return void e.preventDefault();if(!n&&r.collapsed&&3==i.nodeType&&(t?o<i.data.length:o>0))return;e.preventDefault(),n&&u.selection.getSel().modify("extend",t?"forward":"backward",e.metaKey?"lineboundary":"word"),y(t)}}),u.on("keypress",function(t){if(!h(t)&&!x.isCollapsed()&&t.charCode>31&&!e.metaKeyPressed(t
 )){var n,r,i,o,a,s;n=u.selection.getRng(),s=String.fromCharCode(t.charCode),t.preventDefault(),r=X(n.startContainer).parents().filter(function(e,t){return!!u.schema.getTextInlineElements()[t.nodeName]}),y(!0),r=r.filter(function(e,t){return!X.contains(u.getBody(),t)}),r.length?(i=C.createFragment(),r.each(function(e,t){t=t.cloneNode(!1),i.hasChildNodes()?(t.appendChild(i.firstChild),i.appendChild(t)):(a=t,i.appendChild(t)),i.appendChild(t)}),a.appendChild(u.getDoc().createTextNode(s)),o=C.getParent(n.startContainer,C.isBlock),C.isEmpty(o)?X(o).empty().append(i):n.insertNode(i),n.setStart(a.firstChild,1),n.setEnd(a.firstChild,1),u.selection.setRng(n)):u.selection.setContent(s)}}),u.addCommand("Delete",function(){y()}),u.addCommand("ForwardDelete",function(){y(!0)}),E||(u.on("dragstart",function(e){N=x.getRng(),p(e)}),u.on("drop",function(e){if(!h(e)){var n=m(e);n&&(e.preventDefault(),l.setEditorTimeout(u,function(){var r=t.getCaretRange
 FromPoint(e.x,e.y,b);N&&(x.setRng(N),N=null),y(),x.setRng(r),g(n.html)}))}}),u.on("cut",function(e){h(e)||!e.clipboardData||u.selection.isCollapsed()||(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",u.selection.getContent()),e.clipboardData.setData("text/plain",u.selection.getContent({format:"text"})),l.setEditorTimeout(u,function(){y(!0)}))}))}function y(){function e(e){var t=J.create("body"),n=e.cloneContents();return t.appendChild(n),Q.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(u.getBody()),t.compareRanges(n,r)}var i=e(n),o=J.createRng();o.selectNode(u.getBody());var a=e(o);return i===a}u.on("keydown",function(e){var t=e.keyCode,r,i;if(!h(e)&&(t==G||t==K)){if(r=u.selection.isCollapsed(),i=u.getBody(),r&&!J.isEmpty(i))return;if(!r&&!n(u.selection.getRng(
 )))return;e.preventDefault(),u.setContent(""),i.firstChild&&J.isBlock(i.firstChild)?u.selection.setCursorLocation(i.firstChild,0):u.selection.setCursorLocation(i,0),u.nodeChanged()}})}function b(){u.shortcuts.add("meta+a",null,"SelectAll")}function C(){u.settings.content_editable||J.bind(u.getDoc(),"mousedown mouseup",function(e){var t;if(e.target==u.getDoc().documentElement)if(t=Q.getRng(),u.getBody().focus(),"mousedown"==e.type){if(c.isCaretContainer(t.startContainer))return;Q.placeCaretAt(e.clientX,e.clientY)}else Q.setRng(t)})}function x(){u.on("keydown",function(e){if(!h(e)&&e.keyCode===K){if(!u.getBody().getElementsByTagName("hr").length)return;if(Q.isCollapsed()&&0===Q.getRng(!0).startOffset){var t=Q.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return J.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(
 J.remove(n),e.preventDefault())}}})}function w(){window.Range.prototype.getClientRects||u.on("mousedown",function(e){if(!h(e)&&"HTML"===e.target.nodeName){var t=u.getBody();t.blur(),l.setEditorTimeout(u,function(){t.focus()})}})}function E(){u.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==J.getContentEditableParent(t)&&(e.preventDefault(),Q.getSel().setBaseAndExtent(t,0,t,1),u.nodeChanged()),"A"==t.nodeName&&J.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),Q.select(t))})}function N(){function e(){var e=J.getAttribs(Q.getStart().cloneNode(!1));return function(){var t=Q.getStart();t!==u.getBody()&&(J.setAttrib(t,"style",null),Y(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!Q.isCollapsed()&&J.getParent(Q.getStart(),J.isBlock)!=J.getParent(Q.getEnd(),J.isBlock)}u.on("keypress",function(n){
 var r;return h(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),u.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),J.bind(u.getDoc(),"cut",function(n){var r;!h(n)&&t()&&(r=e(),l.setEditorTimeout(u,function(){r()}))})}function _(){document.body.setAttribute("role","application")}function S(){u.on("keydown",function(e){if(!h(e)&&e.keyCode===K&&Q.isCollapsed()&&0===Q.getRng(!0).startOffset){var t=Q.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function k(){f()>7||(d("RespectVisibilityInDesign",!0),u.contentStyles.push(".mceHideBrInPre pre br {display: none}"),J.addClass(u.getBody(),"mceHideBrInPre"),ee.addNodeFilter("pre",function(e){for(var t=e.length,n,r,o,a;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)o=n[r],a=o.prev,a&
 &3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new i("#text",3),o,!0).value="\n"}),te.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function T(){J.bind(u.getBody(),"mouseup",function(){var e,t=Q.getNode();"IMG"==t.nodeName&&((e=J.getStyle(t,"width"))&&(J.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),J.setStyle(t,"width","")),(e=J.getStyle(t,"height"))&&(J.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),J.setStyle(t,"height","")))})}function R(){u.on("keydown",function(t){var n,r,i,o,a;if(!h(t)&&t.keyCode==e.BACKSPACE&&(n=Q.getRng(),r=n.startContainer,i=n.startOffs
 et,o=J.getRoot(),a=r,n.collapsed&&0===i)){for(;a&&a.parentNode&&a.parentNode.firstChild==a&&a.parentNode!=o;)a=a.parentNode;"BLOCKQUOTE"===a.tagName&&(u.formatter.toggle("blockquote",null,a),n=J.createRng(),n.setStart(r,0),n.setEnd(r,0),Q.setRng(n))}})}function A(){function e(){u._refreshContentEditable(),d("StyleWithCSS",!1),d("enableInlineTableEditing",!1),Z.object_resizing||d("enableObjectResizing",!1)}Z.readonly||u.on("BeforeExecCommand MouseDown",e)}function B(){function e(){Y(J.select("a"),function(e){var t=e.parentNode,n=J.getRoot();if(t.lastChild===e){for(;t&&!J.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}J.add(t,"br",{"data-mce-bogus":1})}})}u.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function D(){Z.forced_root_block&
 amp;&u.on("init",function(){d("DefaultParagraphSeparator",Z.forced_root_block)})}function M(){u.on("keydown",function(e){var t;h(e)||e.keyCode!=K||(t=u.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),u.undoManager.beforeChange(),J.remove(t.item(0)),u.undoManager.add()))})}function L(){var e;f()>=10&&(e="",Y("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){
+e+=(n>0?",":"")+t+":empty"}),u.contentStyles.push(e+"{padding-right: 1px !important}"))}function P(){f()<9&&(ee.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),te.addNodeFilter("noscript",function(e){for(var t=e.length,n,r,a;t--;)n=e[t],r=e[t].firstChild,r?r.value=o.decode(r.value):(a=n.attributes.map["data-mce-innertext"],a&&(n.attr("data-mce-innertext",null),r=new i("#text",3),r.value=a,r.raw=!0,n.append(r)))}))}function H(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.it
 em&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),J.unbind(r,"mouseup",n),J.unbind(r,"mousemove",t),a=o=0}var r=J.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,J.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(J.bind(r,"mouseup",n),J.bind(r,"mousemove",t),J.getRoot().focus(),a.select())}})}function O(){u.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||Q.normalize()},!0)}function I(){u.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function F(){u.inline||u.on("keydown",function(){document.activeElement==document.body&&u.getWin().focus()})}function z(){u.inline||(u.contentStyles.push("body {min-height: 150px}"),u.on("
 click",function(e){var t;if("HTML"==e.target.nodeName){if(a.ie>11)return void u.getBody().focus();t=u.selection.getRng(),u.getBody().focus(),u.selection.setRng(t),u.selection.normalize(),u.nodeChanged()}}))}function W(){a.mac&&u.on("keydown",function(t){!e.metaKeyPressed(t)||t.shiftKey||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),u.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","lineboundary"))})}function V(){d("AutoUrlDetect",!1)}function U(){u.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),u.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function $(){u.on("init",function(){u.dom.bind(u.getBody(),"submit",function(e){e.preventDefault()})})}function q(){ee.addNodeFilter("br",function(e){for(var t=e.length;t--;)&quot
 ;Apple-interchange-newline"==e[t].attr("class")&&e[t].remove()})}function j(){u.on("dragstart",function(e){p(e)}),u.on("drop",function(e){if(!h(e)){var n=m(e);if(n&&n.id!=u.id){e.preventDefault();var r=t.getCaretRangeFromPoint(e.x,e.y,u.getDoc());Q.setRng(r),g(n.html)}}})}var Y=s.each,X=u.$,K=e.BACKSPACE,G=e.DELETE,J=u.dom,Q=u.selection,Z=u.settings,ee=u.parser,te=u.serializer,ne=a.gecko,re=a.ie,ie=a.webkit,oe="data:text/mce-internal,",ae=re?"Text":"URL";R(),y(),O(),ie&&(v(),C(),E(),D(),$(),S(),q(),a.iOS?(F(),z(),U()):b()),re&&a.ie<11&&(x(),_(),k(),T(),M(),L(),P(),H()),a.ie>=11&&(z(),S()),a.ie&&(b(),V(),j()),ne&&(x(),w(),N(),A(),B(),I(),W(),S())}}),r(Me,[oe,w,m],function(e,t,n){function r(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settin
 gs.event_root?(e.eventRoot||(e.eventRoot=o.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()}function i(e,t){function n(e){return!e.hidden&&!e.readonly}var i=r(e,t),s;if(e.delegates||(e.delegates={}),!e.delegates[t])if(e.settings.event_root){if(a||(a={},e.editorManager.on("removeEditor",function(){var t;if(!e.editorManager.activeEditor&&a){for(t in a)e.dom.unbind(r(e,t));a=null}})),a[t])return;s=function(r){for(var i=r.target,a=e.editorManager.editors,s=a.length;s--;){var l=a[s].getBody();(l===i||o.isChildOf(i,l))&&n(a[s])&&a[s].fire(t,r)}},a[t]=s,o.bind(i,t,s)}else s=function(r){n(e)&&e.fire(t,r)},o.bind(i,t,s),e.delegates[t]=s}var o=t.DOM,a,s={bindPendingEventDelegates:function(){var e=this;n.each(e._pendingNativeEvents,function(t){i(e,t)})},toggleNativeEvent:function(e,t){var n=this;"focus"!=e&&"blur"!=e&&(t?n.initialized?i(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._p
 endingNativeEvents=[e]:n.initialized&&(n.dom.unbind(r(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e=this,t;if(e.delegates){for(t in e.delegates)e.dom.unbind(r(e,t),t,e.delegates[t]);delete e.delegates}e.inline||(e.getBody().onload=null,e.dom.unbind(e.getWin()),e.dom.unbind(e.getDoc())),e.dom.unbind(e.getBody()),e.dom.unbind(e.getContainer())}};return s=n.extend({},e,s)}),r(Le,[],function(){function e(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}}function t(t,n){var r=t.readonly?"readonly":"design";n!=r&&("readonly"==n?(t.selection.controlSelection.hideResizeRect(),t.readonly=!0,t.getBody().contentEditable=!1):(t.readonly=!1,t.getBody().contentEditable=!0,e(t,"StyleWithCSS",!1),e(t,"enableInlineTableEditing",!1),e(t,"enableObjectResizing",!1),t.focus(),t.nodeChanged()),t.fire("SwitchMode",{mode:n}))}return{setMode:t}}),r(Pe,[m,h],function(e,t){var n=e.
 each,r=e.explode,i={f9:120,f10:121,f11:122},o=e.makeMap("alt,ctrl,shift,meta,access");return function(a){function s(e,s,l,c){var u,d,f;f={func:l,scope:c||a,desc:a.translate(s)},n(r(e,"+"),function(e){e in o?f[e]=!0:/^[0-9]{2,}$/.test(e)?f.keyCode=parseInt(e,10):(f.charCode=e.charCodeAt(0),f.keyCode=i[e]||e.toUpperCase().charCodeAt(0))}),u=[f.keyCode];for(d in o)f[d]?u.push(d):f[d]=!1;return f.id=u.join(","),f.access&&(f.alt=!0,t.mac?f.ctrl=!0:f.shift=!0),f.meta&&(t.mac?f.meta=!0:(f.ctrl=!0,f.meta=!1)),f}var l=this,c={};a.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&!e.isDefaultPrevented()&&n(c,function(t){return t.ctrl==e.ctrlKey&&t.meta==e.metaKey&&t.alt==e.altKey&&t.shift==e.shiftKey&&(e.keyCode==t.keyCode||e.charCode&&e.charCode==t.charCode)?(e.preventDefault(),"keydown"==e.type&&t.func.call(t.scope),!0):void 0})}),l.add=fu
 nction(t,i,o,l){var u;return u=o,"string"==typeof o?o=function(){a.execCommand(u,!1,null)}:e.isArray(u)&&(o=function(){a.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t=s(e,i,o,l);c[t.id]=t}),!0},l.remove=function(e){var t=s(e);return c[t.id]?(delete c[t.id],!0):!1}}}),r(He,[c,m,z],function(e,t,n){return function(r){function i(e){var t,n;return n={"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"},t=n[e.blob().type.toLowerCase()]||"dat",e.id()+"."+t}function o(e,t){return e?e.replace(/\/$/,"")+"/"+t.replace(/^\//,""):t}function a(e){return{id:e.id,blob:e.blob,base64:e.base64,filename:n.constant(i(e))}}function s(e,t,n,a){var s,l,c;s=new XMLHttpRequest,s.open("POST",r.url),s.withCredentials=r.credentials,c=a(),s.upload.onprogress=function(e){var t=Math.round(e.loaded/e.total*100);c.pro
 gressBar.value(t)},s.onload=function(){var e;return c.close(),200!=s.status?void n("HTTP Error: "+s.status):(e=JSON.parse(s.responseText),e&&"string"==typeof e.location?void t(o(r.basePath,e.location)):void n("Invalid JSON: "+s.responseText))},l=new FormData,l.append("file",e.blob(),i(e)),s.send(l)}function l(){return new e(function(e){e([])})}function c(e){return e.then(function(e){return e})["catch"](function(e){return e})}function u(e,t,n){var r=e(n),i=c(r);return delete p[t],p[t]=i,i}function d(e,n){return t.map(e,function(e){var t=e.id();return p[t]?p[t]:u(n,t,e)})}function f(t,n){function i(t){return new e(function(e){var i=r.handler;i(a(t),function(n){e({url:n,blobInfo:t,status:!0})},function(n){e({url:"",blobInfo:t,status:!1,error:n})},n)})}var o=d(t,i);return e.all(o)}function h(e,t){return r.url||r.handler!==s?f(e,t):l()}var p={};return r=t.extend({credentials:!1,handler:s},r),{upload:h}}}),r(Oe,[c],functi
 on(e){function t(t){return new e(function(e){var n=new XMLHttpRequest;n.open("GET",t,!0),n.responseType="blob",n.onload=function(){200==this.status&&e(this.response)},n.send()})}function n(e){var t,n;return e=decodeURIComponent(e).split(","),n=/data:([^;]+)/.exec(e[0]),n&&(t=n[1]),{type:t,data:e[1]}}function r(t){return new e(function(e){var r,i,o;t=n(t);try{r=atob(t.data)}catch(a){return void e(new Blob([]))}for(i=new Uint8Array(r.length),o=0;o<i.length;o++)i[o]=r.charCodeAt(o);e(new Blob([i],{type:t.type}))})}function i(e){return 0===e.indexOf("blob:")?t(e):0===e.indexOf("data:")?r(e):null}function o(t){return new e(function(e){var n=new FileReader;n.onloadend=function(){e(n.result)},n.readAsDataURL(t)})}return{uriToBlob:i,blobToDataUri:o,parseDataUri:n}}),r(Ie,[c,p,z,Oe,h],function(e,t,n,r,i){var o=0;return function(a){function s(s,c){function u(e,t){var n,i;return 0===e.src.indexOf("blob:")?(i=a.getBy
 Uri(e.src),void(i&&t({image:e,blobInfo:i}))):(n=r.parseDataUri(e.src).data,i=a.findFirst(function(e){return e.base64()===n}),void(i?t({image:e,blobInfo:i}):r.uriToBlob(e.src).then(function(r){var i="blobid"+o++,s=a.create(i,r,n);a.add(s),t({image:e,blobInfo:s})})))}var d,f;return c||(c=n.constant(!0)),d=t.filter(s.getElementsByTagName("img"),function(e){var t=e.src;return i.fileApi?e.hasAttribute("data-mce-bogus")?!1:e.hasAttribute("data-mce-placeholder")?!1:t&&t!=i.transparentSrc?0===t.indexOf("blob:")?!0:0===t.indexOf("data:")?c(e):!1:!1:!1}),f=t.map(d,function(t){var n;return l[t.src]?new e(function(e){l[t.src].then(function(n){e({image:t,blobInfo:n.blobInfo})})}):(n=new e(function(e){u(t,e)}).then(function(e){return delete l[e.image.src],e})["catch"](function(e){return delete l[t.src],e}),l[t.src]=n,n)}),e.all(f)}var l={};return{findAll:s}}}),r(Fe,[p,z],function(e,t){return function(){function 
 n(e,t,n){return{id:c(e),blob:c(t),base64:c(n),blobUri:c(URL.createObjectURL(t))}}function r(e){i(e.id())||l.push(e)}function i(e){return o(function(t){return t.id()===e})}function o(t){return e.filter(l,t)[0]}function a(e){return o(function(t){return t.blobUri()==e})}function s(){e.each(l,function(e){URL.revokeObjectURL(e.blobUri())}),l=[]}var l=[],c=t.constant;return{create:n,add:r,get:i,getByUri:a,findFirst:o,destroy:s}}}),r(ze,[p,He,Ie,Fe],function(e,t,n,r){return function(i){function o(e){return function(t){return i.selection?e(t):[]}}function a(e,t,n){var r=0;do r=e.indexOf(t,r),-1!==r&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1);while(-1!==r);return e}function s(e,t,n){return e=a(e,'src="'+t+'"','src="'+n+'"'),e=a(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')}function l(t,n){e.each(i.undoManager.data,function(e){e.content=s(e.content,t,n)})}function c(){return i.notificationManager.open({text:i.translate
 ("Image uploading..."),type:"info",timeout:-1,progressBar:!0})}function u(n){return g||(g=new t({url:y.images_upload_url,basePath:y.images_upload_base_path,credentials:y.images_upload_credentials,handler:y.images_upload_handler})),f().then(o(function(t){var r;return r=e.map(t,function(e){return e.blobInfo}),g.upload(r,c).then(o(function(r){return r=e.map(r,function(e,n){var r=t[n].image;return l(r.src,e.url),i.$(r).attr({src:e.url,"data-mce-src":i.convertURL(e.url,"src")}),{element:r,status:e.status}}),n&&n(r),r}))}))}function d(e){return y.automatic_uploads!==!1?u(e):void 0}function f(){return v||(v=new n(m)),v.findAll(i.getBody(),y.images_dataimg_filter).then(o(function(t){return e.each(t,function(e){l(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri()}),t}))}function h(){m.destroy(),v=g=null}function p(t){return t.replace(/src="(blob:[^"]+)"/g,function(t,n){var r=m.getByUri(n);return r||(r=e.reduce(i.e
 ditorManager.editors,function(e,t){return e||t.editorUpload.blobCache.getByUri(n)},null)),r?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':t})}var m=new r,g,v,y=i.settings;return i.on("setContent",function(){i.settings.automatic_uploads!==!1?d():f()}),i.on("RawSaveContent",function(e){e.content=p(e.content)}),i.on("getContent",function(e){e.source_view||"raw"==e.format||(e.content=p(e.content))}),{blobCache:m,uploadImages:u,uploadImagesAuto:d,scanForImages:f,destroy:h}}}),r(We,[z,y,_,$,k,W],function(e,t,n,r,i,o){function a(e){return e>0}function s(e){return 0>e}function l(e,n,r,i,o){var l=new t(e,i);if(s(n)){if(C(e)&&(e=l.prev(!0),r(e)))return e;for(;e=l.prev(o);)if(r(e))return e}if(a(n)){if(C(e)&&(e=l.next(!0),r(e)))return e;for(;e=l.next(o);)if(r(e))return e}return null}function c(e,t){for(e=e.parentNode;e&&e!=t;e=e.parentNode)if(b(e))return e;return t}function u(e,t){for(;e&&e!
 =t;){if(x(e))return e;e=e.parentNode}return null}function d(e,t,n){return u(e.container(),n)==u(t.container(),n)}function f(e,t,n){return c(e.container(),n)==c(t.container(),n)}function h(e,t){var n,r;return t?(n=t.container(),r=t.offset(),N(n)?n.childNodes[r+e]:null):null}function p(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n}function m(e,t,n){return u(t,e)==u(n,e)}function g(e,t,n){var r,i;for(i=e?"previousSibling":"nextSibling";n&&n!=t;){if(r=n[i],w(r)&&(r=r[i]),C(r)){if(m(t,r,n))return r;break}if(_(r))break;n=n.parentNode}return null}function v(e,t,r){var o,a,s,l,c=E(g,!0,t),u=E(g,!1,t);if(a=r.startContainer,s=r.startOffset,i.isCaretContainerBlock(a)){if(N(a)||(a=a.parentNode),l=a.getAttribute("data-mce-caret"),"before"==l&&(o=a.nextSibling,C(o)))return S(o);if("after"==l&&(o=a.previousSibling,C(o)))return k(o)}if
 (!r.collapsed)return r;if(n.isText(a)){if(w(a)){if(1===e){if(o=u(a))return S(o);if(o=c(a))return k(o)}if(-1===e){if(o=c(a))return k(o);if(o=u(a))return S(o)}return r}if(i.endsWithCaretContainer(a)&&s>=a.data.length-1)return 1===e&&(o=u(a))?S(o):r;if(i.startsWithCaretContainer(a)&&1>=s)return-1===e&&(o=c(a))?k(o):r;if(s===a.data.length)return o=u(a),o?S(o):r;if(0===s)return o=c(a),o?k(o):r}return r}function y(e,t){return C(h(e,t))}var b=n.isContentEditableTrue,C=n.isContentEditableFalse,x=n.matchStyleValues("display","block table table-cell table-caption"),w=i.isCaretContainer,E=e.curry,N=n.isElement,_=o.isCaretCandidate,S=E(p,!0),k=E(p,!1);return{isForwards:a,isBackwards:s,findNode:l,getEditingHost:c,getParentBlock:u,isInSameBlock:d,isInSameEditingHost:f,isBeforeContentEditableFalse:E(y,0),isAfterContentEditableFalse:E(y,-1),normalizeRange:v}}),r(Ve,[_,W,$,We,p,z],function(e,t,n,r,i,o){function a(e,t){for(var n=[];e&&
 e!=t;)n.push(e),e=e.parentNode;return n}function s(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null}function l(e,t){if(h(e)){if(m(t.previousSibling)&&!d(t.previousSibling))return n.before(t);if(d(t))return n(t,0)}if(p(e)){if(m(t.nextSibling)&&!d(t.nextSibling))return n.after(t);if(d(t))return n(t,t.data.length)}return p(e)?n.after(t):n.before(t)}function c(e,t,c){var y,b,C,x,w,E,N;if(!f(c)||!t)return null;if(N=t,y=N.container(),b=N.offset(),d(y)){if(p(e)&&b>0)return n(y,--b);if(h(e)&&b<y.length)return n(y,++b);C=y}else{if(p(e)&&b>0&&(x=s(y,b-1),m(x)))return!g(x)&&(w=r.findNode(x,e,v,x))?d(w)?n(w,w.data.length):n.after(w):d(x)?n(x,x.data.length):n.before(x);if(h(e)&&b<y.childNodes.length&&(x=s(y,b),m(x)))return!g(x)&&(w=r.findNode(x,e,v,x))?d(w)?n(w,0):n.before(w):d(x)?n(x,0):n.after(x);C=N.getNode()}return(h(e)&&N.isAtEnd()||p(e)&&N.isAtStar
 t())&&(C=r.findNode(C,e,o.constant(!0),c,!0),v(C))?l(e,C):(x=r.findNode(C,e,v,c),E=i.last(i.filter(a(y,c),u)),!E||x&&E.contains(x)?x?l(e,x):null:N=h(e)?n.after(E):n.before(E))}var u=e.isContentEditableFalse,d=e.isText,f=e.isElement,h=r.isForwards,p=r.isBackwards,m=t.isCaretCandidate,g=t.isAtomic,v=t.isEditableCaretCandidate;return function(e){return{next:function(t){return c(1,t,e)},prev:function(t){return c(-1,t,e)}}}}),r(Ue,[k,$,_,T,g,V,u],function(e,t,n,r,i,o,a){var s=n.isContentEditableFalse;return function(t,n){function r(e,n){var r=o.collapse(e.getBoundingClientRect(),n),i,a,s,l,c;return"BODY"==t.tagName?(i=t.ownerDocument.documentElement,a=t.scrollLeft||i.scrollLeft,s=t.scrollTop||i.scrollTop):(c=t.getBoundingClientRect(),a=t.scrollLeft-c.left,s=t.scrollTop-c.top),r.left+=a,r.right+=a,r.top+=s,r.bottom+=s,r.width=1,l=e.offsetWidth-e.clientWidth,l>0&&(n&&(l*=-1),r.left+=l,r.right+=l),r}function l(){var n,r,o,a,s;for(n=i("*[cont
 entEditable=false]",t),a=0;a<n.length;a++)r=n[a],o=r.previousSibling,e.endsWithCaretContainer(o)&&(s=o.data,1==s.length?o.parentNode.removeChild(o):o.deleteData(s.length-1,1)),o=r.nextSibling,e.startsWithCaretContainer(o)&&(s=o.data,1==s.length?o.parentNode.removeChild(o):o.deleteData(0,1));return null}function c(o,a){var l,c,f;return u(),n(a)?(g=e.insertBlock("p",a,o),l=r(a,o),i(g).css("top",l.top),m=i('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(l).appendTo(t),o&&m.addClass("mce-visual-caret-before"),d(),c=a.ownerDocument.createRange(),f=g.firstChild,c.setStart(f,0),c.setEnd(f,1),c):(g=e.insertInline(a,o),c=a.ownerDocument.createRange(),s(g.nextSibling)?(c.setStart(g,0),c.setEnd(g,0)):(c.setStart(g,1),c.setEnd(g,1)),c)}function u(){l(),g&&(e.remove(g),g=null),m&&(m.remove(),m=null),clearInterval(p)}function d(){p=a.setInterval(function(){i("div.mce
 -visual-caret",t).toggleClass("mce-visual-caret-hidden")},500)}function f(){a.clearInterval(p)}function h(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"}var p,m,g;return{show:c,hide:u,getCss:h,destroy:f}}}),r($e,[p,_,V],function(e,t,n){function r(i){function o(t){return e.map(t,function(e){return e=n.clone(e),e.node=i,e})}if(e.isArray(i))return e.reduce(i,function(e,t){return e.concat(r(t))},[]);if(t.isElement(i))return o(i.getClientRects());if(t.isText(i)){var a=i.ownerDocument.createRange();return a.setStart(i,0),a.setEnd(i,i.data.length),o(a.getClientRects())}}return{getClientRects:r}}),r(qe,[z,p,$e,W,We,Ve,$,V],function(e,t,n,r,i,o,a,s){function l(e,t,n,o){for(;o=i.findNode(o,e,r.isEditableCaretCandidate,t);)if(n(o))return}function c(e,r,i,o,a,s){function c(o){var s
 ,l,c;for(c=n.getClientRects(o),-1==e&&(c=c.reverse()),s=0;s<c.length;s++)if(l=c[s],!i(l,h)){if(f.length>0&&r(l,t.last(f))&&u++,l.line=u,a(l))return!0;f.push(l)}}var u=0,d,f=[],h;return(h=t.last(s.getClientRects()))?(d=s.getNode(),c(d),l(e,o,c,d),f):f}function u(e,t){return t.line>e}function d(e,t){return t.line===e}function f(e,n,r,i){function l(n){return 1==e?t.last(n.getClientRects()):t.last(n.getClientRects())}var c=new o(n),u,d,f,h,p=[],m=0,g,v;1==e?(u=c.next,d=s.isBelow,f=s.isAbove,h=a.after(i)):(u=c.prev,d=s.isAbove,f=s.isBelow,h=a.before(i)),v=l(h);do if(h.isVisible()&&(g=l(h),!f(g,v))){if(p.length>0&&d(g,t.last(p))&&m++,g=s.clone(g),g.position=h,g.line=m,r(g))return p;p.push(g)}while(h=u(h));return p}var h=e.curry,p=h(c,-1,s.isAbove,s.isBelow),m=h(c,1,s.isBelow,s.isAbove);return{upUntil:p,downUntil:m,positionsUntil:f,isAboveLine:h(u),isLine:h(d)}}),r(je,[z,p,_,$e,V,We,W],function(e,t,n,r,i,o,a){function s(e,t){retur
 n Math.abs(e.left-t)}function l(e,t){return Math.abs(e.right-t)}function c(e,n){function r(e,t){return e>=t.left&&e<=t.right}return t.reduce(e,function(e,t){var i,o;return i=Math.min(s(e,n),l(e,n)),o=Math.min(s(t,n),l(t,n)),r(n,t)?t:r(n,e)?e:o==i&&m(t.node)?t:i>o?t:e})}function u(e,t,n,r){for(;r=g(r,e,a.isEditableCaretCandidate,t);)if(n(r))return}function d(e,n){function o(e,i){var o;return o=t.filter(r.getClientRects(i),function(t){return!e(t,n)}),a=a.concat(o),0===o.length}var a=[];return a.push(n),u(-1,e,v(o,i.isAbove),n.node),u(1,e,v(o,i.isBelow),n.node),a}function f(e){return t.filter(t.toArray(e.getElementsByTagName("*")),m)}function h(e,t){return{node:e.node,before:s(e,t)<l(e,t)}}function p(e,n,i){var o,a;return o=r.getClientRects(f(e)),o=t.filter(o,function(e){return i>=e.top&&i<=e.bottom}),a=c(o,n),a&&(a=c(d(e,a),n),a&&m(a.node))?h(a,n):null}var m=n.isContentEditableFalse,g=o.findNode,v=e.curry;return{findC
 losestClientRect:c,findLineNodeRects:d,closestCaret:p}}),r(Ye,[_],function(e){function t(e){function t(e){return n(e)}function r(t){c(e.getBody()).css("cursor",t)}function i(t){return t==h.element||e.dom.isChildOf(t,h.element)?!1:n(t)?!1:!0}function o(t){var n,i,o,a,s=0,l=0,u,d,p,m;0===t.button&&(n=t.screenX-h.screenX,i=t.screenY-h.screenY,u=Math.max(Math.abs(n),Math.abs(i)),!h.dragging&&u>10&&(h.dragging=!0,r("default"),h.clone=h.element.cloneNode(!0),o=f.getPos(h.element),h.relX=h.clientX-o.x,h.relY=h.clientY-o.y,h.width=h.element.offsetWidth,h.height=h.element.offsetHeight,c(h.clone).css({width:h.width,height:h.height}).removeAttr("data-mce-selected"),h.ghost=c("<div>").css({position:"absolute",opacity:.5,overflow:"hidden",width:h.width,height:h.height}).attr({"data-mce-bogus":"all",unselectable:"on",contenteditable:"false"}).addClass("mce-drag
 -container mce-reset").append(h.clone).appendTo(e.getBody())[0],a=e.dom.getViewPort(e.getWin()),h.maxX=a.w,h.maxY=a.h),h.dragging&&(e.selection.placeCaretAt(t.clientX,t.clientY),d=h.clientX+n-h.relX,p=h.clientY+i+5,d+h.width>h.maxX&&(s=d+h.width-h.maxX),p+h.height>h.maxY&&(l=p+h.height-h.maxY),m="BODY"!=e.getBody().nodeName?e.getBody().getBoundingClientRect():{left:0,top:0},c(h.ghost).css({left:d-m.left,top:p-m.top,width:h.width-s,height:h.height-l})))}function a(){h.dragging&&(e.selection.setRng(e.selection.getSel().getRangeAt(0)),i(e.selection.getNode())&&e.undoManager.transact(function(){e.insertContent(f.getOuterHTML(h.element)),c(h.element).remove()})),l()}function s(n){if(l(),t(n.target)){if(e.fire("dragstart",{target:n.target}).isDefaultPrevented())return;e.on("mousemove",o),e.on("mouseup",a),u!=d&&(f.bind(u,"mousemove",o),f.bind(u,"mouseup",a)),h={screenX:n.
 screenX,screenY:n.screenY,clientX:n.clientX,clientY:n.clientY,element:n.target}}}function l(){c(h.ghost).remove(),r(null),e.off("mousemove",o),e.off("mouseup",l),u!=d&&(f.unbind(u,"mousemove",o),f.unbind(u,"mouseup",l)),h={}}var c=e.$,u=document,d=e.getDoc(),f=e.dom,h={};e.on("mousedown",s),e.on("drop",function(t){var r=e.getDoc().elementFromPoint(t.clientX,t.clientY);(n(r)||n(e.dom.getContentEditableParent(r)))&&t.preventDefault()})}var n=e.isContentEditableFalse;return{init:t}}),r(Xe,[h,Ve,$,k,We,Ue,qe,je,_,T,I,z,p,u,Ye],function(e,t,n,r,i,o,a,s,l,c,u,d,f,h,p){function m(e,t){for(;t=e(t);)if(t.isVisible())return t;return t}function g(c){function d(e){return c.dom.isBlock(e)}function g(e){e&&c.selection.setRng(e)}function N(){return c.selection.getRng()}function _(e,t){c.selection.scrollIntoView(e,t)}function S(e,t,n){var r;return r=c.fire("ShowCaret",{target:t,direction:e,before:n}),r.isD
 efaultPrevented()?null:(_(t,-1===e),Z.show(n,t))}function k(e){var t;return t=c.fire("ObjectSelected",{target:e}),t.isDefaultPrevented()?null:(Z.hide(),T(e))}function T(e){var t=e.ownerDocument.createRange();return t.selectNode(e),t}function R(e,t){var n=i.isInSameBlock(e,t);return!n&&l.isBr(e.getNode())?!0:n}function A(e,t){return t=i.normalizeRange(e,K,t),-1==e?n.fromRangeStart(t):n.fromRangeEnd(t)}function B(e){return r.isCaretContainerBlock(e.startContainer)}function D(e,t,n,r){var i,o,a,s;return!r.collapsed&&(i=E(r),b(i))?S(e,i,-1==e):(s=B(r),o=A(e,r),n(o)?k(o.getNode(-1==e)):(o=t(o))?n(o)?S(e,o.getNode(-1==e),1==e):(a=t(o),n(a)&&R(o,a)?S(e,a.getNode(-1==e),1==e):s?z(o.toRange()):null):s?r:null)}function M(e,t,n){var r,i,o,l,c,u,d,h,p;if(p=E(n),r=A(e,n),i=t(K,a.isAboveLine(1),r),o=f.filter(i,a.isLine(1)),c=f.last(r.getClientRects()),w(r)&&(p=r.getNode()),x(r)&&(p=r.getNode(!0)),!c)return null;if(u=c.left,l=s.findClosestClientRec
 t(o,u),l&&b(l.node))return d=Math.abs(u-l.left),h=Math.abs(u-l.right),S(e,l.node,h>d);if(p){var m=a.positionsUntil(e,K,a.isAboveLine(1),p);if(l=s.findClosestClientRect(f.filter(m,a.isLine(1)),u))return z(l.position.toRange());if(l=f.last(f.filter(m,a.isLine(0))))return z(l.position.toRange())}}function L(t,r){function i(){var t=c.dom.create(c.settings.forced_root_block);return(!e.ie||e.ie>=11)&&(t.innerHTML='<br data-mce-bogus="1">'),t}var o,a,s;if(r.collapsed&&c.settings.forced_root_block){if(o=c.dom.getParent(r.startContainer,"PRE"),!o)return;a=1==t?J(n.fromRangeStart(r)):Q(n.fromRangeStart(r)),a||(s=i(),1==t?c.$(o).after(s):c.$(o).before(s),c.selection.select(s,!0),c.selection.collapse())}}function P(e,t,n,r){var i;return(i=D(e,t,n,r))?i:(i=L(e,r),i?i:null)}function H(e,t,n){var r;return(r=M(e,t,n))?r:(r=L(e,n),r?r:null)}function O(){return ne("*[data-mce-caret]")[0]}function I(e){e=ne(e),e.attr("data-mce-care
 t")&&(Z.hide(),e.removeAttr("data-mce-caret"),e.removeAttr("data-mce-bogus"),e.removeAttr("style"),g(N()),_(e[0]))}function F(e){var t;return e=i.normalizeRange(1,K,e),t=n.fromRangeStart(e),b(t.getNode())?S(1,t.getNode(),!t.isAtEnd()):b(t.getNode(!0))?S(1,t.getNode(!0),!1):(Z.hide(),null)}function z(e){var t;return e&&e.collapsed?(t=F(e),t?t:e):e}function W(e){var t,i,o,a;return b(e)?(b(e.previousSibling)&&(o=e.previousSibling),i=Q(n.before(e)),i||(t=J(n.after(e))),t&&C(t.getNode())&&(a=t.getNode()),r.remove(e.previousSibling),r.remove(e.nextSibling),c.dom.remove(e),Y(),c.dom.isEmpty(c.getBody())?(c.setContent(""),void c.focus()):o?n.after(o).toRange():a?n.before(a).toRange():i?i.toRange():t?t.toRange():null):null}function V(e,t,n){var r,i;return!n.collapsed&&(r=E(n),b(r))?z(W(r)):(i=A(e,n),t(i)?z(W(i.getNode(-1==e))):void 0)}function U(){function e(e){var t=e(N());return t?(g(t),!0):!1}func
 tion t(e){for(var t=c.getBody();e&&e!=t;){if(y(e)||b(e))return e;e=e.parentNode}return null}function r(){var e,r=t(c.selection.getNode());y(r)&&d(r)&&c.dom.isEmpty(r)&&(e=c.dom.create("br",{"data-mce-bogus":"1"}),c.$(r).empty().append(e),c.selection.setRng(n.before(e).toRange()))}function i(e){var t=O();if(t)return"compositionstart"==e.type?(e.preventDefault(),e.stopPropagation(),void I(t)):void("&nbsp;"!=t.innerHTML&&I(t))}function o(e){var t;switch(e.keyCode){case u.DELETE:t=r();break;case u.BACKSPACE:t=r()}t&&e.preventDefault()}var l=v(P,1,J,w),f=v(P,-1,Q,x),m=v(V,1,w),C=v(V,-1,x),E=v(H,-1,a.upUntil),_=v(H,1,a.downUntil);c.on("mouseup",function(){var e=N();e.collapsed&&g(F(e))}),c.on("mousedown",function(e){var n;if(n=t(e.target))b(n)?(e.preventDefault(),j(k(n),!1)):c.selection.placeCaretAt(e.clientX,e.clientY);else{Y(),Z.hide();var r=s.closestCaret(K,
 e.clientX,e.clientY);r&&(e.preventDefault(),c.getBody().focus(),g(S(1,r.node,r.before)))}}),c.on("keydown",function(t){var n;if(!u.modifierPressed(t)){switch(t.keyCode){case u.RIGHT:n=e(l);break;case u.DOWN:n=e(_);break;case u.LEFT:n=e(f);break;case u.UP:n=e(E);break;case u.DELETE:n=e(m);break;case u.BACKSPACE:n=e(C);break;default:n=b(c.selection.getNode())}n&&t.preventDefault()}}),c.on("keyup compositionstart",function(e){i(e),o(e)},!0),c.on("cut",function(){var e=c.selection.getNode();b(e)&&h.setEditorTimeout(c,function(){g(z(W(e)))})}),c.on("getSelectionRange",function(e){var t=e.range;if(te){if(!te.parentNode)return void(te=null);t=t.cloneRange(),t.selectNode(te),e.range=t}}),c.on("setSelectionRange",function(e){var t;t=j(e.range),t&&(e.range=t)}),c.on("focus",function(){h.setEditorTimeout(c,function(){c.selection.setRng(z(c.selection.getRng()))})}),p.init(c)}function $(){var e=c.contentS
 tyles,t=".mce-content-body";e.push(Z.getCss()),e.push(t+" .mce-offscreen-selection {position: absolute;left: -9999999999px;width: 100pxheight: 100px}"+t+" *[contentEditable=false] {cursor: default;}"+t+" *[contentEditable=true] {cursor: text;}")}function q(e){return r.isCaretContainer(e.startContainer)||r.isCaretContainer(e.endContainer)}function j(e,t){var n,r=c.$,i=c.dom,o,a,s,l,u,d,f;if(!e)return Y(),null;if(e.collapsed){if(Y(),!q(e)){if(f=A(1,e),b(f.getNode()))return S(1,f.getNode(),!f.isAtEnd());if(b(f.getNode(!0)))return S(1,f.getNode(!0),!1)}return null}return s=e.startContainer,l=e.startOffset,u=e.endOffset,3==s.nodeType&&0==l&&b(s.parentNode)&&(s=s.parentNode,l=i.nodeIndex(s),s=s.parentNode),1!=s.nodeType?(Y(),null):(u==l+1&&(n=s.childNodes[l]),b(n)?t!==!1&&(d=c.fire("ObjectSelected",{target:n}),d.isDefaultPrevented())?(Y(),null):(o=r("#"+ee),0===o.length&&(o=r('<d
 iv data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",ee),o.appendTo(c.getBody())),o.empty().append("\xa0").append(n.cloneNode(!0)).append("\xa0").css({top:i.getPos(n,c.getBody()).y}),e=c.dom.createRng(),e.setStart(o[0].firstChild,1),e.setEnd(o[0].lastChild,0),c.getBody().focus(),o[0].focus(),a=c.selection.getSel(),a.removeAllRanges(),a.addRange(e),c.$("*[data-mce-selected]").removeAttr("data-mce-selected"),n.setAttribute("data-mce-selected",1),te=n,e):(Y(),null))}function Y(){te&&(te.removeAttribute("data-mce-selected"),c.$("#"+ee).remove(),te=null)}function X(){Z.destroy(),te=null}var K=c.getBody(),G=new t(K),J=v(m,G.next),Q=v(m,G.prev),Z=new o(c.getBody(),d),ee="sel-"+c.dom.uniqueId(),te,ne=c.$;return e.ceFalse&&(U(),$()),{showBlockCaretContainer:I,destroy:X}}var v=d.curry,y=l.isContentEditableTrue,b=l.isContentEditableFalse,C
 =l.isElement,x=i.isAfterContentEditableFalse,w=i.isBeforeContentEditableFalse,E=c.getSelectedNode;return g}),r(Ke,[w,g,N,R,A,H,P,Y,G,J,Q,Z,ee,te,E,d,_e,Ae,B,M,De,h,m,u,Me,Le,Pe,ze,Xe],function(e,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,E,N,_,S,k,T,R){function A(e,t,i){var o=this,a,s;a=o.documentBaseUrl=i.documentBaseURL,s=i.baseURI,o.settings=t=L({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:a,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,inde
 nt:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:o.convertURL,url_converter_scope:o,ie7_compat:!0},t),r.language=t.language||"en",r.languageLoad=t.language_load,r.baseURL=i.baseURL,o.id=t.id=e,o.setDirty(!1),o.plugins={},o.documentBaseURI=new p(t.document_base_url||a,{base_uri:s}),o.baseURI=s,o.contentCSS=[],o.contentStyles=[],o.shortcuts=new k(o),o.loadedCSS={},o.editorCommands=new h(o),t.target&&(o.targetElm=t.target),o.suffix=i.suffix,o.editorManager=i,o.inline=t.inline,t.cache_suffix&&(w.cacheSuffix=t.cach
 e_suffix.replace(/^[\?\&]+/,"")),t.override_viewport===!1&&(w.overrideViewPort=!1),i.fire("SetupEditor",o),o.execCallback("setup",o),o.$=n.overrideDefaults(function(){return{context:o.inline?o.getBody():o.getDoc(),element:o.getBody()}})}var B=e.DOM,D=r.ThemeManager,M=r.PluginManager,L=E.extend,P=E.each,H=E.explode,O=E.inArray,I=E.trim,F=E.resolve,z=g.Event,W=w.gecko,V=w.ie;return A.prototype={render:function(){function e(){B.unbind(window,"ready",e),n.render()}function t(){var e=m.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!D.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+&q
 uot;.js",D.load(r.theme,t)}E.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),P(r.external_plugins,function(e,t){M.load(t,e),r.plugins+=" "+t}),P(r.plugins.split(/[ ,]/),function(e){if(e=I(e),e&&!M.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=M.dependencies(e);P(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=M.createUrl(t,e),M.load(e.resource,e)})}else M.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!z.domLoaded)return void B.bind(window,"ready",e);if(n.getElement()&&w.contentEditable){
+r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||B.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(B.insertAfter(B.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},B.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.setDirty(!1),a._mceOldSubmit(a)})),n.windowManager=new v(n),n.notificationManager=new y(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=B.encode(e.content))}),r.add_form_submit_trigger&&n.o
 n("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=M.get(n),i,o;if(i=M.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=I(n),r&&-1===O(m,n)){if(P(M.dependencies(n),function(t){e(t)}),t.plugins[n])return;o=new r(t,i,t.$),t.plugins[n]=o,o.init&&(o.init(t,i),m.push(n))}}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,h,p,m=[];if(this.editorManager.i18n.setCode(n.language),t.rtl=n.rtl_ui||this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||B.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=D.get(n.theme),t.theme=new c(t,D.ur
 ls[n.theme]),t.theme.init&&t.theme.init(t,D.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""),t.$)):t.theme=n.theme),P(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,h=/^[0-9\.]+(|px)$/i,h.test(""+i)&&(i=Math.max(parseInt(i,10),100)),h.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.i
 d=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&P(H(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"<html><head>",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+='<base href="'+t.documentBaseURI.getURI()+'" />'),!w.caretAfter&&n.ie7_compat&&(t.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'),t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',p=0;p<t.contentCSS.length;p++){var g=t.contentCSS[p];t.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+E._addCacheSuffix(g)+'" />',t.loadedCSS
 [g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),n.content_security_policy&&(t.iframeHTML+='<meta http-equiv="Content-Security-Policy" content="'+n.content_security_policy+'" />'),t.iframeHTML+='</head><body id="'+d+'" class="mce-content-body '+f+'" data-id="'+t.id+'"><br></body></html>';var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';document.domain!=location.hostname&&w.ie&&w.ie<12&&(u=v);var y=B.create("iframe"
 ,{id:t.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}});if(y.onload=function(){y.onload=null,t.fire("load")},B.setAttrib(y,"src",u||'javascript:""'),t.contentAreaContainer=l.iframeContainer,t.iframeElement=y,s=B.add(l.iframeContainer,y),V)try{t.getDoc()}catch(b){s.src=u=v}l.editorContainer&&(B.get(l.editorContainer).style.display=t.orgDisplay,t.hidden=B.isHidden(l.editorContainer)),t.getElement().style.display="none",B.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,r=n.settings,s=n.getElement(),h=n.getDoc(),p,m;r.inline||(n.getElement().style.visibility=n.orgVisibility),t||r.content_editable||(h.open(),h.write(n.iframeHTML),h.close()),r.co
 ntent_editable&&(n.on("remove",function(){var e=this.getBody();B.removeClass(e,"mce-content-body"),B.removeClass(e,"mce-edit-focus"),B.setAttrib(e,"contentEditable",null)}),B.addClass(s,"mce-content-body"),n.contentDocument=h=r.content_document||document,n.contentWindow=r.content_window||window,n.bodyElement=s,r.content_document=r.content_window=null,r.root_name=s.nodeName.toLowerCase()),p=n.getBody(),p.disabled=!0,n.readonly=r.readonly,n.readonly||(n.inline&&"static"==B.getStyle(p,"position",!0)&&(p.style.position="relative"),p.contentEditable=n.getParam("content_editable_state",!0)),p.disabled=!1,n.editorUpload=new T(n),n.schema=new b(r),n.dom=new e(h,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:r.force_hex_style_colors,class_filter:r.class_filter,update_styles:!0,root_element:n.inline?n.getBody():null,collect:r.content_editable,schema:n.
 schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new C(r,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)if(i=e[r],a=i.attr(t),s="data-mce-"+t,!i.attributes.map[s]){if(0===a.indexOf("data:")||0===a.indexOf("blob:"))continue;"style"===t?(a=o.serializeStyle(o.parseStyle(a),i.name),a.length||(a=null),i.attr(s,a),i.attr(t,a)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name))}}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("type")||"no/type",0!==r.indexOf("mce-")&&n.attr("type","mce-"+r)}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2
 ,h3,h4,h5,h6,div",function(e){for(var t=e.length,r,i=n.schema.getNonEmptyElements();t--;)r=e[t],r.isEmpty(i)&&(r.append(new o("br",1)).shortEnded=!0)}),n.serializer=new a(r,n),n.selection=new l(n.dom,n.getWin(),n.serializer,n),n.formatter=new c(n),n.undoManager=new u(n),n.forceBlocks=new f(n),n.enterKey=new d(n),n._nodeChangeDispatcher=new i(n),n._selectionOverrides=new R(n),n.fire("PreInit"),r.browser_spellcheck||r.gecko_spellcheck||(h.body.spellcheck=!1,B.setAttrib(p,"spellcheck","false")),n.fire("PostRender"),n.quirks=new x(n),r.directionality&&(p.dir=r.directionality),r.nowrap&&(p.style.whiteSpace="nowrap"),r.protect&&n.on("BeforeSetContent",function(e){P(r.protect,function(t){e.content=e.content.replace(t,function(e){return"<!--mce:protected "+escape(e)+"-->"})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),r.padd_empty_edit
 or&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,n.bindPendingEventDelegates(),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(m="",P(n.contentStyles,function(e){m+=e+"\r\n"}),n.dom.addStyle(m)),P(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),r.auto_focus&&N.setEditorTimeout(n,function(){var e;e=r.auto_focus===!0?n:n.editorManager.get(r.auto_focus),e.destroyed||e.focus()},100),s=h=p=null},focus:function(e){function t(e){return n.dom.getParent(e,function(e){return"true"===n.dom.getContentEditable(e)})}var n=this,r=n.selection,i=n.settings.content_edit
 able,o,a,s=n.getDoc(),l=n.getBody(),c;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),c=t(r.getNode()),n.$.contains(l,c))return c.focus(),r.normalize(),void n.editorManager.setActive(n);if(i||(w.opera||n.getBody().focus(),n.getWin().focus()),W||i){if(l.setActive)try{l.setActive()}catch(u){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.setActive(n)},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?F(r):0,n=F(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]
 ||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?P(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),e.length>1?i[I(e[0])]=I(e[1]):i[I(e[0])]=I(e)}):i=r,i):r},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuI
 tems[e]=t},addContextToolbar:function(e,t){var n=this,r;n.contextToolbars=n.contextToolbars||[],"string"==typeof e&&(r=e,e=function(e){return n.dom.is(e,r)}),n.contextToolbars.push({predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){var e=this;e.hidden&&(e.hidden=!1,e.inline?e.getBody().contentEditable=!0:(B.show(e.getContainer()),B.hide(e.id)),e.load(),e.fire
 ("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(V&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e==e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(B.hide(e.getContainer()),B.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),"raw"==e.format&&t.fire("RawSaveContent",e),r
 =e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=B.getParent(t.id,"form"))&&P(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&t.setDirty(!1),r},setContent:function(e,t){var n=this,r=n.getBody(),i,o;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(o=V&&11>V?"":'<br data-mce-bogus="1">',"TABLE"==r.nodeName?e="<tr><td>"+o+"</td></tr>":/^(UL|OL)$/.test(r.nodeName)&&(e="<li>"+o+"</li>"),i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=o,e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):V||e||(e='<br data-mce-bogus="1">'),n.dom.setHTML(r,e),n.f
 ire("SetContent",t)):("raw"!==t.format&&(e=new s({validate:n.validate},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=I(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?t.serializer.getTrimmedContent():"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),"text"!=e.format?e.content=I(n):e.content=n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e,t){t&&(e=L({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},setDirty:function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!=t&&this.fire("dirty")},setMode:function(e){S.setMode(this,
 e)},getContainer:function(){var e=this;return e.container||(e.container=B.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=B.get(this.id)),this.targetElm},getWin:function(){var e=this,t;return e.contentWindow||(t=e.iframeElement,t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:fu
 nction(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),P(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||!n.hasVisual?i.removeClass(e,o):i.addClass(e,o));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&n.hasVisual?i.addClass(e,o):i.removeClass(e,o)))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;e.removed||(e.save(),e.removed=1,e.unbindAllNativeEvents(),e.hasHiddenInput&&B.remove(e.getElement().nextSibling),e.inline||(V&&10>V&&e.getDoc().execCommand("SelectAll",!1,null),B.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null),e.fire(&quo
 t;remove"),e.editorManager.remove(e),B.remove(e.getContainer()),e._selectionOverrides.destroy(),e.editorUpload.destroy(),e.destroy())},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),B.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.bodyElement=t.contentDocument=t.contentWindow=null,t.iframeElement=t.targetElm=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()},_refreshContentEditable:function(
 ){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return W?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},L(A.prototype,_),A}),r(Ge,[],function(){var e={},t="en";return{setCode:function(e){e&&(t=e,this.rtl=this.data[e]?"rtl"===this.data[e]._dir:!1)},getCode:function(){return t},rtl:!1,add:function(t,n){var r=e[t];r||(e[t]=r={});for(var i in n)r[i]=n[i];this.setCode(t)},translate:function(n){var r;if(r=e[t],r||(r={}),"undefined"==typeof n)return n;if("string"!=typeof n&&n.raw)return n.raw;if(n.push){var i=n.slice(1);n=(r[n[0]]||n[0]).replace(/\{([0-9]+)\}/g,function(e,t){return i[t]})}return(r[n]||n).replace(/{context:\w+}$/,"")},data:e}}),r(Je,[w,u,h],function(e,t,n){function r(e){function l(){try{return document.activeElement}catch(e){return document.body}}function c(e,t){if(t&&t.startContainer){i
 f(!e.isChildOf(t.startContainer,e.getRoot())||!e.isChildOf(t.endContainer,e.getRoot()))return;return{startContainer:t.startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset}}return t}function u(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function d(e){return!!s.getParent(e,r.isEditorUIElement)}function f(r){var f=r.editor;f.on("init",function(){(f.inline||n.ie)&&("onbeforedeactivate"in document&&n.ie<9?f.dom.bind(f.getBody(),"beforedeactivate",function(e){if(e.target==f.getBody())try{f.lastRng=f.selection.getRng()}catch(t){}}):f.on("nodechange mouseup keyup",function(e){var t=l();"nodechange"==e.type&&e.selectionChange||(t&&t.id==f.id+"_ifr"&&(t=f.getBody()),f.dom.isChildOf(t,f.getBody())&&(f.lastRng=f.selection.getRng()))}),n.webkit&
 amp;&!i&&(i=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(f.lastRng=n)}},s.bind(document,"selectionchange",i)))}),f.on("setcontent",function(){f.lastRng=null}),f.on("mousedown",function(){f.selection.lastFocusBookmark=null}),f.on("focusin",function(){var t=e.focusedEditor,n;f.selection.lastFocusBookmark&&(n=u(f,f.selection.lastFocusBookmark),f.selection.lastFocusBookmark=null,f.selection.setRng(n)),t!=f&&(t&&t.fire("blur",{focusedEditor:f}),e.setActive(f),e.focusedEditor=f,f.fire("focus",{blurredEditor:t}),f.focus(!0)),f.lastRng=null}),f.on("focusout",function(){t.setEditorTimeout(f,function(){var t=e.focusedEditor;d(l())||t!=f||(f.fire("blur",{focusedEditor:null}),e.focusedEditor=null,f.selection&&(f.selection.lastFocusBookmark=null))})}),o||(o=function(t){var n=e.activeEditor;n&&amp
 ;t.target.ownerDocument==document&&(n.selection&&t.target!=n.getBody()&&(n.selection.lastFocusBookmark=c(n.dom,n.lastRng)),t.target==document.body||d(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},s.bind(document,"focusin",o)),f.inline&&!a&&(a=function(t){var n=e.activeEditor;if(n.inline&&!n.dom.isChildOf(t.target,n.getBody())){var r=n.selection.getRng();r.collapsed||(n.lastRng=r)}},s.bind(document,"mouseup",a))}function h(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(s.unbind(document,"selectionchange",i),s.unbind(document,"focusin",o),s.unbind(document,"mouseup",a),i=o=a=null)}e.on("AddEditor",f),e.on("RemoveEditor",h)}var i,o,a,s=e.DOM;return r.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},r}),r(Qe,[Ke,g,w,te,h,m,oe,Ge,Je],function(e,
 t,n,r,i,o,a,s,l){function c(e){m(b.editors,function(t){t.fire("ResizeWindow",e)})}function u(e,n){n!==C&&(n?t(window).on("resize",c):t(window).off("resize",c),C=n)}function d(e){var t=b.editors,n;delete t[e.id];for(var r=0;r<t.length;r++)if(t[r]==e){t.splice(r,1),n=!0;break}return b.activeEditor==e&&(b.activeEditor=t[0]),b.focusedEditor==e&&(b.focusedEditor=null),n}function f(e){return e&&!(e.getContainer()||e.getBody()).parentNode&&(d(e),e.unbindAllNativeEvents(),e.destroy(!0),e=null),e}var h=n.DOM,p=o.explode,m=o.each,g=o.extend,v=0,y,b,C=!1;return b={$:t,majorVersion:"4",minorVersion:"3.3",releaseDate:"2016-01-14",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o,a;if(n=document.location.href,/^[^:]+:\/\/\/?[^\/]+\//.test(n)&&(n=n.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"
 )),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else{for(var s=document.getElementsByTagName("script"),c=0;c<s.length;c++){a=s[c].src;var u=a.substring(a.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(a)){-1!=u.indexOf(".min")&&(i=".min"),t=a.substring(0,a.lastIndexOf("/"));break}}!t&&document.currentScript&&(a=document.currentScript.src,-1!=a.indexOf(".min")&&(i=".min"),t=a.substring(0,a.lastIndexOf("/")))}e.baseURL=new r(n).toAbsolute(t),e.documentBaseURL=n,e.baseURI=new r(e.baseURL),e.suffix=i,e.focusManager=new l(e)},init:function(t){function n(e){var t=e.id;return t||(t=e.name,t=t&&!h.get(t)?e.name:h.uniqueId(),e.setAttribute("id",t)),t}function r(t,n,r){if(!f(s.get(t))){var i=new e(t,n,s);i.targetElm=i.targetElm||r,l.push(i),i.render()}}function i(e){var n=t[e];if(n)return n.apply(s,Array.prototy
 pe.slice.call(arguments,2))}function o(e,t){return t.constructor===RegExp?t.test(e.className):h.hasClass(e,t)}function a(){var e,s;if(h.unbind(window,"ready",a),i("onpageload"),t.types)return void m(t.types,function(e){m(h.select(e.selector),function(i){r(n(i),g({},t,e),i)})});if(t.selector)return void m(h.select(t.selector),function(e){r(n(e),t,e)});switch(t.target&&r(n(t.target),t),t.mode){case"exact":e=t.elements||"",e.length>0&&m(p(e),function(e){var n;(n=h.get(e))?r(e,t,n):m(document.forms,function(n){m(n.elements,function(n){n.name===e&&(e="mce_editor_"+v++,h.setAttrib(n,"id",e),r(e,t,n))})})});break;case"textareas":case"specific_textareas":m(h.select("textarea"),function(e){t.editor_deselector&&o(e,t.editor_deselector)||(!t.editor_selector||o(e,t.editor_selector))&&r(n(e),t,e)})}t.oninit&&(e=s=0,m(l,function(t){s++,t.initialized?e++:t.on
 ("init",function(){e++,e==s&&i("oninit")}),e==s&&i("oninit")}))}var s=this,l=[];s.settings=t,h.bind(window,"ready",a)},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),u(n,!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),y||(y=function(){t.fire("BeforeUnload")},h.bind(window,"beforeunload",y)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;{if(e)return"string"==typeof e?(e=e.selector||e,void m(h.select(e),function(e){i=r[e.id],i&&t.remove(i)})):(i=e,r[i.id]?(d(i)&&t.fire("RemoveEditor",{editor:i}),r.length||h.unbind(window,"beforeunload",y),i.remove(),u(r,r.length>0),i):null);for(n=r.length-1;n>=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(
 t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){m(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!=e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},g(b,a),b.setup(),window.tinymce=window.tinyMCE=b,b}),r(Ze,[Qe,m],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.conv
 ert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(n,r){"html4"===t.settings.schema&&e(r,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(et,[oe,m],function(e,t){var n={send:function(e){function r(){!e.async||4==i.readyState||o++>1e4?(e.success&&1e4>o&&200==i.status?e.success.call(e.success_scope,""+i.responseText,i,e):e.error&&e.error.call(e.error_scope,o>1e4?"TIMED_OUT":"GENERAL",i,e),i=null):setTimeout(r,10)}var i,o=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.
 error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n.fire("beforeInitialize",{settings:e}),i=new XMLHttpRequest){if(i.overrideMimeType&&i.overrideMimeType(e.content_type),i.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(i.withCredentials=!0),e.content_type&&i.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&t.each(e.requestheaders,function(e){i.setRequestHeader(e.key,e.value)}),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i=n.fire("beforeSend",{xhr:i,settings:e}).xhr,i.send(e.data),!e.async)return r();setTimeout(r,10)}}};return t.extend(n,e),n}),r(tt,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb   t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'==
 =n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r<t.length;r++)i+=(r>0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(nt,[tt,et,m],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=
 function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(rt,[w],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(it,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i
 =o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(ot,[w,d,E,N,m,h],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManag
 er,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(at,[ne,m],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containerClass)},applyClasses:function(e){var t=this,n=t.settings,r,i,o,a;r=n.firstControlClass,i=n.lastControlClass,e.each(function(e){e.classes.remove(r).remove(i).add(n.controlClass),e.visible()&&(o||(o=e),a=e)}),o&&o.classes.add(r),a&&a.classes.add(i)},renderHtml:function(e){var t=this,n="";return t.applyClasses(e.items()),e.items().each(function(e){n+=e.renderHtml()}),n},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),r(st,[at],function(e){return e.extend({Defaults:{containerClass:&qu
 ot;abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'<div id="'+e._id+'-absend" class="'+e.classPrefix+'abs-end"></div>'+this._super(e)}})}),r(lt,[ke],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t._super(e),e=t.settings,n=t.settings.size,t.on("click mousedown",function(e){e.preventDefault()}),t.on("touchstart",function(e){t.fire("click",e),e.preventDefault()}),e.subtype&&t.classes.add(e.subtype),n&&t.classes.add("btn-"+n),e.icon&&t.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e=this.getEl().firstChild,t
 ;e&&(t=e.style,t.width=t.height="100%"),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.state.get("icon"),i,o=e.state.get("text"),a="";return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",o&&(e.classes.add("btn-has-text"),a='<span class="'+n+'txt">'+e.encode(o)+"</span>"),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'<div id="'+t+'" class="'+e.classes+'" tabindex="-1" aria-labelledby="'+t+'"><button role="presentation" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+i+"></i>":"")+a+"</button></div>"},bindStates:function(){function e
 (e){var i=n("span."+r,t.getEl());e?(i[0]||(n("button:first",t.getEl()).append('<span class="'+r+'"></span>'),i=n("span."+r,t.getEl())),i.html(t.encode(e))):i.remove(),t.classes.toggle("btn-has-text",!!e)}var t=this,n=t.$,r=t.classPrefix+"txt";return t.state.on("change:text",function(t){e(t.value)}),t.state.on("change:icon",function(n){var r=n.value,i=t.classPrefix;t.settings.icon=r,r=r?i+"ico "+i+"i-"+t.settings.icon:"";var o=t.getEl().firstChild,a=o.getElementsByTagName("i")[0];r?(a&&a==o.firstChild||(a=document.createElement("i"),o.insertBefore(a,o.firstChild)),a.className=r):a&&o.removeChild(a),e(t.state.get("text"))}),t._super()}})}),r(ct,[ge],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-gro
 up"),e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}})}),r(ut,[ke],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked);
+},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'" unselectable="on" aria-labelledby="'+t+'-al" tabindex="-1"><i class="'+n+"ico "+n+'i-checkbox"></i><span id="'+t+'-al" class="'+n+'label">'+e.encode(e.state.get("text"))+"</span></div>"},bindStates:function(){function e(e){t.classes.toggle("checked",e),t.aria("checked",e)}var t=this;return t.state.on("change:text",function(e){t.getEl("al").firstChild.data=t.translate(e.value)}),t.state.on("change:checked change:value",function(n){t.fire("change"),e(n.value)}),t.state.on("change
 :icon",function(e){var n=e.value,r=t.classPrefix;if("undefined"==typeof n)return t.settings.icon;t.settings.icon=n,n=n?r+"ico "+r+"i-"+t.settings.icon:"";var i=t.getEl().firstChild,o=i.getElementsByTagName("i")[0];n?(o&&o==i.firstChild||(o=document.createElement("i"),i.insertBefore(o,i.firstChild)),o.className=n):o&&i.removeChild(o)}),t.state.get("checked")&&e(!0),t._super()}})}),r(dt,[ke,pe,ce,g],function(e,t,n,r){return e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.classes.add("combobox"),t.subinput=!0,t.ariaTarget="inp",e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){var i=n.target,o=t.getEl();if(r.contains(o,i)||i==o)for(;i&&i!=o;)i.id&&-1!=i.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].foc
 us())),i=i.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){var r=t.state.get("value"),i=t.getEl("inp").value;return e.preventDefault(),t.state.set("value",i),r!=i&&t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),t.on("keyup",function(e){"INPUT"==e.target.nodeName&&t.state.set("value",e.target.value)})},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){
 t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),i=e.getEl("open"),o=e.layoutRect(),a,s;a=i?o.w-n.getSize(i).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(s=e.layoutRect().h-2+"px"),r(t.firstChild).css({width:a,lineHeight:s}),e._super(),e},postRender:function(){var e=this;return r(this.getEl("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()}
 ,renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=e.state.get("value")||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e.state.get("text"),(o||a)&&(s='<div id="'+t+'-open" class="'+r+"btn "+r+'open" tabIndex="-1" role="button"><button id="'+t+'-action" type="button" hidefocus="1" tabindex="-1">'+("caret"!=o?'<i class="'+o+'"></i>':'<i class="'+r+'caret"></i>')+(
 a?(o?" ":"")+a:"")+"</button></div>",e.classes.add("has-open")),'<div id="'+t+'" class="'+e.classes+'"><input id="'+t+'-inp" class="'+r+'textbox" value="'+e.encode(i,!1)+'" hidefocus="1"'+l+' placeholder="'+e.encode(n.placeholder)+'" />'+s+"</div>"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl("inp").value!=t.value&&(e.getEl("inp").value=t.value)}),e.state.on("change:disabled",function(t){e.getEl("inp").disabled=t.value}),e._super()},remove:function(){r(this.getEl("inp")).off(),this._sup
 er()}})}),r(ft,[dt],function(e){return e.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl().getElementsByTagName("i")[0];if(t)try{t.style.background=e}catch(n){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e._rendered&&e.repaintColor(t.value)}),e._super()}})}),r(ht,[lt,we],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerE
 lm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),r(pt,[ht,w],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classP
 refix,r=e.state.get("text"),i=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"",a="";return r&&(e.classes.add("btn-has-text"),a='<span class="'+n+'txt">'+e.encode(r)+"</span>"),'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(i?'<i class="'+i+'"'+o+"></i>":"")+'<span id="'+t+'-preview" class="'+n+'preview"></span>'+a+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1"> <i class="'+n+'caret"&gt
 ;</i></button></div>'},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(mt,[],function(){function e(e){function i(e,i,o){var a,s,l,c,u,d;return a=0,s=0,l=0,e/=255,i/=255,o/=255,u=t(e,t(i,o)),d=n(e,n(i,o)),u==d?(l=u,{h:0,s:0,v:100*l}):(c=e==u?i-o:o==u?e-i:o-e,a=e==u?3:o==u?1:5,a=60*(a-c/(d-u)),s=(d-u)/d,l=d,{h:r(a),s:r(100*s),v:r(100*l)})}function o(e,i,o){var a,s,l,c;if(e=(parseInt(e,10)||0)%360,i=parseInt(i,10)/100,o=parseInt(o,10)/100,i=n(0,t(i,1)),o=n(0,t(o,1)),0===i)return void(d=f=h=r(255*o));switch(a=e/60,s=o*i,l=s*(1-Math.abs(a%2-1)),c=o-s,Math.floor(a)){case 0:d=s,f=l,h=0;break;case 1:d=l,f=s,h=0;break;case 2:d=0,f=s,h=l;break;case 3:d=0,f=l,h=s;break;case 4:d=l,f=0,h=s;break;case 5:d=s,f=0,h=l;bre
 ak;default:d=f=h=0}d=r(255*(d+c)),f=r(255*(f+c)),h=r(255*(h+c))}function a(){function e(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+e(d)+e(f)+e(h)}function s(){return{r:d,g:f,b:h}}function l(){return i(d,f,h)}function c(e){var t;return"object"==typeof e?"r"in e?(d=e.r,f=e.g,h=e.b):"v"in e&&o(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(d=parseInt(t[1],10),f=parseInt(t[2],10),h=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(d=parseInt(t[1],16),f=parseInt(t[2],16),h=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(d=parseInt(t[1]+t[1],16),f=parseInt(t[2]+t[2],16),h=parseInt(t[3]+t[3],16)),d=0>d?0:d>255?255:d,f=0>f?0:f>255?255:f,h=0>h?0:h>255?255:h,u}var u=this,d=0,f=0,h=0;e&&c(e),u.toRgb=s,u.toHsv=l,u.toHex=a,u.parse=c}var t=Math.min,n=Math.max,r=Math.round;return e}),r(gt,[ke,ve,ce,mt],functi
 on(e,t,n,r){return e.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){function e(e,t){var r=n.getPos(e),i,o;return i=t.pageX-r.x,o=t.pageY-r.y,i=Math.max(0,Math.min(i/e.clientWidth,1)),o=Math.max(0,Math.min(o/e.clientHeight,1)),{x:i,y:o}}function i(e,t){var i=(360-e.h)/360;n.css(d,{top:100*i+"%"}),t||n.css(h,{left:e.s+"%",top:100-e.v+"%"}),f.style.background=new r({s:100,v:100,h:e.h}).toHex(),s.color().parse({s:e.s,v:e.v,h:e.h})}function o(t){var n;n=e(f,t),c.s=100*n.x,c.v=100*(1-n.y),i(c),s.fire("change")}function a(t){var n;n=e(u,t),c=l.toHsv(),c.h=360*(1-n.y),i(c,!0),s.fire("change")}var s=this,l=s.color(),c,u,d,f,h;u=s.getEl("h"),d=s.getEl("hp"),f=s.getEl("sv"),h=s.getEl("svp"),s._repaint=function(){c=l.toHsv(),i(c)},s._super(),s._svdraghelper=new t(s._id+"-sv",{start:o,drag:o}),s._hdraghelper=new t(s._id+"-h&quo
 t;,{start:a,drag:a}),s._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){var t=this;return arguments.length?(t.color().parse(e),void(t._rendered&&t._repaint())):t.color().toHex()},color:function(){return this._color||(this._color=new r),this._color},renderHtml:function(){function e(){var e,t,n="",i,a;for(i="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",a=o.split(","),e=0,t=a.length-1;t>e;e++)n+='<div class="'+r+'colorpicker-h-chunk" style="height:'+100/t+"%;"+i+a[e]+",endColorstr="+a[e+1]+");-ms-"+i+a[e]+",endColorstr="+a[e+1]+')"></div>';return n}var t=this,n=t._id,r=t.classPrefix,i,o="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",a="background: -ms-linear-gradient(top,"+o+");background: linear-gradient(to bottom,"+o+");
 ";return i='<div id="'+n+'-h" class="'+r+'colorpicker-h" style="'+a+'">'+e()+'<div id="'+n+'-hp" class="'+r+'colorpicker-h-marker"></div></div>','<div id="'+n+'" class="'+t.classes+'"><div id="'+n+'-sv" class="'+r+'colorpicker-sv"><div class="'+r+'colorpicker-overlay1"><div class="'+r+'colorpicker-overlay2"><div id="'+n+'-svp" class="'+r+'colorpicker-selector1"><div class="'+r+'colorpicker-selector2"></div></div></div></div></div>'+i+"</div>"}})}),r(vt,[ke],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.classes.add("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select&q
 uot;,{value:t.row()[n],index:n})}),t.row(t.settings.row)},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){var e=this;return'<div id="'+e._id+'" class="'+e.classes+'">'+e._getDataPathHtml(e.state.get("row"))+"</div>"},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(e){var t=this,n=e||[],r,i,o="",a=t.classPrefix;for(r=0,i=n.length;i>r;r++)o+=(r>0?'<div class="'+a+'divider" aria-hidden="true"> '+t.settings.delimiter+" </div>":"")+'<div role="button" class="'+a+"path-item"+(r==i-1?" "+a+"last":"")+'" data-index="'+r+'" tabindex=
 "-1" id="'+t._id+"-"+r+'" aria-level="'+r+'">'+n[r].name+"</div>";return o||(o='<div class="'+a+'path-item">\xa0</div>'),o}})}),r(yt,[vt,Qe],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return r.settings.elementpath!==!1&&(n.on("select",function(e){r.focus(),r.selection.select(this.row()[e.index].element),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});if(s.isDefaultPrevented()||i.push({name:s.name,element:o[a]}),s.isPropagationStopped())break}n.row(i)})),n._super()}})}),r(bt,[ge]
 ,function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<div id="'+e._id+'-title" class="'+n+'title">'+e.settings.title+"</div>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}})}),r(Ct,[ge,bt,m],function(e,t,n){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,r=e.items();e.settings.formItemDefaults||(e.set
 tings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),r.each(function(r){var i,o=r.settings.label;o&&(i=new t(n.extend({items:{type:"label",id:r._id+"-l",text:o,flex:0,forId:r._id,disabled:r.disabled()}},e.settings.formItemDefaults)),i.type="formitem",r.aria("labelledby",r._id+"-l"),"undefined"==typeof r.settings.flex&&(r.settings.flex=1),e.replace(r,i),i.add(r))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.fromJSON(e.settings.data)},bindStates:function(){function e(){var e=0,n=[],r,i,o;if(t.settings.labelGapCalc!==!1)for(o="children"==t.settings.labelGapCalc?t.find("formitem"):t.items(),o.filter("formitem").each(function(t){var r=t.items()[0],i=r.getEl().clientWidth;e=i>e?i:e,n.push(r)}),i=t.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth
 =e+i}var t=this;t._super(),t.on("show",e),e()}})}),r(xt,[Ct],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'<fieldset id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<legend id="'+e._id+'-title" class="'+n+'fieldset-title">'+e.settings.title+"</legend>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></fieldset>"}})}),r(wt,[dt,m],function(e,t){return e.extend({init:function(e){var n=this,r=tinymce.activeEditor,i=r.settings,o,a,s;e.spellcheck=!1,s=i.file_picker
 _types||i.file_browser_callback_types,s&&(s=t.makeMap(s,/[, ]/)),(!s||s[e.filetype])&&(a=i.file_picker_callback,!a||s&&!s[e.filetype]?(a=i.file_browser_callback,!a||s&&!s[e.filetype]||(o=function(){a(n.getEl("inp").id,n.value(),e.filetype,window)})):o=function(){var i=n.fire("beforecall").meta;i=t.extend({filetype:e.filetype},i),a.call(r,function(e,t){n.value(e).fire("change",{meta:t})},n.value(),i)}),o&&(e.icon="browse",e.onaction=o),n._super(e)}})}),r(Et,[st],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Nt,[st],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v=[],y,b,C,x,w,E,N,_,S,k,T,R,A,B,D,M,L,P,H,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(&q
 uot;:visible"),i=e.layoutRect(),o=e.paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",_="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",H="left",L="w",D="x",M="innerW",P="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",_="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",H="top",L="h",D="y",M="innerH",P="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],E=u=0,t=0,n
 =r.length;n>t;t++)h=r[t],p=h.layoutRect(),m=h.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,p[k]&&v.push(h),p.flex=g),d-=p[_],y=o[H]+p[P]+o[O],y>E&&(E=y);if(x={},0>d?x[_]=i[_]-d+i[A]:x[_]=i[R]-d+i[A],x[P]=E+i[I],x[B]=i[R]-d,x[F]=E,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)h=v[t],p=h.layoutRect(),b=p[k],y=p[_]+p.flex*C,y>b?(d-=p[k]-p[_],u-=p.flex,p.flex=0,p.maxFlexSize=b):p.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[D]=o[H],t=0,n=r.length;n>t;t++)h=r[t],p=h.layoutRect(),y=p.maxFlexSize||p[_],"center"===s?x[D]=Math.round(i[M]/2-p[L]/2):"stretch"===s?(x[L]=z(p[P]||0,i[M]-o
 [H]-o[O]),x[D]=o[H]):"end"===s&&(x[D]=i[M]-p[L]-o.top),p.flex>0&&(y+=p.flex*C),x[N]=y,x[S]=w,h.layoutRect(x),h.recalc&&h.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(_t,[at],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}})}),r(St,[he,ke,we,m,Qe,h],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){
 e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a,o.cmd=e.cmd}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic&qu
 ot;,icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:&q
 uot;alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this;t.parent().on("show",function(){var n,r;n=t.settings.format,n&&(t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))),r=t.settings.cmd,r&&t.active(e.queryCommandState(r))})},onclick:function(){this.settings.format&&c(this.settings.format),this.settings.cmd&&e.execCommand(this.settings.cmd)}}}}function o(t){return function(){var n=this;e.formatter?e.formatter.formatChanged(t,function(e){n.active(e)}):e.on("init",function(){e.formatter.formatC
 hanged(t,function(e){n.active(e)})})}}function a(t){return function(){function n(){return e.undoManager?e.undoManager[t]():!1}var r=this;t="redo"==t?"hasRedo":"hasUndo",r.disabled(!n()),e.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){r.disabled(e.readonly||!n())})}}function l(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function c(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var u;u=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:o(n),onclick:function(){c(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],co
 py:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull&qu
 ot;],alignnone:["No alignment","JustifyNone"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:o(n)})}),e.addButton("undo",{tooltip:"Undo",onPostRender:a("undo"),cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:a("undo"),cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:a("redo"),cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:l,cmd:"mceToggleVisualAid"}),e.addButton("remove",{tooltip:"Remove
 ",icon:"remove",cmd:"Delete"}),s({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:u}),e.addButton("
 formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:c,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webd
 ings;Wingdings=wingdings,zapf dingbats",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){var t=e,r=e,i=e.split("=");i.length>1&&(t=i[0],r=i[1]),n.push({text:t,value:r})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.ex
 ecCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:u})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(kt,[st],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,h,p,m,g,v,y,b,C,x,w,E,N=[],_=[],S,k,T,R,A,B;t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e.paddingBox,A="reverseRows"in t?t.reverseRows:e.isRtl(),C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]);for(d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)_.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.mi
 nH,N[d]=S>N[d]?S:N[d],_[f]=k>_[f]?k:_[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,E=0,f=0;n>f;f++)E+=_[f]+(f>0?b:0),R-=(f>0?b:0)+_[f];if(w+=g.left+g.right,E+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=E+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var D;D="start"==t.packV?0:R>0?Math.floor(R/n):0;var M=0,L=t.flexWidths;if(L)for(d=0;d<L.length;d++)M+=L[d];else M=r;var P=T/M;for(d=0;r>d;d++)N[d]+=L?L[d]*P:P;for(p=g.top,f=0;n>f;f++){for(h=g.left,s=_[f]+D,d=0;r>d&&(B=A?f*r+r-1-d:f*r+d,u=i[B],u);d++)m=u.settings,c=u.layoutRect(),a=Math.max(N[d
 ],c.startMinWidth),c.x=h,c.y=p,v=m.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=h+a/2-c.w/2:"right"==v?c.x=h+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=p+s/2-c.h/2:"bottom"==v?c.y=p+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),h+=a+y,u.recalc&&u.recalc();p+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var H=e.parent();H&&(H._lastRect=null,H.recalc())}}})}),r(Tt,[ke,u],function(e,t){return e.extend({renderHtml:function(){var e=this;return e.classes.add("iframe"),e.canFocus=!1,'<iframe id="'+e._id+'" class="'+e.classes+'" tabindex="-1" src="'+(e.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(e){this.getEl().src=e},html:function(e,n){var r=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,n&
 &n()):t.setTimeout(function(){r.html(e)}),this}})}),r(Rt,[ke,ce],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.classes.add("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},renderHtml:function(){var e=this,t=e.settings.forId;return'<label id="'+e._id+'" class="'+e.classes+'"'+(t?' for="'+t+'"':"")+">"+e.encode(e.state.get("text"))+"</l
 abel>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value))}),e._super()}})}),r(At,[ge],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.classes.add("toolbar")},postRender:function(){var e=this;return e.items().each(function(e){e.classes.add("toolbar-item")}),e._super()}})}),r(Bt,[At],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Dt,[lt,pe,Bt],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function()
 {var e=this,n;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(n=e.state.get("menu")||[],n.length?n={type:"menu",items:n}:n.type=n.type||"menu",n.renderTo?e.menu=n.parent(e).show().renderTo():e.menu=t.create(n).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},act
 iveMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon,o,a=e.state.get("text"),s="";return o=e.settings.image,o?(i="none","string"!=typeof o&&(o=window.getSelection?o[0]:o[1]),o=" style=\"background-image: url('"+o+"')\""):o="",a&&(e.classes.add("btn-has-text"),s='<span class="'+r+'txt">'+e.encode(a)+"</span>"),i=e.settings.icon?r+"ico "+r+"i-"+i:"",e.aria("role",e.parent()instanceof n?"menuitem":"button"),'<div id="'+t+'" class="'+e.classes+'" tabindex="-1" aria-labelledby="'+t+'"><button id="'+t+'-open" role="presentation" type="button" tabindex="-1">'+(i?'<i class="'+i+'"'+o+"></i>"
 :"")+s+' <i class="'+r+'caret"></i></button></div>'},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return i}),r(Mt,[ke,pe,h],function(e,t,n){return e.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t=this,n;t._super(e
 ),e=t.settings,t.classes.add("menu-item"),e.menu&&t.classes.add("menu-item-expand"),e.preview&&t.classes.add("menu-item-preview"),n=t.state.get("text"),("-"===n||"|"===n)&&(t.classes.add("menu-item-sep"),t.aria("role","separator"),
+t.state.set("text","-")),e.selectable&&(t.aria("role","menuitemcheckbox"),t.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||t.classes.add("menu-item-normal"),t.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&t.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e=this,n=e.settings,r,i=e.parent();if(i.items().each(function(t){t!==e&&t.hideMenu()}),n.menu){r=e.menu,r?r.show():(r=n.menu,r.length?r={type:"menu",items:r}:r.type=r.type||"menu",i.settings.itemDefaults&&(r.itemDefaults=i.settings.itemDefaults),r=e.menu=t.create(r).parent(e).renderTo(),r.reflow(),r.on("cancel",function(t){t.stopPropagation(),e.focus(),r.hide()}),r.on("show hide",function(e){e.control.items().each(function(e){e.active(e.settings.selected)})}).fire(
 "show"),r.on("hide",function(t){t.control===r&&e.classes.remove("selected")}),r.submenu=!0),r._parentMenu=i,r.classes.add("menu-sub");var o=r.testMoveRel(e.getEl(),e.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);r.moveRel(e.getEl(),o),r.rel=o,o="menu-sub-"+o,r.classes.remove(r._lastRel).add(o),r._lastRel=o,e.classes.add("selected"),e.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){function e(e){var t,r,i={};for(i=n.mac?{alt:"&#x2325;",ctrl:"&#x2318;",shift:"&#x21E7;",meta:"&#x2318;"}:{meta:"Ctrl"},e=e.split("+"),t=0;t<e.length;t++)r=i[e[t].toLowerCase()],
 r&&(e[t]=r);return e.join("+")}var t=this,r=t._id,i=t.settings,o=t.classPrefix,a=t.encode(t.state.get("text")),s=t.settings.icon,l="",c=i.shortcut;return s&&t.parent().classes.add("menu-has-icons"),i.image&&(l=" style=\"background-image: url('"+i.image+"')\""),c&&(c=e(c)),s=o+"ico "+o+"i-"+(t.settings.icon||"none"),'<div id="'+r+'" class="'+t.classes+'" tabindex="-1">'+("-"!==a?'<i class="'+s+'"'+l+"></i>\xa0":"")+("-"!==a?'<span id="'+r+'-text" class="'+o+'text">'+a+"</span>":"")+(c?'<div id="'+r+'-shortcut" class="'+o+'menu-shortcut">'+c+"</div>":"")+(i.menu?'<div class="'+o+'caret"></div>':"")+"</div>"},p
 ostRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Lt,[we,Mt,m],function(e,t,n){return e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.classes.add(&qu
 ot;menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.image||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}})}),r(Pt,[Dt,Lt],function(e,t){return e.extend({init:function(e){function t(r){for(var a=0;a<r.length;a++){if(i=r[a].selected||e.value===r[a].value)return o=o||r[a].text,n.state.set("value",r[a].value),!0;if(r[a].menu&&t(r[a].menu))return!0}}var n=this,r,i,o,a;n._super(e),e=n.settings,n._values=r=e.values,r&&("undefined"!=typeof e.value&&t(r),!i&&r.length>0&&(o=r[0].text,n.state.set(&quo
 t;value",r[0].value)),n.state.set("menu",r)),n.state.set("text",e.text||o),n.classes.add("listbox"),n.on("select",function(t){var r=t.control;a&&(t.lastControl=a),e.multiple?r.active(!r.active()):n.value(t.control.value()),a=r})},bindStates:function(){function e(e,n){e instanceof t&&e.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}function n(e,t){var r;if(e)for(var i=0;i<e.length;i++){if(e[i].value===t)return e[i];if(e[i].menu&&(r=n(e[i].menu,t)))return r}}var r=this;return r.on("show",function(t){e(t.control,r.value())}),r.state.on("change:value",function(e){var t=n(r.state.get("menu"),e.value);t?r.text(t.text):r.text(r.settings.text)}),r._super()}})}),r(Ht,[ut],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(Ot,[ke,ve],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.ad
 d("resizehandle"),"both"==e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'<div id="'+e._id+'" class="'+e.classes+'"><i class="'+t+"ico "+t+'i-resize"></i></div>'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(It,[ke],function(e){function t(e){var t="";if(e)for(var n=0;n<e.length;n++)t+='<option value="'+e[n]+'">'+e[n]+"</option>";return t}return e.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var t=this;t._super(e)
 ,t.settings.size&&(t.size=t.settings.size),t.settings.options&&(t._options=t.settings.options)},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e=this,n,r="";return n=t(e._options),e.size&&(r=' size = "'+e.size+'"'),'<select id="'+e._id+'" class="'+e.classes+'"'+r+">"+n+"</select>"},bindStates:function(){var e=this;return e.state.on("change:options",function(n){e.getEl().innerHTML=t(n.value)}),e._super()}})}),r(Ft,[ke,ve,ce],function(e,t,n){function r(e,t,n){return t>e&&(e=t),e>n&&(e=n),e}function i(e,t){var r,i,o,a,s;"v"==e.settings.orientation?(a="top",o="height",i="h"):(a="left",o="width",i="w"),r=(e.layoutRect()[i]||100)-n.getSize(e.getEl("handle"))[o],s=r*((t-e._minValue)
 /(e._maxValue-e._minValue))+"px",e.getEl("handle").style[a]=s,e.getEl("handle").style.height=e.layoutRect().h+"px"}return e.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"==e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'"><div id="'+t+'-handle" class="'+n+'slider-handle"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e=this,i,o,a=0,s,l,c,u,d,f,h,p;l=e._minValue,c=e._maxValue,s=e.value(),"v"==e.settings.orientation?(d="screenY",f="top",h="height",p="h"):
 (d="screenX",f="left",h="width",p="w"),e._super(),e._dragHelper=new t(e._id,{handle:e._id+"-handle",start:function(t){i=t[d],o=parseInt(e.getEl("handle").style[f],10),u=(e.layoutRect()[p]||100)-n.getSize(e.getEl("handle"))[h],e.fire("dragstart",{value:s})},drag:function(t){var n=t[d]-i,h=e.getEl("handle");a=r(o+n,0,u),h.style[f]=a+"px",s=l+a/u*(c-l),e.value(s),e.tooltip().text(""+e.settings.previewFilter(s)).show().moveRel(h,"bc tc"),e.fire("drag",{value:s})},stop:function(){e.tooltip().hide(),e.fire("dragend",{value:s})}})},repaint:function(){this._super(),i(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){i(e,t.value)}),e._super()}})}),r(zt,[ke],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("spacer"),e.canFocus=!1,'<div id="'+e._id
 +'" class="'+e.classes+'"></div>'}})}),r(Wt,[Dt,ce,g],function(e,t,n){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,r=e.getEl(),i=e.layoutRect(),o,a;return e._super(),o=r.firstChild,a=r.lastChild,n(o).css({width:i.w-t.getSize(a).width,height:i.h-2}),n(a).css({height:i.h-2}),e},activeMenu:function(e){var t=this;n(t.getEl().lastChild).toggleClass(t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r,i=e.state.get("icon"),o=e.state.get("text"),a="";return r=e.settings.image,r?(i="none","string"!=typeof r&&(r=window.getSelection?r[0]:r[1]),r=" style=\"background-image: url('"+r+"')\""):r="",i=e.settings.icon?n+"ico "+n+"i-"+i:"",o&&(e.classes.add("btn-has-text"),a='<span class="'+n+'txt">
 '+e.encode(o)+"</span>"),'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1"><button type="button" hidefocus="1" tabindex="-1">'+(i?'<i class="'+i+'"'+r+"></i>":"")+a+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1">'+(e._menuBtnText?(i?"\xa0":"")+e._menuBtnText:"")+' <i class="'+n+'caret"></i></button></div>'},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void(t&&t.call(this,e));n=n.parentNode}}),delete e.settings.onclick,e.
 _super()}})}),r(Vt,[_t],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),r(Ut,[be,g,ce],function(e,t,n){return e.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t(n).removeClass(this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t(n).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!=n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t
 .aria("role","tabpanel"),t.aria("labelledby",o),n+='<div id="'+o+'" class="'+r+'tab" unselectable="on" role="tab" aria-controls="'+t._id+'" aria-selected="false" tabIndex="-1">'+e.encode(t.settings.title)+"</div>"}),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1"><div id="'+e._id+'-head" class="'+r+'tabs" role="tablist">'+n+'</div><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div></div>"},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.targ
 et&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,r,i;r=n.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(e){r=Math.max(r,e.layoutRect().minW),i=Math.max(i,e.layoutRect().minH)}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=n.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,t=e._super(),t.deltaH+=o,t.innerH=t.h-t.deltaH,t}})}),r($t,[ke],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){return e.toJSON?(n=e,!1):void 0}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e=thi
 s,t,n,r,i,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e.borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e.state.get("value"),!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+='
  disabled="disabled"'),n.multiline?'<textarea id="'+t+'" class="'+e.classes+'" '+(n.rows?' rows="'+n.rows+'"':"")+' hidefocus="1"'+i+">"+r+"</textarea>":'<input id="'+t+'" class="'+e.classes+'" value="'+r+'" hidefocus="1"'+i+" />"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!=t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._s
 uper()},remove:function(){this.$el.off(),this._super()}})}),r(qt,[g,he,u],function(e,t,n){return function(r,i){var o=this,a,s=t.classPrefix;o.show=function(t,l){return o.hide(),a=!0,n.setTimeout(function(){a&&(e(r).append('<div class="'+s+"throbber"+(i?" "+s+"throbber-inline":"")+'"></div>'),l&&l())},t),o},o.hide=function(){var e=r.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),a=!1,o}}}),a([l,c,u,d,f,h,m,g,v,y,C,w,E,N,T,A,B,D,M,L,P,H,I,F,j,Y,G,J,ee,te,ne,re,oe,se,le,fe,he,pe,me,ge,ve,ye,be,Ce,xe,we,Ee,Ne,_e,Se,ke,Te,Re,Ae,Me,Pe,Ke,Ge,Je,Qe,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,ht,pt,mt,gt,vt,yt,bt,Ct,xt,wt,Et,Nt,_t,St,kt,Tt,Rt,At,Bt,Dt,Mt,Lt,Pt,Ht,Ot,It,Ft,zt,Wt,Vt,Ut,$t,qt])}(this);
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesversionphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/version.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/version.php 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/src/wp-includes/version.php   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -18,7 +18,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @global string $tinymce_version
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-$tinymce_version = '4208-20151113';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+$tinymce_version = '4303-20160119';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Holds the required PHP version
</span></span></pre></div>
<a id="trunktestsquniteditorexternalpluginsnoneditablepluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/external-plugins/noneditable/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/external-plugins/noneditable/plugin.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/external-plugins/noneditable/plugin.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,543 +1,48 @@
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * plugin.js
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * Copyright, Moxiecode Systems AB
</del><span class="cx" style="display: block; padding: 0 10px">  * Released under LGPL License.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Copyright (c) 1999-2015 Ephox Corp. All rights reserved
</ins><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * License: http://www.tinymce.com/license
</span><span class="cx" style="display: block; padding: 0 10px">  * Contributing: http://www.tinymce.com/contributing
</span><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/*jshint loopfunc:true */
-/*eslint no-loop-func:0 */
</del><span class="cx" style="display: block; padding: 0 10px"> /*global tinymce:true */
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> tinymce.PluginManager.add('noneditable', function(editor) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var TreeWalker = tinymce.dom.TreeWalker;
-       var externalName = 'contenteditable', internalName = 'data-mce-' + externalName;
-       var VK = tinymce.util.VK;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var editClass, nonEditClass, nonEditableRegExps, contentEditableAttrName = 'contenteditable';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Returns the content editable state of a node "true/false" or null
-       function getContentEditable(node) {
-               var contentEditable;
-
-               // Ignore non elements
-               if (node.nodeType === 1) {
-                       // Check for fake content editable
-                       contentEditable = node.getAttribute(internalName);
-                       if (contentEditable && contentEditable !== "inherit") {
-                               return contentEditable;
-                       }
-
-                       // Check for real content editable
-                       contentEditable = node.contentEditable;
-                       if (contentEditable !== "inherit") {
-                               return contentEditable;
-                       }
-               }
-
-               return null;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ function hasClass(checkClassName) {
+               return function(node) {
+                       return (" " + node.attr("class") + " ").indexOf(checkClassName) !== -1;
+               };
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Returns the noneditable parent or null if there is a editable before it or if it wasn't found
-       function getNonEditableParent(node) {
-               var state;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ function convertRegExpsToNonEditable(e) {
+               var i = nonEditableRegExps.length, content = e.content, cls = tinymce.trim(nonEditClass);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                while (node) {
-                       state = getContentEditable(node);
-                       if (state) {
-                               return state === "false" ? node : null;
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function replaceMatchWithSpan(match) {
+                       var args = arguments, index = args[args.length - 2];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        node = node.parentNode;
-               }
-       }
-
-       function handleContentEditableSelection() {
-               var dom = editor.dom, selection = editor.selection, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF';
-
-               // Get caret container parent for the specified node
-               function getParentCaretContainer(node) {
-                       while (node) {
-                               if (node.id === caretContainerId) {
-                                       return node;
-                               }
-
-                               node = node.parentNode;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Is value inside an attribute then don't replace
+                       if (index > 0 && content.charAt(index - 1) == '"') {
+                               return match;
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                }
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Finds the first text node in the specified node
-               function findFirstTextNode(node) {
-                       var walker;
-
-                       if (node) {
-                               walker = new TreeWalker(node, node);
-
-                               for (node = walker.current(); node; node = walker.next()) {
-                                       if (node.nodeType === 3) {
-                                               return node;
-                                       }
-                               }
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 return (
+                               '<span class="' + cls + '" data-mce-content="' + editor.dom.encode(args[0]) + '">' +
+                               editor.dom.encode(typeof args[1] === "string" ? args[1] : args[0]) + '</span>'
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Insert caret container before/after target or expand selection to include block
-               function insertCaretContainerOrExpandToBlock(target, before) {
-                       var caretContainer, rng;
-
-                       // Select block
-                       if (getContentEditable(target) === "false") {
-                               if (dom.isBlock(target)) {
-                                       selection.select(target);
-                                       return;
-                               }
-                       }
-
-                       rng = dom.createRng();
-
-                       if (getContentEditable(target) === "true") {
-                               if (!target.firstChild) {
-                                       target.appendChild(editor.getDoc().createTextNode('\u00a0'));
-                               }
-
-                               target = target.firstChild;
-                               before = true;
-                       }
-
-                       /*
-                       caretContainer = dom.create('span', {
-                               id: caretContainerId,
-                               'data-mce-bogus': true,
-                               style:'border: 1px solid red'
-                       }, invisibleChar);
-                       */
-
-                       caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar);
-
-                       if (before) {
-                               target.parentNode.insertBefore(caretContainer, target);
-                       } else {
-                               dom.insertAfter(caretContainer, target);
-                       }
-
-                       rng.setStart(caretContainer.firstChild, 1);
-                       rng.collapse(true);
-                       selection.setRng(rng);
-
-                       return caretContainer;
-               }
-
-               // Removes any caret container
-               function removeCaretContainer(caretContainer) {
-                       var rng, child, lastContainer;
-
-                       if (caretContainer) {
-                               rng = selection.getRng(true);
-                               rng.setStartBefore(caretContainer);
-                               rng.setEndBefore(caretContainer);
-
-                               child = findFirstTextNode(caretContainer);
-                               if (child && child.nodeValue.charAt(0) == invisibleChar) {
-                                       child = child.deleteData(0, 1);
-                               }
-
-                               dom.remove(caretContainer, true);
-
-                               selection.setRng(rng);
-                       } else {
-                               while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) {
-                                       child = findFirstTextNode(caretContainer);
-                                       if (child && child.nodeValue.charAt(0) == invisibleChar) {
-                                               child = child.deleteData(0, 1);
-                                       }
-
-                                       dom.remove(caretContainer, true);
-
-                                       lastContainer = caretContainer;
-                               }
-                       }
-               }
-
-               // Modifies the selection to include contentEditable false elements or insert caret containers
-               function moveSelection() {
-                       var nonEditableStart, nonEditableEnd, isCollapsed, rng, element;
-
-                       // Checks if there is any contents to the left/right side of caret returns the noneditable element or
-                       // any editable element if it finds one inside
-                       function hasSideContent(element, left) {
-                               var container, offset, walker, node, len;
-
-                               container = rng.startContainer;
-                               offset = rng.startOffset;
-
-                               // If endpoint is in middle of text node then expand to beginning/end of element
-                               if (container.nodeType == 3) {
-                                       len = container.nodeValue.length;
-                                       if ((offset > 0 && offset < len) || (left ? offset == len : offset === 0)) {
-                                               return;
-                                       }
-                               } else {
-                                       // Can we resolve the node by index
-                                       if (offset < container.childNodes.length) {
-                                               // Browser represents caret position as the offset at the start of an element. When moving right
-                                               // this is the element we are moving into so we consider our container to be child node at offset-1
-                                               var pos = !left && offset > 0 ? offset - 1 : offset;
-                                               container = container.childNodes[pos];
-                                               if (container.hasChildNodes()) {
-                                                       container = container.firstChild;
-                                               }
-                                       } else {
-                                               // If not then the caret is at the last position in it's container and the caret container
-                                               // should be inserted after the noneditable element
-                                               return !left ? element : null;
-                                       }
-                               }
-
-                               // Walk left/right to look for contents
-                               walker = new TreeWalker(container, element);
-                               while ((node = walker[left ? 'prev' : 'next']())) {
-                                       if (node.nodeType === 3 && node.nodeValue.length > 0) {
-                                               return;
-                                       } else if (getContentEditable(node) === "true") {
-                                               // Found contentEditable=true element return this one to we can move the caret inside it
-                                               return node;
-                                       }
-                               }
-
-                               return element;
-                       }
-
-                       // Remove any existing caret containers
-                       removeCaretContainer();
-
-                       // Get noneditable start/end elements
-                       isCollapsed = selection.isCollapsed();
-                       nonEditableStart = getNonEditableParent(selection.getStart());
-                       nonEditableEnd = getNonEditableParent(selection.getEnd());
-
-                       // Is any fo the range endpoints noneditable
-                       if (nonEditableStart || nonEditableEnd) {
-                               rng = selection.getRng(true);
-
-                               // If it's a caret selection then look left/right to see if we need to move the caret out side or expand
-                               if (isCollapsed) {
-                                       nonEditableStart = nonEditableStart || nonEditableEnd;
-
-                                       if ((element = hasSideContent(nonEditableStart, true))) {
-                                               // We have no contents to the left of the caret then insert a caret container before the noneditable element
-                                               insertCaretContainerOrExpandToBlock(element, true);
-                                       } else if ((element = hasSideContent(nonEditableStart, false))) {
-                                               // We have no contents to the right of the caret then insert a caret container after the noneditable element
-                                               insertCaretContainerOrExpandToBlock(element, false);
-                                       } else {
-                                               // We are in the middle of a noneditable so expand to select it
-                                               selection.select(nonEditableStart);
-                                       }
-                               } else {
-                                       rng = selection.getRng(true);
-
-                                       // Expand selection to include start non editable element
-                                       if (nonEditableStart) {
-                                               rng.setStartBefore(nonEditableStart);
-                                       }
-
-                                       // Expand selection to include end non editable element
-                                       if (nonEditableEnd) {
-                                               rng.setEndAfter(nonEditableEnd);
-                                       }
-
-                                       selection.setRng(rng);
-                               }
-                       }
-               }
-
-               function handleKey(e) {
-                       var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement;
-
-                       function getNonEmptyTextNodeSibling(node, prev) {
-                               while ((node = node[prev ? 'previousSibling' : 'nextSibling'])) {
-                                       if (node.nodeType !== 3 || node.nodeValue.length > 0) {
-                                               return node;
-                                       }
-                               }
-                       }
-
-                       function positionCaretOnElement(element, start) {
-                               selection.select(element);
-                               selection.collapse(start);
-                       }
-
-                       function canDelete(backspace) {
-                               var rng, container, offset, nonEditableParent;
-
-                               function removeNodeIfNotParent(node) {
-                                       var parent = container;
-
-                                       while (parent) {
-                                               if (parent === node) {
-                                                       return;
-                                               }
-
-                                               parent = parent.parentNode;
-                                       }
-
-                                       dom.remove(node);
-                                       moveSelection();
-                               }
-
-                               function isNextPrevTreeNodeNonEditable() {
-                                       var node, walker, nonEmptyElements = editor.schema.getNonEmptyElements();
-
-                                       walker = new tinymce.dom.TreeWalker(container, editor.getBody());
-                                       while ((node = (backspace ? walker.prev() : walker.next()))) {
-                                               // Found IMG/INPUT etc
-                                               if (nonEmptyElements[node.nodeName.toLowerCase()]) {
-                                                       break;
-                                               }
-
-                                               // Found text node with contents
-                                               if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) {
-                                                       break;
-                                               }
-
-                                               // Found non editable node
-                                               if (getContentEditable(node) === "false") {
-                                                       removeNodeIfNotParent(node);
-                                                       return true;
-                                               }
-                                       }
-
-                                       // Check if the content node is within a non editable parent
-                                       if (getNonEditableParent(node)) {
-                                               return true;
-                                       }
-
-                                       return false;
-                               }
-
-                               if (selection.isCollapsed()) {
-                                       rng = selection.getRng(true);
-                                       container = rng.startContainer;
-                                       offset = rng.startOffset;
-                                       container = getParentCaretContainer(container) || container;
-
-                                       // Is in noneditable parent
-                                       if ((nonEditableParent = getNonEditableParent(container))) {
-                                               removeNodeIfNotParent(nonEditableParent);
-                                               return false;
-                                       }
-
-                                       // Check if the caret is in the middle of a text node
-                                       if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) {
-                                               return true;
-                                       }
-
-                                       // Resolve container index
-                                       if (container.nodeType == 1) {
-                                               container = container.childNodes[offset] || container;
-                                       }
-
-                                       // Check if previous or next tree node is non editable then block the event
-                                       if (isNextPrevTreeNodeNonEditable()) {
-                                               return false;
-                                       }
-                               }
-
-                               return true;
-                       }
-
-                       moveSelection();
-
-                       startElement = selection.getStart();
-                       endElement = selection.getEnd();
-
-                       // Disable all key presses in contentEditable=false except delete or backspace
-                       nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement);
-                       var currentNode = editor.selection.getNode();
-
-                       var isDirectionKey = keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.UP || keyCode == VK.DOWN;
-                       var left = keyCode == VK.LEFT || keyCode == VK.UP;
-
-                       if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) {
-
-                               // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior
-                               if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) {
-                                       return;
-                               }
-
-                               e.preventDefault();
-
-                               // Arrow left/right select the element and collapse left/right
-                               if (isDirectionKey) {
-
-                                       // If a block element find previous or next element to position the caret
-                                       if (editor.dom.isBlock(nonEditableParent)) {
-                                               var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling;
-
-                                               // Handling for edge-cases:
-                                               //      - two nonEditables in a row -> no way to get between them
-                                               //      - nonEditable as the first/last element -> no way to get before/behind it
-                                               if (!targetElement || targetElement && getContentEditable(targetElement) === 'false') {
-                                                       var p = dom.create('p', null, '&nbsp;');
-                                                       p.className = 'mceTmpParagraph';
-
-                                                       var insertElement = left ? nonEditableParent : targetElement;
-
-                                                       if (insertElement && insertElement.parentNode) {
-                                                               insertElement.parentNode.insertBefore(p, insertElement);
-                                                       } else if (!targetElement && !left) {
-                                                               nonEditableParent.parentNode.appendChild(p);
-                                                       }
-
-                                                       targetElement = p;
-                                               }
-
-                                               var walker = new TreeWalker(targetElement, targetElement);
-                                               var caretElement = left ? walker.prev() : walker.next();
-
-                                               positionCaretOnElement(caretElement, !left);
-                                       } else {
-                                               positionCaretOnElement(nonEditableParent, left);
-                                       }
-                               }
-                       } else {
-                               // Is arrow left/right, backspace or delete
-                               if (isDirectionKey || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) {
-                                       caretContainer = getParentCaretContainer(startElement);
-
-                                       if (caretContainer) {
-                                               // Arrow left or backspace
-                                               if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) {
-                                                       nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true);
-
-                                                       if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
-                                                               e.preventDefault();
-
-                                                               if (keyCode == VK.LEFT) {
-                                                                       positionCaretOnElement(nonEditableParent, true);
-                                                               } else {
-                                                                       dom.remove(nonEditableParent);
-                                                                       return;
-                                                               }
-                                                       } else {
-                                                               removeCaretContainer(caretContainer);
-                                                       }
-                                               }
-
-                                               // Arrow right or delete
-                                               if (keyCode == VK.RIGHT || keyCode == VK.DELETE) {
-                                                       nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true);
-
-                                                       if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
-                                                               e.preventDefault();
-
-                                                               if (keyCode == VK.RIGHT) {
-                                                                       positionCaretOnElement(nonEditableParent, false);
-                                                               } else {
-                                                                       dom.remove(nonEditableParent);
-                                                                       return;
-                                                               }
-                                                       } else {
-                                                               removeCaretContainer(caretContainer);
-                                                       }
-                                               }
-                                       } else {
-
-                                               if (isDirectionKey) {
-                                                       // Removal of separator paragraphs between two nonEditables
-                                                       // and before/after a nonEditable as the first/last element
-                                                       if (currentNode && currentNode.className.indexOf('mceTmpParagraph') !== -1 &&
-                                                                       currentNode[left ? 'previousSibling' : 'nextSibling']) {
-                                                               var jumpTarget = currentNode[left ? 'previousSibling' : 'nextSibling'];
-
-                                                               // current node is still empty and a separator -> remove it
-                                                               // else: remove the separator class, as it now includes content
-                                                               if (currentNode.innerHTML === '&nbsp;' || currentNode.innerHTML === '' || currentNode.innerHTML === ' ') {
-                                                                       dom.remove(currentNode);
-                                                               } else {
-                                                                       currentNode.className = currentNode.className.replace('mceTmpParagraph', '');
-                                                               }
-
-                                                               positionCaretOnElement(jumpTarget, !left);
-                                                       }
-                                               }
-
-                                               var rng = selection.getRng(true);
-                                               var container = rng.endContainer;
-
-                                               // FIX: If end of node is selected, check wether next sibling is nonEditable to correctly remove it
-                                               //                      (else would break for more complex nonEditables, their content would get moved to the current node)
-                                               if (dom.isBlock(container) && dom.isBlock(container.nextSibling) && rng.endOffset == 1 && keyCode == VK.DELETE) {
-                                                       nonEditableParent = getNonEditableParent(container.nextSibling);
-                                               }
-
-                                               // correctly remove block-level nonEditable domNode on delete/backspace
-                                               if (nonEditableParent && (keyCode == VK.DELETE || keyCode == VK.BACKSPACE) && dom.isBlock(nonEditableParent)) {
-                                                       e.preventDefault();
-                                                       dom.remove(nonEditableParent);
-                                                       return;
-                                               }
-                                       }
-
-                                       if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) {
-                                               e.preventDefault();
-                                               return false;
-                                       }
-                               }
-                       }
-               }
-
-               editor.on('mousedown', function(e) {
-                       var node = editor.selection.getNode();
-
-                       // Also remove separator lines when clicking on another node
-                       if (node && node.className.indexOf('mceTmpParagraph') !== -1 && node !== e.target) {
-                               // current node is still empty and a separator -> remove it
-                               // else: remove the separator class, as it now includes content
-                               if (node.innerHTML === '&nbsp;' || node.innerHTML === '' || node.innerHTML === ' ') {
-                                       dom.remove(node);
-                               } else {
-                                       node.className = node.className.replace('mceTmpParagraph', '');
-                               }
-                       }
-
-                       if (getContentEditable(node) === "false" && node == e.target) {
-                               // Expand selection on mouse down we can't block the default event since it's used for drag/drop
-                               moveSelection();
-                       }
-               });
-
-               editor.on('mouseup', moveSelection);
-
-               editor.on('keydown', handleKey);
-       }
-
-       var editClass, nonEditClass, nonEditableRegExps;
-
-       // Converts configured regexps to noneditable span items
-       function convertRegExpsToNonEditable(e) {
-               var i = nonEditableRegExps.length, content = e.content, cls = tinymce.trim(nonEditClass);
-
</del><span class="cx" style="display: block; padding: 0 10px">                 // Don't replace the variables when raw is used for example on undo/redo
</span><span class="cx" style="display: block; padding: 0 10px">                if (e.format == "raw") {
</span><span class="cx" style="display: block; padding: 0 10px">                        return;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                while (i--) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        content = content.replace(nonEditableRegExps[i], function(match) {
-                               var args = arguments, index = args[args.length - 2];
-
-                               // Is value inside an attribute then don't replace
-                               if (index > 0 && content.charAt(index - 1) == '"') {
-                                       return match;
-                               }
-
-                               return (
-                                       '<span class="' + cls + '" data-mce-content="' + editor.dom.encode(args[0]) + '">' +
-                                       editor.dom.encode(typeof args[1] === "string" ? args[1] : args[0]) + '</span>'
-                               );
-                       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan);
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                e.content = content;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -546,41 +51,41 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editClass = " " + tinymce.trim(editor.getParam("noneditable_editable_class", "mceEditable")) + " ";
</span><span class="cx" style="display: block; padding: 0 10px">        nonEditClass = " " + tinymce.trim(editor.getParam("noneditable_noneditable_class", "mceNonEditable")) + " ";
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Setup noneditable regexps array
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var hasEditClass = hasClass(editClass);
+       var hasNonEditClass = hasClass(nonEditClass);
+
</ins><span class="cx" style="display: block; padding: 0 10px">         nonEditableRegExps = editor.getParam("noneditable_regexp");
</span><span class="cx" style="display: block; padding: 0 10px">        if (nonEditableRegExps && !nonEditableRegExps.length) {
</span><span class="cx" style="display: block; padding: 0 10px">                nonEditableRegExps = [nonEditableRegExps];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.on('PreInit', function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                handleContentEditableSelection();
-
</del><span class="cx" style="display: block; padding: 0 10px">                 if (nonEditableRegExps) {
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.on('BeforeSetContent', convertRegExpsToNonEditable);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Apply contentEditable true/false on elements with the noneditable/editable classes
</del><span class="cx" style="display: block; padding: 0 10px">                 editor.parser.addAttributeFilter('class', function(nodes) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var i = nodes.length, className, node;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var i = nodes.length, node;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        while (i--) {
</span><span class="cx" style="display: block; padding: 0 10px">                                node = nodes[i];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                className = " " + node.attr("class") + " ";
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (className.indexOf(editClass) !== -1) {
-                                       node.attr(internalName, "true");
-                               } else if (className.indexOf(nonEditClass) !== -1) {
-                                       node.attr(internalName, "false");
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (hasEditClass(node)) {
+                                       node.attr(contentEditableAttrName, "true");
+                               } else if (hasNonEditClass(node)) {
+                                       node.attr(contentEditableAttrName, "false");
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Remove internal name
-               editor.serializer.addAttributeFilter(internalName, function(nodes) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.serializer.addAttributeFilter(contentEditableAttrName, function(nodes) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         var i = nodes.length, node;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        while (i--) {
</span><span class="cx" style="display: block; padding: 0 10px">                                node = nodes[i];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                if (!hasEditClass(node) && !hasNonEditClass(node)) {
+                                       continue;
+                               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (nonEditableRegExps && node.attr('data-mce-content')) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        node.name = "#text";
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -588,27 +93,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        node.raw = true;
</span><span class="cx" style="display: block; padding: 0 10px">                                        node.value = node.attr('data-mce-content');
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        node.attr(externalName, null);
-                                       node.attr(internalName, null);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 node.attr(contentEditableAttrName, null);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-               // Convert external name into internal name
-               editor.parser.addAttributeFilter(externalName, function(nodes) {
-                       var i = nodes.length, node;
-
-                       while (i--) {
-                               node = nodes[i];
-                               node.attr(internalName, node.attr(externalName));
-                               node.attr(externalName, null);
-                       }
-               });
</del><span class="cx" style="display: block; padding: 0 10px">         });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-       editor.on('drop', function(e) {
-               if (getNonEditableParent(e.target)) {
-                       e.preventDefault();
-               }
-       });
</del><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsquniteditorexternalpluginsnoneditablepluginminjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/external-plugins/noneditable/plugin.min.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/external-plugins/noneditable/plugin.min.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/external-plugins/noneditable/plugin.min.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1 +1 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-tinymce.PluginManager.add("noneditable",function(a){function b(a){var b;if(1===a.nodeType){if(b=a.getAttribute(k),b&&"inherit"!==b)return b;if(b=a.contentEditable,"inherit"!==b)return b}return null}function c(a){for(var c;a;){if(c=b(a))return"false"===c?a:null;a=a.parentNode}}function d(){function d(a){for(;a;){if(a.id===n)return a;a=a.parentNode}}function e(a){var b;if(a)for(b=new i(a,a),a=b.current();a;a=b.next())if(3===a.nodeType)return a}function f(c,d){var e,f;return"false"===b(c)&&k.isBlock(c)?void m.select(c):(f=k.createRng(),"true"===b(c)&&(c.firstChild||c.appendChild(a.getDoc().createTextNode("\xa0")),c=c.firstChild,d=!0),e=k.create("span",{id:n,"data-mce-bogus":!0},o),d?c.parentNode.insertBefore(e,c):k.insertAfter(e,c),f.setStart(e.firstChild,1),f.collapse(!0),m.set
 Rng(f),e)}function g(a){var b,c,d;if(a)b=m.getRng(!0),b.setStartBefore(a),b.setEndBefore(a),c=e(a),c&&c.nodeValue.charAt(0)==o&&(c=c.deleteData(0,1)),k.remove(a,!0),m.setRng(b);else for(;(a=k.get(n))&&a!==d;)c=e(a),c&&c.nodeValue.charAt(0)==o&&(c=c.deleteData(0,1)),k.remove(a,!0),d=a}function h(){function a(a,c){var d,e,f,g,h;if(d=j.startContainer,e=j.startOffset,3==d.nodeType){if(h=d.nodeValue.length,e>0&&h>e||(c?e==h:0===e))return}else{if(!(e<d.childNodes.length))return c?null:a;var k=!c&&e>0?e-1:e;d=d.childNodes[k],d.hasChildNodes()&&(d=d.firstChild)}for(f=new i(d,a);g=f[c?"prev":"next"]();){if(3===g.nodeType&&g.nodeValue.length>0)return;if("true"===b(g))return g}return a}var d,e,h,j,k;g(),h=m.isCollapsed(),d=c(m.getStart()),e=c(m.getEnd()),(d||e)&&(j=m.getRng(!0),h?(d=d||e,(k=a(d,!0))?f(k,!0):(k=a(d,!1))?f(k,!1):m.select(d)):(j=m.getRng(!0),d&&j.se
 tStartBefore(d),e&&j.setEndAfter(e),m.setRng(j)))}function j(e){function f(a,b){for(;a=a[b?"previousSibling":"nextSibling"];)if(3!==a.nodeType||a.nodeValue.length>0)return a}function j(a,b){m.select(a),m.collapse(b)}function n(e){function f(a){for(var b=j;b;){if(b===a)return;b=b.parentNode}k.remove(a),h()}function g(){var d,g,h=a.schema.getNonEmptyElements();for(g=new tinymce.dom.TreeWalker(j,a.getBody());(d=e?g.prev():g.next())&&!h[d.nodeName.toLowerCase()]&&!(3===d.nodeType&&tinymce.trim(d.nodeValue).length>0);)if("false"===b(d))return f(d),!0;return c(d)?!0:!1}var i,j,l,n;if(m.isCollapsed()){if(i=m.getRng(!0),j=i.startContainer,l=i.startOffset,j=d(j)||j,n=c(j))return f(n),!1;if(3==j.nodeType&&(e?l>0:l<j.nodeValue.length))return!0;if(1==j.nodeType&&(j=j.childNodes[l]||j),g())return!1}return!0}var o,p,q,r,s=e.keyCode;h(),q=m.getStart(),r=m.getEnd(),o=c(q)||c(r);var t=a.selection.getNode(),u=s=
 =l.LEFT||s==l.RIGHT||s==l.UP||s==l.DOWN,v=s==l.LEFT||s==l.UP;if(o&&(112>s||s>124)&&s!=l.DELETE&&s!=l.BACKSPACE){if((tinymce.isMac?e.metaKey:e.ctrlKey)&&(67==s||88==s||86==s))return;if(e.preventDefault(),u)if(a.dom.isBlock(o)){var w=v?o.previousSibling:o.nextSibling;if(!w||w&&"false"===b(w)){var x=k.create("p",null,"&nbsp;");x.className="mceTmpParagraph";var y=v?o:w;y&&y.parentNode?y.parentNode.insertBefore(x,y):w||v||o.parentNode.appendChild(x),w=x}var z=new i(w,w),A=v?z.prev():z.next();j(A,!v)}else j(o,v)}else if(u||s==l.BACKSPACE||s==l.DELETE){if(p=d(q)){if(s==l.LEFT||s==l.BACKSPACE)if(o=f(p,!0),o&&"false"===b(o)){if(e.preventDefault(),s!=l.LEFT)return void k.remove(o);j(o,!0)}else g(p);if(s==l.RIGHT||s==l.DELETE)if(o=f(p,!0),o&&"false"===b(o)){if(e.preventDefault(),s!=l.RIGHT)return void k.remove(o);j(o,!1)}else g(p)}else{if(u&&t&&-
 1!==t.className.indexOf("mceTmpParagraph")&&t[v?"previousSibling":"nextSibling"]){var B=t[v?"previousSibling":"nextSibling"];"&nbsp;"===t.innerHTML||""===t.innerHTML||" "===t.innerHTML?k.remove(t):t.className=t.className.replace("mceTmpParagraph",""),j(B,!v)}var C=m.getRng(!0),D=C.endContainer;if(k.isBlock(D)&&k.isBlock(D.nextSibling)&&1==C.endOffset&&s==l.DELETE&&(o=c(D.nextSibling)),o&&(s==l.DELETE||s==l.BACKSPACE)&&k.isBlock(o))return e.preventDefault(),void k.remove(o)}if((s==l.BACKSPACE||s==l.DELETE)&&!n(s==l.BACKSPACE))return e.preventDefault(),!1}}var k=a.dom,m=a.selection,n="mce_noneditablecaret",o="\ufeff";a.on("mousedown",function(c){var d=a.selection.getNode();d&&-1!==d.className.indexOf("mceTmpParagraph")&&d!==c.target&&("&nbsp;"
 ===d.innerHTML||""===d.innerHTML||" "===d.innerHTML?k.remove(d):d.className=d.className.replace("mceTmpParagraph","")),"false"===b(d)&&d==c.target&&h()}),a.on("mouseup",h),a.on("keydown",j)}function e(b){var c=h.length,d=b.content,e=tinymce.trim(g);if("raw"!=b.format){for(;c--;)d=d.replace(h[c],function(b){var c=arguments,f=c[c.length-2];return f>0&&'"'==d.charAt(f-1)?b:'<span class="'+e+'" data-mce-content="'+a.dom.encode(c[0])+'">'+a.dom.encode("string"==typeof c[1]?c[1]:c[0])+"</span>"});b.content=d}}var f,g,h,i=tinymce.dom.TreeWalker,j="contenteditable",k="data-mce-"+j,l=tinymce.util.VK;f=" "+tinymce.trim(a.getParam("noneditable_editable_class","mceEditable"))+" ",g=" "+tinymce.trim(a.getParam("noneditable_noneditable_class","mceNonEd
 itable"))+" ",h=a.getParam("noneditable_regexp"),h&&!h.length&&(h=[h]),a.on("PreInit",function(){d(),h&&a.on("BeforeSetContent",e),a.parser.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)c=a[d],b=" "+c.attr("class")+" ",-1!==b.indexOf(f)?c.attr(k,"true"):-1!==b.indexOf(g)&&c.attr(k,"false")}),a.serializer.addAttributeFilter(k,function(a){for(var b,c=a.length;c--;)b=a[c],h&&b.attr("data-mce-content")?(b.name="#text",b.type=3,b.raw=!0,b.value=b.attr("data-mce-content")):(b.attr(j,null),b.attr(k,null))}),a.parser.addAttributeFilter(j,function(a){for(var b,c=a.length;c--;)b=a[c],b.attr(k,b.attr(j)),b.attr(j,null)})}),a.on("drop",function(a){c(a.target)&&a.preventDefault()})});
</del><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+tinymce.PluginManager.add("noneditable",function(e){function t(e){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(e)}}function n(t){function n(t){var n=arguments,r=n[n.length-2];return r>0&&'"'==a.charAt(r-1)?t:'<span class="'+s+'" data-mce-content="'+e.dom.encode(n[0])+'">'+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+"</span>"}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noned
 itable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsquniteditorindexhtml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/index.html</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/index.html       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/index.html 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20,7 +20,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="../../../src/wp-includes/js/jquery/jquery.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="js/module_loader.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="js/qunit/qunit.js"></script>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <script src="../../../build/wp-includes/js/tinymce/tinymce.min.js"></script>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <script src="js/tinymce_loader.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px"> <!--<script src="../js/tinymce/classes/jquery.tinymce.js"></script> -->
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="js/utils.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="js/init.js"></script>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28,20 +28,34 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <!-- tinymce.data.* -->
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/data/ObservableObject.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <!-- tinymce.caret.* -->
+       <script src="tinymce/caret/CaretBookmark.js"></script>
+       <script src="tinymce/caret/CaretCandidate.js"></script>
+       <script src="tinymce/caret/CaretContainer.js"></script>
+       <script src="tinymce/caret/CaretPosition.js"></script>
+       <script src="tinymce/caret/CaretUtils.js"></script>
+       <script src="tinymce/caret/CaretWalker.js"></script>
+       <script src="tinymce/caret/FakeCaret.js"></script>
+       <script src="tinymce/caret/LineUtils.js"></script>
+       <script src="tinymce/caret/LineWalker.js"></script>
+
+       <!-- tinymce.geom.* -->
+       <script src="tinymce/geom/Rect.js"></script>
+       <script src="tinymce/geom/ClientRect.js"></script>
+
</ins><span class="cx" style="display: block; padding: 0 10px">         <!-- tinymce.file.* -->
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/file/Conversions.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/file/ImageScanner.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <script>
-               var wpPlugins = 'charmap colorpicker hr lists media paste tabfocus textcolor ' +
-                       'fullscreen wordpress wpautoresize wpeditimage wpgallery wplink wpdialogs wpview';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <!-- tinymce.text.* -->
+       <script src="tinymce/text/ExtendingChar.js"></script>
+       <script src="tinymce/text/Zwsp.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                getUserSetting = setUserSetting = function() {}
-       </script>
-
</del><span class="cx" style="display: block; padding: 0 10px">         <!-- tinymce.dom.* -->
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <script src="tinymce/dom/NodeType.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">         <script src="tinymce/dom/DomQuery.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/dom/DOMUtils.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <script src="tinymce/dom/Dimensions.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px">         <script src="tinymce/dom/EventUtils.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/dom/Range.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/dom/Selection.js"></script>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -88,6 +102,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/util/URI.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/util/XHR.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/util/I18n.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <script src="tinymce/util/Fun.js"></script>
+       <script src="tinymce/util/Delay.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        <!-- tinymce.* -->
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/AddOnManager.js"></script>
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -102,9 +118,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/Formatter_remove.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/Shortcuts.js"></script>
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="tinymce/UndoManager.js"></script>
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <script src="tinymce/SelectionOverrides.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        <!-- tinymce.plugins.* -->
</span><span class="cx" style="display: block; padding: 0 10px"> <!--<script src="plugins/autolink.js"></script>-->
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        <script src="plugins/charmap.js"></script>
</ins><span class="cx" style="display: block; padding: 0 10px"> <!--<script src="plugins/autosave.js"></script>-->
</span><span class="cx" style="display: block; padding: 0 10px"> <!--<script src="plugins/fullpage.js"></script>-->
</span><span class="cx" style="display: block; padding: 0 10px">        <script src="plugins/image.js"></script>
</span></span></pre></div>
<a id="trunktestsquniteditorjsmodule_loaderjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/js/module_loader.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/js/module_loader.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/js/module_loader.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22,7 +22,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        module = privateModules[ids[i]] || resolve(ids[i]);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!module) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                throw 'module definition dependecy not found: ' + ids[i];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         throw 'module definition dependency not found: ' + ids[i];
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        defs.push(module);
</span></span></pre></div>
<a id="trunktestsquniteditorjstinymce_loaderjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/js/tinymce_loader.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/js/tinymce_loader.js     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/js/tinymce_loader.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,17 +1,7 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// Edited for WordPress
-(function() {
-       var baseURL;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+// Edited for WordPres
+document.write('<script src="../../../src/wp-includes/js/tinymce/tinymce.js"></script>');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get base where the tinymce script is located
-       var scripts = document.getElementsByTagName('script');
-       for ( var i = 0; i < scripts.length; i++ ) {
-               var src = scripts[i].src;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+var wpPlugins = 'charmap colorpicker hr lists media paste tabfocus textcolor ' +
+                       'fullscreen wordpress wpautoresize wpeditimage wpgallery wplink wpdialogs wpview';
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ( /tinymce_loader\.js/.test( src ) ) {
-                       baseURL = src.substring( 0, src.indexOf('/tests/qunit/') );
-                       break;
-               }
-       }
-
-       document.write('<script src="' + baseURL + '/src/wp-includes/js/tinymce/tinymce.min.js"></script>');
-})();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+getUserSetting = setUserSetting = function() {}
</ins></span></pre></div>
<a id="trunktestsquniteditorjsutilsjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/js/utils.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/js/utils.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/js/utils.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2,9 +2,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        function fontFace(face) {
</span><span class="cx" style="display: block; padding: 0 10px">                if (tinymce.isOpera) {
</span><span class="cx" style="display: block; padding: 0 10px">                        return "'" + face + "'";
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                } else {
-                       return face;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+               return face;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        function findContainer(selector) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -55,6 +55,52 @@
</span><span class="cx" style="display: block; padding: 0 10px">                editor.selection.setRng(rng);
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function assertRange(actual, expected) {
+               deepEqual({
+                       startContainer: actual.startContainer,
+                       startOffset: actual.startOffset,
+                       endContainer: actual.endContainer,
+                       endOffset: actual.endOffset
+               }, {
+                       startContainer: expected.startContainer,
+                       startOffset: expected.startOffset,
+                       endContainer: expected.endContainer,
+                       endOffset: expected.endOffset
+               });
+       }
+
+       function createRange(startContainer, startOffset, endContainer, endOffset) {
+               var rng = tinymce.DOM.createRng();
+
+               rng.setStart(startContainer, startOffset);
+
+               if (endContainer) {
+                       rng.setEnd(endContainer, endOffset);
+               }
+
+               return rng;
+       }
+
+       function assertCaretPosition(actual, expected, message) {
+               if (expected === null) {
+                       strictEqual(actual, expected, message || 'Expected null.');
+                       return;
+               }
+
+               if (actual === null) {
+                       strictEqual(actual, expected, message || 'Didn\'t expect null.');
+                       return;
+               }
+
+               deepEqual({
+                       container: actual.container(),
+                       offset: actual.offset()
+               }, {
+                       container: expected.container(),
+                       offset: expected.offset()
+               }, message);
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function trimContent(content) {
</span><span class="cx" style="display: block; padding: 0 10px">                return content.replace(/^<p>&nbsp;<\/p>\n?/, '').replace(/\n?<p>&nbsp;<\/p>$/, '');
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -131,11 +177,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // TODO: Replace this with the new event logic in 3.5
</span><span class="cx" style="display: block; padding: 0 10px">        function type(chr) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var editor = tinymce.activeEditor, keyCode, charCode, evt, startElm, rng, startContainer, startOffset, textNode;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         var editor = tinymce.activeEditor, keyCode, charCode, evt, startElm, rng, offset;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function charCodeToKeyCode(charCode) {
</span><span class="cx" style="display: block; padding: 0 10px">                        var lookup = {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                '0': 48, '1': 49, '2': 50, '3': 51, '4': 52, '5': 53, '6': 54, '7': 55, '8': 56, '9': 57,'a': 65, 'b': 66, 'c': 67,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         '0': 48, '1': 49, '2': 50, '3': 51, '4': 52, '5': 53, '6': 54, '7': 55, '8': 56, '9': 57, 'a': 65, 'b': 66, 'c': 67,
</ins><span class="cx" style="display: block; padding: 0 10px">                                 'd': 68, 'e': 69, 'f': 70, 'g': 71, 'h': 72, 'i': 73, 'j': 74, 'k': 75, 'l': 76, 'm': 77, 'n': 78, 'o': 79, 'p': 80, 'q': 81,
</span><span class="cx" style="display: block; padding: 0 10px">                                'r': 82, 's': 83, 't': 84, 'u': 85,     'v': 86, 'w': 87, 'x': 88, 'y': 89, ' ': 32, ',': 188, '-': 189, '.': 190, '/': 191, '\\': 220,
</span><span class="cx" style="display: block; padding: 0 10px">                                '[': 219, ']': 221, '\'': 222, ';': 186, '=': 187, ')': 41
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -149,10 +195,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Numeric keyCode
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (typeof(chr) == "number") {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (typeof chr == "number") {
</ins><span class="cx" style="display: block; padding: 0 10px">                         charCode = chr;
</span><span class="cx" style="display: block; padding: 0 10px">                        keyCode = charCodeToKeyCode(charCode);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                } else if (typeof(chr) == "string") {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         } else if (typeof chr == "string") {
</ins><span class="cx" style="display: block; padding: 0 10px">                         // String value
</span><span class="cx" style="display: block; padding: 0 10px">                        if (chr == '\b') {
</span><span class="cx" style="display: block; padding: 0 10px">                                keyCode = 8;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -195,40 +241,44 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        rng.execCommand('Delete', false, null);
</span><span class="cx" style="display: block; padding: 0 10px">                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                        rng = editor.selection.getRng();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        startContainer = rng.startContainer;
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if (startContainer.nodeType == 1 && rng.collapsed) {
-                                               var nodes = rng.startContainer.childNodes;
-                                               startContainer = nodes[nodes.length - 1];
-                                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if (rng.collapsed) {
+                                               if (rng.startContainer.nodeType == 1) {
+                                                       var nodes = rng.startContainer.childNodes, lastNode = nodes[nodes.length - 1];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // If caret is at <p>abc|</p> and after the abc text node then move it to the end of the text node
-                                       // Expand the range to include the last char <p>ab[c]</p> since IE 11 doesn't delete otherwise
-                                       if ( rng.collapsed && startContainer && startContainer.nodeType == 3 && startContainer.data.length > 0) {
-                                               rng.setStart(startContainer, startContainer.data.length - 1);
-                                               rng.setEnd(startContainer, startContainer.data.length);
-                                               editor.selection.setRng(rng);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 // If caret is at <p>abc|</p> and after the abc text node then move it to the end of the text node
+                                                       // Expand the range to include the last char <p>ab[c]</p> since IE 11 doesn't delete otherwise
+                                                       if (rng.startOffset >= nodes.length - 1 && lastNode && lastNode.nodeType == 3 && lastNode.data.length > 0) {
+                                                               rng.setStart(lastNode, lastNode.data.length - 1);
+                                                               rng.setEnd(lastNode, lastNode.data.length);
+                                                               editor.selection.setRng(rng);
+                                                       }
+                                               } else if (rng.startContainer.nodeType == 3) {
+                                                       // If caret is at <p>abc|</p> and after the abc text node then move it to the end of the text node
+                                                       // Expand the range to include the last char <p>ab[c]</p> since IE 11 doesn't delete otherwise
+                                                       offset = rng.startOffset;
+                                                       if (offset > 0) {
+                                                               rng.setStart(rng.startContainer, offset - 1);
+                                                               rng.setEnd(rng.startContainer, offset);
+                                                               editor.selection.setRng(rng);
+                                                       }
+                                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.getDoc().execCommand('Delete', false, null);
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        } else if (typeof(chr) == 'string') {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 } else if (typeof chr == 'string') {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 rng = editor.selection.getRng(true);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (rng.startContainer.nodeType == 3 && rng.collapsed) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // `insertData` may alter the range.
-                                       startContainer = rng.startContainer;
-                                       startOffset = rng.startOffset;
-                                       rng.startContainer.insertData( rng.startOffset, chr );
-                                       rng.setStart( startContainer, startOffset + 1 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 rng.startContainer.insertData(rng.startOffset, chr);
+                                       rng.setStart(rng.startContainer, rng.startOffset + 1);
+                                       rng.collapse(true);
+                                       editor.selection.setRng(rng);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        textNode = editor.getDoc().createTextNode(chr);
-                                       rng.insertNode(textNode);
-                                       rng.setStart(textNode, 1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 rng.deleteContents();
+                                       rng.insertNode(editor.getDoc().createTextNode(chr));
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                               rng.collapse(true);
-                               editor.selection.setRng(rng);
</del><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -324,6 +374,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return editor.windowManager.windows[editor.windowManager.windows.length - 1];
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function pressKey(evt) {
+               var dom = editor.dom, target = editor.selection.getNode();
+
+               if (typeof evt == "number") {
+                       evt = {keyCode: evt};
+               }
+
+               evt = tinymce.extend({keyCode: 37}, evt);
+
+               dom.fire(target, 'keydown', evt);
+               dom.fire(target, 'keypress', evt);
+               dom.fire(target, 'keyup', evt);
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function pressArrowKey(evt) {
</span><span class="cx" style="display: block; padding: 0 10px">                var dom = editor.dom, target = editor.selection.getNode();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -415,11 +479,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                resetScroll: resetScroll,
</span><span class="cx" style="display: block; padding: 0 10px">                nearlyEqualRects: nearlyEqualRects,
</span><span class="cx" style="display: block; padding: 0 10px">                getFrontmostWindow: getFrontmostWindow,
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                pressKey: pressKey,
</ins><span class="cx" style="display: block; padding: 0 10px">                 pressArrowKey: pressArrowKey,
</span><span class="cx" style="display: block; padding: 0 10px">                pressEnter: pressEnter,
</span><span class="cx" style="display: block; padding: 0 10px">                trimBrsOnIE: trimBrsOnIE,
</span><span class="cx" style="display: block; padding: 0 10px">                patch: patch,
</span><span class="cx" style="display: block; padding: 0 10px">                unpatch: unpatch,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                triggerElementChange: triggerElementChange
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         triggerElementChange: triggerElementChange,
+               createRange: createRange,
+               assertRange: assertRange,
+               assertCaretPosition: assertCaretPosition
</ins><span class="cx" style="display: block; padding: 0 10px">         };
</span><span class="cx" style="display: block; padding: 0 10px"> })();
</span></span></pre></div>
<a id="trunktestsquniteditorpluginscharmapjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/plugins/charmap.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/charmap.js                               (rev 0)
+++ trunk/tests/qunit/editor/plugins/charmap.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,91 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+], function() {
+       module("tinymce.plugins.CharMap", {
+               setupModule: function() {
+                       QUnit.stop();
+
+                       tinymce.init({
+                               selector: "textarea",
+                               plugins: "charmap",
+                               add_unload_trigger: false,
+                               init_instance_callback: function(ed) {
+                                       window.editor = ed;
+                                       QUnit.start();
+                               }
+                       });
+               }
+       });
+
+       test('Replace characters by array', function() {
+               editor.settings.charmap = [
+                       [65, 'Latin A'],
+                       [66, 'Latin B']
+               ];
+
+               deepEqual(editor.plugins.charmap.getCharMap(), [
+                       [65, 'Latin A'],
+                       [66, 'Latin B']
+               ]);
+       });
+
+       test('Replace characters by function', function() {
+               editor.settings.charmap = function() {
+                       return [
+                               [65, 'Latin A fun'],
+                               [66, 'Latin B fun']
+                       ];
+               };
+
+               deepEqual(editor.plugins.charmap.getCharMap(), [
+                       [65, 'Latin A fun'],
+                       [66, 'Latin B fun']
+               ]);
+       });
+
+       test('Append characters by array', function() {
+               editor.settings.charmap = [
+                       [67, 'Latin C']
+               ];
+
+               editor.settings.charmap_append = [
+                       [65, 'Latin A'],
+                       [66, 'Latin B']
+               ];
+
+               deepEqual(editor.plugins.charmap.getCharMap(), [
+                       [67, 'Latin C'],
+                       [65, 'Latin A'],
+                       [66, 'Latin B']
+               ]);
+       });
+
+       test('Append characters by function', function() {
+               editor.settings.charmap = [
+                       [67, 'Latin C']
+               ];
+
+               editor.settings.charmap_append = function() {
+                       return [
+                               [65, 'Latin A fun'],
+                               [66, 'Latin B fun']
+                       ];
+               };
+
+               deepEqual(editor.plugins.charmap.getCharMap(), [
+                       [67, 'Latin C'],
+                       [65, 'Latin A fun'],
+                       [66, 'Latin B fun']
+               ]);
+       });
+
+       test('Insert character', function() {
+               var lastEvt;
+
+               editor.on('insertCustomChar', function(e) {
+                       lastEvt = e;
+               });
+
+               editor.plugins.charmap.insertChar('A');
+               equal(lastEvt.chr, 'A');
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/plugins/charmap.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditorpluginsimagejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/image.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/image.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/image.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -23,6 +23,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        delete editor.settings.image_class_list;
</span><span class="cx" style="display: block; padding: 0 10px">                        delete editor.settings.document_base_url;
</span><span class="cx" style="display: block; padding: 0 10px">                        delete editor.settings.image_advtab;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        delete editor.settings.image_caption;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        var win = Utils.getFrontmostWindow();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -90,45 +91,90 @@
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('All image dialog ui options on empty editor', function() {
-               editor.settings.image_list = [
-                       {title: 'link1', value: 'link1'},
-                       {title: 'link2', value: 'link2'}
-               ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if (tinymce.Env.ceFalse) {
+               test('All image dialog ui options on empty editor', function() {
+                       editor.settings.image_caption = true;
+                       editor.settings.image_list = [
+                               {title: 'link1', value: 'link1'},
+                               {title: 'link2', value: 'link2'}
+                       ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.settings.image_class_list = [
-                       {title: 'class1', value: 'class1'},
-                       {title: 'class2', value: 'class2'}
-               ];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.settings.image_class_list = [
+                               {title: 'class1', value: 'class1'},
+                               {title: 'class2', value: 'class2'}
+                       ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('');
-               editor.execCommand('mceImage', true);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.setContent('');
+                       editor.execCommand('mceImage', true);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                deepEqual(Utils.getFrontmostWindow().toJSON(), {
-                       "alt": "",
-                       "class": "class1",
-                       "constrain": true,
-                       "height": "",
-                       "src": "",
-                       "width": ""
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 deepEqual(Utils.getFrontmostWindow().toJSON(), {
+                               "alt": "",
+                               "class": "class1",
+                               "constrain": true,
+                               "caption": false,
+                               "height": "",
+                               "src": "",
+                               "width": ""
+                       });
+
+                       fillAndSubmitWindowForm({
+                               "alt": "alt",
+                               "class": "class1",
+                               "constrain": true,
+                               "caption": true,
+                               "height": "200",
+                               "src": "src",
+                               "width": "100"
+                       });
+
+                       equal(
+                               cleanHtml(editor.getContent()),
+                               '<figure class="image"><img class="class1" src="src" alt="alt" width="100" height="200" /><figcaption>caption</figcaption></figure>'
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        } else {
+               test('All image dialog ui options on empty editor (old IE)', function() {
+                       editor.settings.image_caption = true;
+                       editor.settings.image_list = [
+                               {title: 'link1', value: 'link1'},
+                               {title: 'link2', value: 'link2'}
+                       ];
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                fillAndSubmitWindowForm({
-                       "alt": "alt",
-                       "class": "class1",
-                       "constrain": true,
-                       "height": "200",
-                       "src": "src",
-                       "width": "100"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.settings.image_class_list = [
+                               {title: 'class1', value: 'class1'},
+                               {title: 'class2', value: 'class2'}
+                       ];
+
+                       editor.setContent('');
+                       editor.execCommand('mceImage', true);
+
+                       deepEqual(Utils.getFrontmostWindow().toJSON(), {
+                               "alt": "",
+                               "class": "class1",
+                               "constrain": true,
+                               "height": "",
+                               "src": "",
+                               "width": ""
+                       });
+
+                       fillAndSubmitWindowForm({
+                               "alt": "alt",
+                               "class": "class1",
+                               "constrain": true,
+                               "caption": true,
+                               "height": "200",
+                               "src": "src",
+                               "width": "100"
+                       });
+
+                       equal(
+                               cleanHtml(editor.getContent()),
+                               '<p><img class="class1" src="src" alt="alt" width="100" height="200" /></p>'
+                       );
</ins><span class="cx" style="display: block; padding: 0 10px">                 });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                equal(
-                       cleanHtml(editor.getContent()),
-                       '<p><img class="class1" src="src" alt="alt" width="100" height="200" /></p>'
-               );
-       });
-
-       test("Image recognizes relative src url and prepends relative image_prepend_url setting.", function () {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test("Image recognizes relative src url and prepends relative image_prepend_url setting.", function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var win, elementId, element;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.image_prepend_url = 'testing/images/';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -154,11 +200,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        cleanHtml(editor.getContent()),
</span><span class="cx" style="display: block; padding: 0 10px">                        '<p><img src="' + editor.settings.image_prepend_url + 'src" alt="alt" /></p>'
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-       });
-
-       test("Image recognizes relative src url and prepends absolute image_prepend_url setting.", function () {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test("Image recognizes relative src url and prepends absolute image_prepend_url setting.", function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var win, elementId, element;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.image_prepend_url = 'http://localhost/images/';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -184,7 +228,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        cleanHtml(editor.getContent()),
</span><span class="cx" style="display: block; padding: 0 10px">                        '<p><img src="' + editor.settings.image_prepend_url + 'src" alt="alt" /></p>'
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        test('Advanced image dialog border option on empty editor', function(){
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.image_advtab = true;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -322,7 +366,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        "alt": "alt",
</span><span class="cx" style="display: block; padding: 0 10px">                        "border": "10",
</span><span class="cx" style="display: block; padding: 0 10px">                        "src": "src",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        "style": "border-width: 15px;",
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 "style": "border-width: 15px;"
</ins><span class="cx" style="display: block; padding: 0 10px">                 });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                equal(
</span></span></pre></div>
<a id="trunktestsquniteditorpluginslistsjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/lists.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/lists.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/lists.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10,13 +10,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        QUnit.started = true;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                setTimeout(wait, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         tinymce.util.Delay.setTimeout(wait, 0);
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: '#elm1',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 plugins: "lists",
</ins><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span></span></pre></div>
<a id="trunktestsquniteditorpluginsmediajs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/media.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/media.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/media.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,7 +6,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 plugins: 'media',
+                       live_embeds: false,
</ins><span class="cx" style="display: block; padding: 0 10px">                         document_base_url: '/tinymce/tinymce/trunk/tests/',
</span><span class="cx" style="display: block; padding: 0 10px">                        extended_valid_elements: 'script[src|type]',
</span><span class="cx" style="display: block; padding: 0 10px">                        media_scripts: [
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22,6 +23,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        teardown: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                delete editor.settings.media_filter_html;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                delete editor.settings.media_live_embeds;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34,6 +36,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Default media dialog on empty editor', function() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        editor.settings.media_live_embeds = false;
+
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.setContent('');
</span><span class="cx" style="display: block; padding: 0 10px">        editor.plugins.media.showDialog();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,7 +57,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        equal(
</span><span class="cx" style="display: block; padding: 0 10px">                editor.getContent(),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                '<p><iframe src=\"//www.youtube.com/embed/dQw4w9WgXcQ\" width=\"425\" height=\"350\" allowfullscreen=\"allowfullscreen\"></iframe></p>'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         '<p><iframe src=\"//www.youtube.com/embed/dQw4w9WgXcQ\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"></iframe></p>'
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -165,8 +169,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test("Media script elements", function() {
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                '<script src="http://media1.tinymce.com/123456"></sc'+'ript>' +
-               '<script src="http://media2.tinymce.com/123456"></sc'+'ript>'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         '<script src="http://media1.tinymce.com/123456"></sc' + 'ript>' +
+               '<script src="http://media2.tinymce.com/123456"></sc' + 'ript>'
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        equal(editor.getBody().getElementsByTagName('img')[0].className, 'mce-object mce-object-script');
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -178,8 +182,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        equal(editor.getContent(),
</span><span class="cx" style="display: block; padding: 0 10px">                '<p>\n' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        '<script src="http://media1.tinymce.com/123456" type="text/javascript"></sc'+'ript>\n' +
-                       '<script src="http://media2.tinymce.com/123456" type="text/javascript"></sc'+'ript>\n' +
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 '<script src="http://media1.tinymce.com/123456" type="text/javascript"></sc' + 'ript>\n' +
+                       '<script src="http://media2.tinymce.com/123456" type="text/javascript"></sc' + 'ript>\n' +
</ins><span class="cx" style="display: block; padding: 0 10px">                 '</p>'
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span></span></pre></div>
<a id="trunktestsquniteditorpluginsnoneditablejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/noneditable.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/noneditable.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/noneditable.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,7 +9,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        noneditable_regexp: [/\{[^\}]+\}/g],
</span><span class="cx" style="display: block; padding: 0 10px">                        plugins: 'noneditable',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        forced_root_block: '',
</del><span class="cx" style="display: block; padding: 0 10px">                         convert_fonts_to_spans: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        entities: 'raw',
</span><span class="cx" style="display: block; padding: 0 10px">                        valid_styles: {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -24,184 +23,23 @@
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> // Ignore on IE 7, 8 this is a known bug not worth fixing
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-if (!tinymce.Env.ie || tinymce.Env.ie > 8) {
-       test('expand to noneditable (start)', function() {
-               editor.setContent('<p><span class="mceNonEditable">no</span>yes</p>');
-
-               var rng = editor.dom.createRng();
-               rng.setStart(editor.getBody().firstChild.firstChild.firstChild, 1);
-               rng.setEnd(editor.getBody().firstChild.lastChild, 1);
-               editor.selection.setRng(rng);
-
-               editor.dom.fire(editor.getBody(), 'mouseup');
-               rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-               equal(rng.startContainer.nodeName, 'P');
-               equal(rng.startOffset, 0);
-               equal(rng.endContainer.nodeName, '#text');
-               equal(rng.endOffset, 1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+if (tinymce.Env.ceFalse) {
+       test('noneditable class', function() {
+               editor.setContent('<p><span class="mceNonEditable">abc</span></p>');
+               equal(editor.dom.select('span')[0].contentEditable, "false");
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('expand to noneditable (end)', function() {
-               editor.setContent('<p>yes<span class="mceNonEditable">no</span></p>');
-
-               var rng = editor.dom.createRng();
-               rng.setStart(editor.getBody().firstChild.firstChild, 1);
-               rng.setEnd(editor.getBody().firstChild.lastChild.firstChild, 1);
-               editor.selection.setRng(rng);
-
-               editor.dom.fire(editor.getBody(), 'mouseup');
-               rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-               equal(rng.startContainer.nodeName, '#text');
-               equal(rng.startOffset, 1);
-               equal(rng.endContainer.nodeName, 'P');
-               equal(rng.endOffset, 2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('editable class', function() {
+               editor.setContent('<p><span class="mceEditable">abc</span></p>');
+               equal(editor.dom.select('span')[0].contentEditable, "true");
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('expand to noneditable (start/end)', function() {
-               editor.setContent('<p>yes<span class="mceNonEditable">noedit</span>yes</p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('noneditable regexp', function() {
+               editor.setContent('<p>{test1}{test2}</p>');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var rng = editor.dom.createRng();
-               rng.setStart(editor.dom.select('span')[0].firstChild, 1);
-               rng.setEnd(editor.dom.select('span')[0].firstChild, 2);
-               editor.selection.setRng(rng);
-
-               editor.dom.fire(editor.getBody(), 'mouseup');
-               rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-               equal(rng.startContainer.nodeName, 'P');
-               equal(rng.startOffset, 1);
-               equal(rng.endContainer.nodeName, 'P');
-               equal(rng.endOffset, 2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         equal(editor.dom.select('span').length, 2);
+               equal(editor.dom.select('span')[0].contentEditable, "false");
+               equal(editor.dom.select('span')[1].contentEditable, "false");
+               equal(editor.getContent(), '<p>{test1}{test2}</p>');
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-       test('type after non editable', function() {
-               editor.setContent('<p><span class="mceNonEditable">no</span>yes</p>');
-
-               var rng = editor.dom.createRng();
-               rng.setStart(editor.dom.select('span')[0].firstChild, 2);
-               rng.setEnd(editor.dom.select('span')[0].firstChild, 2);
-               editor.selection.setRng(rng);
-
-               Utils.type('X');
-               rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-               equal(rng.startContainer.getAttribute('data-mce-bogus'), 'true');
-               equal(rng.startContainer.nodeName, 'SPAN');
-               equal(rng.startOffset, 1);
-               equal(rng.endContainer.nodeName, 'SPAN');
-               equal(rng.endOffset, 1);
-               equal(editor.getContent(), '<p><span class="mceNonEditable">no</span>Xyes</p>');
-       });
-}
-
-test('type between non editable', function() {
-       editor.setContent('<p><span class="mceNonEditable">no</span><span class="mceNonEditable">no</span></p>');
-
-       var rng = editor.dom.createRng();
-       rng.setStart(editor.dom.select('span')[0].firstChild, 2);
-       rng.setEnd(editor.dom.select('span')[0].firstChild, 2);
-       editor.selection.setRng(rng);
-
-       Utils.type('X');
-       rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-       equal(rng.startContainer.getAttribute('data-mce-bogus'), 'true');
-       equal(rng.startContainer.nodeName, 'SPAN');
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer.nodeName, 'SPAN');
-       equal(rng.endOffset, 1);
-       equal(editor.getContent(), '<p><span class="mceNonEditable">no</span>X<span class="mceNonEditable">no</span></p>');
-});
-
-test('type after last non editable', function() {
-       editor.setContent('<p><span class="mceNonEditable">no</span></p>');
-
-       var rng = editor.dom.createRng();
-       rng.setStart(editor.dom.select('span')[0].firstChild, 2);
-       rng.setEnd(editor.dom.select('span')[0].firstChild, 2);
-       editor.selection.setRng(rng);
-
-       Utils.type('X');
-       rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-       equal(rng.startContainer.getAttribute('data-mce-bogus'), 'true');
-       equal(rng.startContainer.nodeName, 'SPAN');
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer.nodeName, 'SPAN');
-       equal(rng.endOffset, 1);
-       equal(editor.getContent(), '<p><span class="mceNonEditable">no</span>X</p>');
-});
-
-// Ignore on IE 7, 8 this is a known bug not worth fixing
-if (!tinymce.Env.ie || tinymce.Env.ie > 8) {
-       test('escape noneditable inline element (left)', function() {
-               editor.setContent('<p>no <span class="mceNonEditable">yes</span> no</p><p class="mceNonEditable">no</p>');
-
-               var rng = editor.dom.createRng();
-               rng.selectNode(editor.dom.select('span')[0]);
-               editor.selection.setRng(rng);
-
-               Utils.type({keyCode: 37});
-               rng = Utils.normalizeRng(editor.selection.getRng(true));
-               equal(rng.startContainer.nodeName, 'P');
-               equal(rng.collapsed, true);
-       });
-}
-
-test('escape noneditable inline element (right)', function() {
-       editor.setContent('<p>no <span class="mceNonEditable">yes</span> no</p><p class="mceNonEditable">no</p>');
-
-       var rng = editor.dom.createRng();
-       rng.selectNode(editor.dom.select('span')[0]);
-       editor.selection.setRng(rng);
-
-       Utils.type({keyCode: 39});
-       rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-       equal(rng.startContainer.nodeName, 'P');
-       equal(editor.dom.nodeIndex(rng.startContainer), 0);
-       equal(rng.collapsed, true);
-});
-
-test('escape noneditable block element (left)', function(){
-       editor.setContent('<p>yes</p><p class="mceNonEditable">no</p><p>yes</p>');
-
-       var rng = editor.dom.createRng();
-       rng.selectNode(editor.dom.select('p')[1]);
-       editor.selection.setRng(rng);
-
-       Utils.type({keyCode: 37});
-       rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-       equal(rng.startContainer.nodeName, "P");
-       equal(editor.dom.nodeIndex(rng.startContainer), 0);
-       equal(rng.startOffset, 1);
-       equal(rng.collapsed, true);
-
-});
-
-test('escape noneditable block element (right)', function(){
-       editor.setContent('<p>yes</p><p class="mceNonEditable">no</p><p>yes</p>');
-
-       var rng = editor.dom.createRng();
-       rng.selectNode(editor.dom.select('p')[1]);
-       editor.selection.setRng(rng);
-
-       Utils.type({keyCode: 39});
-       rng = Utils.normalizeRng(editor.selection.getRng(true));
-
-       equal(rng.startContainer.nodeName, "P");
-       equal(editor.dom.nodeIndex(rng.startContainer), 2);
-       equal(rng.startOffset, 0);
-       equal(rng.collapsed, true);
-
-});
-
-test('noneditable regexp', function() {
-       editor.setContent('<p>{test1}{test2}</p>');
-
-       equal(editor.dom.select('span').length, 2);
-       equal(editor.getContent(), '<p>{test1}{test2}</p>');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsquniteditorpluginspastejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/paste.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/paste.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/paste.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -7,8 +7,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
-                       wp_paste_filters: false,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 plugins: 'paste',
</ins><span class="cx" style="display: block; padding: 0 10px">                         setup: function(ed) {
</span><span class="cx" style="display: block; padding: 0 10px">                                ed.on('NodeChange', false);
</span><span class="cx" style="display: block; padding: 0 10px">                        },
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -311,7 +310,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                )
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p><b>bold</b><i>italic</i><b><i>bold + italic</i></b><b><span style="color: red;">bold + color</span></b></p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p><strong>bold</strong><em>italic</em><strong><em>bold + italic</em></strong><strong><span style="color: red;">bold + color</span></strong></p>');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('paste track changes comment', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -713,14 +712,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                editor.execCommand('mceInsertClipboardContent', false, {content: '<span style="font-size:42px; text-indent: 10px">Test</span>'});
</span><span class="cx" style="display: block; padding: 0 10px">                equal(editor.getContent(), '<p><span style="font-size: 42px;">Test</span></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/* WP set to always remove font-family on WebKit with a filtering callback.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">         test('paste webkit remove runtime styles (font-family)', function() {
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.paste_webkit_styles = 'font-family';
</span><span class="cx" style="display: block; padding: 0 10px">                editor.setContent('');
</span><span class="cx" style="display: block; padding: 0 10px">                editor.execCommand('mceInsertClipboardContent', false, {content: '<span style="font-family:Arial; text-indent: 10px">Test</span>'});
</span><span class="cx" style="display: block; padding: 0 10px">                equal(editor.getContent(), '<p><span style="font-family: Arial;">Test</span></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-WP end */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">         test('paste webkit remove runtime styles font-family allowed but not specified', function() {
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.paste_webkit_styles = 'font-family';
</span><span class="cx" style="display: block; padding: 0 10px">                editor.setContent('');
</span></span></pre></div>
<a id="trunktestsquniteditorpluginssearchreplacejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/searchreplace.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/searchreplace.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/searchreplace.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13,7 +13,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        valid_elements: 'b,i',
</span><span class="cx" style="display: block; padding: 0 10px">                        init_instance_callback : function(ed) {
</span><span class="cx" style="display: block; padding: 0 10px">                                window.editor = ed;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         tinymce.util.Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         QUnit.start();
</span><span class="cx" style="display: block; padding: 0 10px">                                }, 0);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span></span></pre></div>
<a id="trunktestsquniteditorpluginstablejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/plugins/table.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/plugins/table.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/plugins/table.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -603,4 +603,399 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        '<table><tbody><tr><td>&nbsp;</td><td><p>a</p></td></tr></tbody></table><p>x</p>'
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       var testResizeTable1 = '<table style="width: 426px"><tbody>' +
+                       '<tr><td style="height: 20px; width: 200px;" colspan="2" data-mce-style="height: 20px; width: 200px;">A1</td><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">A2</td><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">A3</td></tr>' +
+                       '<tr><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">B1</td><td style="height: 20px; width: 200px;" colspan="2" data-mce-style="height: 20px; width: 200px;">B2</td><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">B3</td></tr>' +
+                       '<tr><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">C1</td><td style="height: 20px; width: 100px;" data-mce-style="height: 20px; width: 100px;">C2</td><td style="height: 20px; width: 200px;" colspan="2" data-mce-style="height: 20px; width: 200px;">C3</td></tr>' +
+                       '<tr><td style="height: 20px; width: 400px;" colspan="4" data-mce-style="height: 20px; width: 400px;">D1</td></tr></tbody></table>';
+
+       var testResizeTable2 = '<table border="1"><tbody>' +
+       '<tr><th style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">A0</th><th style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">A1</th><th style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">A2</th>' +
+       '<th style="height: 20px; width: 40px;" data-mce-style="height: 20px; width: 40px;">A3</th><th style="height: 20px; width: 10px;" data-mce-style="height: 20px; width: 10px;">A4</th></tr><tr><td style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">B0</td><td style="height: 20px; width: 20px; "' +
+       'data-mce-style="height: 20px; width: 20px;">B1</td><td style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">B2</td><td style="height: 20px; width: 40px;" data-mce-style="height: 20px; width: 40px;">B3</td><td style="height: 40px; width: 10px;" rowspan="2" data-mce-style="height: 20px; width: 10px;">' +
+       'B3</td></tr><tr><td style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">C0</td><td style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">C1</td><td style="height: 20px; width: 20px;" data-mce-style="height: 20px; width: 20px;">C2</td><td style="height: 20px; width: 40px;" ' +
+       'data-mce-style="height: 20px; width: 40px;">C3</td></tr></tbody></table>';
+
+       var testResizeTable3 = '<div style=\"display: block; width: 400px;\"><table style=\"border-collapse: collapse; border: 1px solid black;\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td rowspan=\"2\" width=\"25%\">&nbsp;a</td><td width=\"25%\">&nbsp;b</td><td width=\"25%\">&nbsp;</td>' +
+       '<td width=\"25%\">&nbsp;c</td></tr><tr><td width=\"25%\">&nbsp;d</td><td width=\"25%\">&nbsp;</td><td rowspan=\"2\" width=\"25%\">&nbsp;e</td></tr><tr><td width=\"25%\">&nbsp;f</td><td width=\"25%\">&nbsp;g</td><td width=\"25%\">&nbsp;</td></tr><tr><td width=\"25%\">&nbsp;h</td><td width=\"25%\">&nbsp;i</td><td width=\"25%\">&nbsp;</td><td width=\"25%\">j&nbsp;</td></tr></tbody></table></div>';
+
+       var testResizeTable4 = (
+               '<table>' +
+                       '<tbody>' +
+                               '<tr>' +
+                                       '<td>a</td>' +
+                                       '<td>b</td>' +
+                               '</tr>' +
+                               '<tr>' +
+                                       '<td>a</td>' +
+                                       '<td>b</td>' +
+                                       '<td>c</td>' +
+                               '</tr>' +
+                               '<tr>' +
+                                       '<td>a</td>' +
+                               '</tr>' +
+                               '<tr>' +
+                                       '<td>a</td>' +
+                                       '<td>b</td>' +
+                                       '<td colspan="2">c</td>' +
+                               '</tr>' +
+                       '</tbody>' +
+               '</table>'
+       );
+
+       test("Is Pixel/Percentage Based Width", function() {
+               var pixelWidths = ['125px', '200px', '300em'];
+               var percentageWidths = ['25%', '30%', '100%'];
+               var i, pixelBasedSize, percentBasedSize;
+
+               for (i = 0; i < pixelWidths.length; i++) {
+                       pixelBasedSize = editor.plugins.table.resizeBars.isPixelBasedSize(pixelWidths[i]);
+                       deepEqual(pixelBasedSize, true);
+                       percentBasedSize = editor.plugins.table.resizeBars.isPercentageBasedSize(pixelWidths[i]);
+                       deepEqual(percentBasedSize, false);
+               }
+               for (i = 0; i < percentageWidths.length; i++) {
+                       pixelBasedSize = editor.plugins.table.resizeBars.isPixelBasedSize(percentageWidths[i]);
+                       deepEqual(pixelBasedSize, false);
+                       percentBasedSize = editor.plugins.table.resizeBars.isPercentageBasedSize(percentageWidths[i]);
+                       deepEqual(percentBasedSize, true);
+               }
+       });
+
+       test("Get widths/heights", function() {
+               editor.setContent(testResizeTable1);
+
+               var table = editor.dom.select('table')[0];
+               var details = editor.plugins.table.resizeBars.getTableDetails(table);
+               var tableGrid = editor.plugins.table.resizeBars.getTableGrid(details);
+
+               deepEqual(
+                       editor.plugins.table.resizeBars.getWidths(tableGrid, false, table),
+                       [100, 100, 100, 100]
+               );
+
+               deepEqual(
+                       editor.plugins.table.resizeBars.getPixelHeights(tableGrid),
+                       [20, 20, 20, 20]
+               );
+
+               editor.setContent(testResizeTable2);
+
+               table = editor.dom.select('table')[0];
+               details = editor.plugins.table.resizeBars.getTableDetails(table);
+               tableGrid = editor.plugins.table.resizeBars.getTableGrid(details);
+
+               deepEqual(
+                       editor.plugins.table.resizeBars.getWidths(tableGrid, false, table),
+                       [20, 20, 20, 40, 10]
+               );
+
+               deepEqual(
+                       editor.plugins.table.resizeBars.getPixelHeights(tableGrid),
+                       [20, 20, 20]
+               );
+
+               editor.setContent(testResizeTable3);
+
+               table = editor.dom.select('table')[0];
+               details = editor.plugins.table.resizeBars.getTableDetails(table);
+               tableGrid = editor.plugins.table.resizeBars.getTableGrid(details);
+
+               deepEqual(
+                       editor.plugins.table.resizeBars.getWidths(tableGrid, true, table),
+                       [25, 25, 25, 25]
+               );
+       });
+
+       test("Draw bars/clear bars", function() {
+               editor.setContent(testResizeTable1);
+
+               var table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.drawBars(table);
+
+               equal(editor.dom.select('.mce-resize-bar-row').length,
+                       4);
+
+               equal(editor.dom.select('.mce-resize-bar-col').length,
+                       4);
+
+               editor.plugins.table.resizeBars.clearBars();
+
+               equal(editor.dom.select('.mce-resize-bar-row').length,
+                       0);
+
+               equal(editor.dom.select('.mce-resize-bar-col').length,
+                       0);
+       });
+
+       test("Draw bars/clear bars on invalid table", function() {
+               editor.setContent(testResizeTable4);
+
+               var table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.drawBars(table);
+
+               equal(editor.dom.select('.mce-resize-bar-row').length,
+                       4);
+
+               equal(editor.dom.select('.mce-resize-bar-col').length,
+                       4);
+
+               editor.plugins.table.resizeBars.clearBars();
+
+               equal(editor.dom.select('.mce-resize-bar-row').length,
+                       0);
+
+               equal(editor.dom.select('.mce-resize-bar-col').length,
+                       0);
+       });
+
+       test("Determine deltas", function() {
+               var deltas = editor.plugins.table.resizeBars.determineDeltas([100, 100, 100, 100], 0, 50, 10, false);
+
+               deepEqual(deltas, [50, -50, 0, 0]);
+
+               deltas = editor.plugins.table.resizeBars.determineDeltas([100, 100, 100, 100], 1, 50, 10, false);
+
+               deepEqual(deltas, [0, 50, -50, 0]);
+
+               deltas = editor.plugins.table.resizeBars.determineDeltas([100, 100, 100, 100], 2, 50, 10, false);
+
+               deepEqual(deltas, [0, 0, 50, -50]);
+
+               deltas = editor.plugins.table.resizeBars.determineDeltas([100, 100, 100, 100], 3, 50, 10, false);
+
+               deepEqual(deltas, [0, 0, 0, 50]);
+
+               deltas = editor.plugins.table.resizeBars.determineDeltas([50], 0, 5, 10, true);
+
+               deepEqual(deltas, [50]); // 50 + 50 = 100, one column, percent case
+
+               deltas = editor.plugins.table.resizeBars.determineDeltas([25, 25, 25, 25], 1, 5, 10, true);
+
+               deepEqual(deltas, [0, 5, -5, 0]);
+       });
+
+       test("Adjust width", function() {
+               editor.setContent(testResizeTable1);
+
+               var table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustWidth(table, 50, 0);
+
+               equal(editor.getContent(),
+                       '<table style=\"width: 426px;\">' +
+                       '<tbody>' +
+                       '<tr>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">A1</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">A2</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">A3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 150px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 150px; height: 20px;\" colspan=\"2\">B2</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">B3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 150px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 50px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">C3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 400px; height: 20px;\" colspan=\"4\">D1</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+               editor.setContent(testResizeTable1);
+
+               table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustWidth(table, 50, 1);
+
+               equal(editor.getContent(),
+                       '<table style=\"width: 426px;\">' +
+                       '<tbody>' +
+                       '<tr>' +
+                       '<td style=\"width: 250px; height: 20px;\" colspan=\"2\">A1</td>' +
+                       '<td style=\"width: 50px; height: 20px;\">A2</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">A3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">B2</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">B3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 150px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 150px; height: 20px;\" colspan=\"2\">C3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 400px; height: 20px;\" colspan=\"4\">D1</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+               editor.setContent(testResizeTable1);
+
+               table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustWidth(table, 50, 2);
+
+               equal(editor.getContent(),
+                       '<table style=\"width: 426px;\">' +
+                       '<tbody>' +
+                       '<tr>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">A1</td>' +
+                       '<td style=\"width: 150px; height: 20px;\">A2</td>' +
+                       '<td style=\"width: 50px; height: 20px;\">A3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 250px; height: 20px;\" colspan=\"2\">B2</td>' +
+                       '<td style=\"width: 50px; height: 20px;\">B3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">C3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 400px; height: 20px;\" colspan=\"4\">D1</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+               editor.setContent(testResizeTable1);
+
+               table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustWidth(table, 50, 3);
+
+               equal(editor.getContent(),
+                       '<table style=\"width: 476px;\">' +
+                       '<tbody>' +
+                       '<tr>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">A1</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">A2</td>' +
+                       '<td style=\"width: 150px; height: 20px;\">A3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 200px; height: 20px;\" colspan=\"2\">B2</td>' +
+                       '<td style=\"width: 150px; height: 20px;\">B3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 100px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 100px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 250px; height: 20px;\" colspan=\"2\">C3</td>' +
+                       '</tr>' +
+                       '<tr>' +
+                       '<td style=\"width: 450px; height: 20px;\" colspan=\"4\">D1</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+       });
+
+       test("Adjust height", function() {
+               editor.setContent(testResizeTable2);
+
+               var table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustHeight(table, 50, 0);
+
+               equal(editor.getContent(),
+                       '<table border=\"1\">' +
+                       '<tbody>' +
+                       '<tr style=\"height: 70px;\">' +
+                       '<th style=\"width: 20px; height: 70px;\">A0</th>' +
+                       '<th style=\"width: 20px; height: 70px;\">A1</th>' +
+                       '<th style=\"width: 20px; height: 70px;\">A2</th>' +
+                       '<th style=\"width: 40px; height: 70px;\">A3</th>' +
+                       '<th style=\"width: 10px; height: 70px;\">A4</th>' +
+                       '</tr>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<td style=\"width: 20px; height: 20px;\">B0</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">B2</td>' +
+                       '<td style=\"width: 40px; height: 20px;\">B3</td>' +
+                       '<td style=\"width: 10px; height: 40px;\" rowspan=\"2\">B3</td>' +
+                       '</tr>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<td style=\"width: 20px; height: 20px;\">C0</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 40px; height: 20px;\">C3</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+               editor.setContent(testResizeTable2);
+
+               table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustHeight(table, 50, 1);
+
+               equal(editor.getContent(),
+                       '<table border=\"1\">' +
+                       '<tbody>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<th style=\"width: 20px; height: 20px;\">A0</th>' +
+                       '<th style=\"width: 20px; height: 20px;\">A1</th>' +
+                       '<th style=\"width: 20px; height: 20px;\">A2</th>' +
+                       '<th style=\"width: 40px; height: 20px;\">A3</th>' +
+                       '<th style=\"width: 10px; height: 20px;\">A4</th>' +
+                       '</tr>' +
+                       '<tr style=\"height: 70px;\">' +
+                       '<td style=\"width: 20px; height: 70px;\">B0</td>' +
+                       '<td style=\"width: 20px; height: 70px;\">B1</td>' +
+                       '<td style=\"width: 20px; height: 70px;\">B2</td>' +
+                       '<td style=\"width: 40px; height: 70px;\">B3</td>' +
+                       '<td style=\"width: 10px; height: 90px;\" rowspan=\"2\">B3</td>' +
+                       '</tr>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<td style=\"width: 20px; height: 20px;\">C0</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">C1</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">C2</td>' +
+                       '<td style=\"width: 40px; height: 20px;\">C3</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+               editor.setContent(testResizeTable2);
+
+               table = editor.dom.select('table')[0];
+
+               editor.plugins.table.resizeBars.adjustHeight(table, 50, 2);
+
+               equal(editor.getContent(),
+                       '<table border=\"1\">' +
+                       '<tbody>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<th style=\"width: 20px; height: 20px;\">A0</th>' +
+                       '<th style=\"width: 20px; height: 20px;\">A1</th>' +
+                       '<th style=\"width: 20px; height: 20px;\">A2</th>' +
+                       '<th style=\"width: 40px; height: 20px;\">A3</th>' +
+                       '<th style=\"width: 10px; height: 20px;\">A4</th>' +
+                       '</tr>' +
+                       '<tr style=\"height: 20px;\">' +
+                       '<td style=\"width: 20px; height: 20px;\">B0</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">B1</td>' +
+                       '<td style=\"width: 20px; height: 20px;\">B2</td>' +
+                       '<td style=\"width: 40px; height: 20px;\">B3</td>' +
+                       '<td style=\"width: 10px; height: 90px;\" rowspan=\"2\">B3</td>' +
+                       '</tr>' +
+                       '<tr style=\"height: 70px;\">' +
+                       '<td style=\"width: 20px; height: 70px;\">C0</td>' +
+                       '<td style=\"width: 20px; height: 70px;\">C1</td>' +
+                       '<td style=\"width: 20px; height: 70px;\">C2</td>' +
+                       '<td style=\"width: 40px; height: 70px;\">C3</td>' +
+                       '</tr>' +
+                       '</tbody>' +
+                       '</table>');
+
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> })();
</span></span></pre></div>
<a id="trunktestsquniteditortinymceEditorjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/Editor.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/Editor.js        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/Editor.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm1",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -27,7 +26,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm2",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -309,7 +307,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                selector: "#elmx",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                 add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -404,18 +401,20 @@
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Block script execution', function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<script></script><script type="x"></script><script type="mce-x"></script>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.setContent('<script></script><script type="x"></script><script type="mce-x"></script><p>x</p>');
</ins><span class="cx" style="display: block; padding: 0 10px">         equal(
</span><span class="cx" style="display: block; padding: 0 10px">                Utils.cleanHtml(editor.getBody().innerHTML),
</span><span class="cx" style="display: block; padding: 0 10px">                '<script type="mce-no/type"></script>' +
</span><span class="cx" style="display: block; padding: 0 10px">                '<script type="mce-x"></script>' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                '<script type="mce-x"></script>'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         '<script type="mce-x"></script>' +
+               '<p>x</p>'
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px">        equal(
</span><span class="cx" style="display: block; padding: 0 10px">                editor.getContent(),
</span><span class="cx" style="display: block; padding: 0 10px">                '<script></script>' +
</span><span class="cx" style="display: block; padding: 0 10px">                '<script type="x"></script>' +
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                '<script type="x"></script>'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         '<script type="x"></script>' +
+               '<p>x</p>'
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -437,4 +436,50 @@
</span><span class="cx" style="display: block; padding: 0 10px">        currentValue = "b";
</span><span class="cx" style="display: block; padding: 0 10px">        ok(editor.queryCommandValue("CustomCommand2"), "b");
</span><span class="cx" style="display: block; padding: 0 10px">        ok(lastScope === editor, "Scope is not editor");
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+});
+
+test('setDirty/isDirty', function() {
+       var lastArgs = null;
+
+       editor.on('dirty', function(e) {
+               lastArgs = e;
+       });
+
+       editor.setDirty(false);
+       strictEqual(lastArgs, null);
+       strictEqual(editor.isDirty(), false);
+
+       editor.setDirty(true);
+       strictEqual(lastArgs.type, 'dirty');
+       strictEqual(editor.isDirty(), true);
+
+       lastArgs = null;
+       editor.setDirty(true);
+       strictEqual(lastArgs, null);
+       strictEqual(editor.isDirty(), true);
+
+       editor.setDirty(false);
+       strictEqual(lastArgs, null);
+       strictEqual(editor.isDirty(), false);
+});
+
+test('setMode', function() {
+       var clickCount = 0;
+
+       editor.on('click', function() {
+               clickCount++;
+       });
+
+       editor.dom.fire(editor.getBody(), 'click');
+       equal(clickCount, 1);
+
+       editor.setMode('readonly');
+       equal(editor.theme.panel.find('button:last')[2].disabled(), true);
+       editor.dom.fire(editor.getBody(), 'click');
+       equal(clickCount, 1);
+
+       editor.setMode('design');
+       editor.dom.fire(editor.getBody(), 'click');
+       equal(editor.theme.panel.find('button:last')[2].disabled(), false);
+       equal(clickCount, 2);
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsquniteditortinymceEditorCommandsjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/EditorCommands.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/EditorCommands.js        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/EditorCommands.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -249,7 +248,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Forced root block
</span><span class="cx" style="display: block; padding: 0 10px">        editor.getBody().innerHTML = '';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.execCommand('mceInsertContent', false, 'test<strong>123</strong><!-- a -->'); // WP: use <strong> instead of <b>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.execCommand('mceInsertContent', false, 'test<b>123</b><!-- a -->');
</ins><span class="cx" style="display: block; padding: 0 10px">         // Opera adds an extra paragraph since it adds a BR at the end of the contents pass though this for now since it's an minority browser
</span><span class="cx" style="display: block; padding: 0 10px">        equal(editor.getContent().replace(/<p>\u00a0<\/p>/g, ''), '<p>test<strong>123</strong></p><!-- a -->');
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -260,7 +259,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        // Forced root block
</span><span class="cx" style="display: block; padding: 0 10px">        editor.getBody().innerHTML = '<table><tr><td>X</td></tr></table>';
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('td', 0, 'td', 0);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.execCommand('mceInsertContent', false, 'test<strong>123</strong><!-- a -->'); // WP: use <strong> instead of <b>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.execCommand('mceInsertContent', false, 'test<b>123</b><!-- a -->');
</ins><span class="cx" style="display: block; padding: 0 10px">         equal(editor.getContent(), '<table><tbody><tr><td>test<strong>123</strong><!-- a -->X</td></tr></tbody></table>');
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -480,18 +479,18 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<img src="tinymce/ui/img/raster.gif" />');
</span><span class="cx" style="display: block; padding: 0 10px">        editor.selection.select(editor.dom.select('img')[0]);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.execCommand('JustifyLeft'); // WP use classes
-       equal(editor.getContent(), '<p><img class="alignleft" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.execCommand('JustifyLeft');
+       equal(editor.getContent(), '<p><img style="float: left;" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<img src="tinymce/ui/img/raster.gif" />');
</span><span class="cx" style="display: block; padding: 0 10px">        editor.selection.select(editor.dom.select('img')[0]);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.execCommand('JustifyCenter'); // WP use classes
-       equal(editor.getContent(), '<p><img class="aligncenter" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.execCommand('JustifyCenter');
+       equal(editor.getContent(), '<p><img style="margin-right: auto; margin-left: auto; display: block;" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<img src="tinymce/ui/img/raster.gif" />');
</span><span class="cx" style="display: block; padding: 0 10px">        editor.selection.select(editor.dom.select('img')[0]);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.execCommand('JustifyRight'); // WP use classes
-       equal(editor.getContent(), '<p><img class="alignright" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.execCommand('JustifyRight');
+       equal(editor.getContent(), '<p><img style="float: right;" src="tinymce/ui/img/raster.gif" alt="" /></p>');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('mceBlockQuote', function() {
</span></span></pre></div>
<a id="trunktestsquniteditortinymceEditorManagerjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/EditorManager.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/EditorManager.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/EditorManager.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,7 +55,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                selector: "textarea",
</span><span class="cx" style="display: block; padding: 0 10px">                init_instance_callback: function(editor1) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 tinymce.util.Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // Destroy the editor by setting innerHTML common ajax pattern
</span><span class="cx" style="display: block; padding: 0 10px">                                document.getElementById('view').innerHTML = '<textarea id="' + editor1.id + '"></textarea>';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -83,7 +82,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                selector: "#view textarea",
</span><span class="cx" style="display: block; padding: 0 10px">                init_instance_callback: function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        window.setTimeout(function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 tinymce.util.Delay.setTimeout(function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 QUnit.start();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                strictEqual(tinymce.get().length, 2);
</span></span></pre></div>
<a id="trunktestsquniteditortinymceEditorUploadjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/EditorUpload.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/EditorUpload.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/EditorUpload.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -51,6 +51,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                teardown: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.editorUpload.destroy();
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.settings.automatic_uploads = false;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        delete editor.settings.images_dataimg_filter;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -134,7 +135,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.images_upload_handler = function(data, success) {
</span><span class="cx" style="display: block; padding: 0 10px">                        uploadCount++;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        success();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 success('url');
</ins><span class="cx" style="display: block; padding: 0 10px">                 };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.uploadImages(done);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -152,12 +153,36 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.settings.images_upload_handler = function(data, success) {
</span><span class="cx" style="display: block; padding: 0 10px">                        uploadCount++;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        success();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 success('url');
</ins><span class="cx" style="display: block; padding: 0 10px">                 };
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.uploadImages(done);
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        asyncTest('Don\'t upload filtered image', function() {
+               var uploadCount = 0;
+
+               function done() {
+                       QUnit.start();
+                       equal(uploadCount, 0, 'Should not upload.');
+               }
+
+               editor.getBody().innerHTML = (
+                       '<img src="' + testBlobDataUri + '" data-skip="1">'
+               );
+
+               editor.settings.images_dataimg_filter = function(img) {
+                       return !img.hasAttribute('data-skip');
+               };
+
+               editor.settings.images_upload_handler = function(data, success) {
+                       uploadCount++;
+                       success('url');
+               };
+
+               editor.uploadImages(done);
+       });
+
</ins><span class="cx" style="display: block; padding: 0 10px">         test('Retain blobs not in blob cache', function() {
</span><span class="cx" style="display: block; padding: 0 10px">                editor.getBody().innerHTML = '<img src="blob:http%3A//host/f8d1e462-8646-485f-87c5-f9bcee5873c6">';
</span><span class="cx" style="display: block; padding: 0 10px">                QUnit.equal('<p><img src="blob:http%3A//host/f8d1e462-8646-485f-87c5-f9bcee5873c6" alt="" /></p>', editor.getContent());
</span></span></pre></div>
<a id="trunktestsquniteditortinymceEnterKeyjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/EnterKey.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/EnterKey.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/EnterKey.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymceForceBlocksjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/ForceBlocks.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/ForceBlocks.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/ForceBlocks.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymceFormatter_applyjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/Formatter_apply.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/Formatter_apply.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/Formatter_apply.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm1",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         external_plugins: { noneditable: '../../../../tests/qunit/editor/external-plugins/noneditable/plugin.min.js' }, // WP
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29,7 +28,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm2",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         inline: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1099,7 +1097,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> test("Applying formats on a list including child nodes", function(){
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.register('format', {inline: 'strong'});
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<ol><li>a</li><li>b<ul><li>c</li><li>d<br /><ol><li>e</li><li>f</li></ol></li></ul></li><li>g</li></ol>');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        rng = editor.dom.createRng();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var rng = editor.dom.createRng();
</ins><span class="cx" style="display: block; padding: 0 10px">         rng.setStart(editor.dom.select('li')[0].firstChild, 0);
</span><span class="cx" style="display: block; padding: 0 10px">        rng.setEnd(editor.dom.select('li')[6].firstChild, 1);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.selection.setRng(rng);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1449,7 +1447,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false">def</p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p:nth-child(2)', 0, 'p:nth-child(2)', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.apply('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p>def</p>', 'Text is not bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false">def</p>', 'Text is not bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('format block on contentEditable: false block', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1459,7 +1457,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false">def</p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p:nth-child(2)', 0, 'p:nth-child(2)', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.apply('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p>def</p>', 'P is not h1');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false">def</p>', 'P is not h1');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: false on start and contentEditable: true on end', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1469,7 +1467,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false">def</p><p>ghi</p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p:nth-child(2)', 0, 'p:nth-child(3)', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.apply('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p>def</p><p><b>ghi</b></p>', 'Text in last paragraph is bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false">def</p><p><b>ghi</b></p>', 'Text in last paragraph is bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: true on start and contentEditable: false on end', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1479,7 +1477,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false">def</p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p:nth-child(1)', 0, 'p:nth-child(2)', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.apply('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p><b>abc</b></p><p>def</p>', 'Text in first paragraph is bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p><b>abc</b></p><p contenteditable="false">def</p>', 'Text in first paragraph is bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: true inside contentEditable: false', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1489,7 +1487,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false"><span contenteditable="true">def</span></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('span', 0, 'span', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.apply('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p><span><b>def</b></span></p>', 'Text is bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false"><span contenteditable="true"><b>def</b></span></p>', 'Text is bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Del element wrapping blocks', function() {
</span></span></pre></div>
<a id="trunktestsquniteditortinymceFormatter_checkjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/Formatter_check.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/Formatter_check.js       2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/Formatter_check.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm1",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        extended_valid_elements: 'b,i,span[style|contenteditable]',
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -24,7 +23,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "#elm2",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         inline: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymceFormatter_removejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/Formatter_remove.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/Formatter_remove.js      2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/Formatter_remove.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         external_plugins: { noneditable: '../../../../tests/qunit/editor/external-plugins/noneditable/plugin.min.js' }, // WP
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        add_unload_trigger: false,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -331,6 +330,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: false on start and contentEditable: true on end', function() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        if (tinymce.Env.ie) {
+               ok("Skipped since IE doesn't support selection of parts of a cE=false element", true);
+               return;
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.formatter.register('format', {inline: 'b'});
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false"><b>def</b></p><p><b>ghj</b></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        var rng = editor.dom.createRng();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -338,7 +342,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        rng.setEnd(editor.dom.select('b')[1].firstChild, 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.selection.setRng(rng);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.remove('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p><b>def</b></p><p>ghj</p>', 'Text in last paragraph is not bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false"><b>def</b></p><p>ghj</p>', 'Text in last paragraph is not bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: true on start and contentEditable: false on end', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -346,7 +350,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p><b>def</b></p><p contenteditable="false"><b>ghj</b></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p:nth-child(2) b', 0, 'p:last b', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.remove('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p>def</p><p><b>ghj</b></p>', 'Text in first paragraph is not bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p>def</p><p contenteditable="false"><b>ghj</b></p>', 'Text in first paragraph is not bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('contentEditable: true inside contentEditable: false', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -354,7 +358,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><p contenteditable="false"><span contenteditable="true"><b>def</b></span></p>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('b', 0, 'b', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.remove('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><p><span>def</span></p>', 'Text is not bold');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><p contenteditable="false"><span contenteditable="true">def</span></p>', 'Text is not bold');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('remove format block on contentEditable: false block', function() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -362,7 +366,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        editor.setContent('<p>abc</p><h1 contenteditable="false">def</h1>');
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('h1:nth-child(2)', 0, 'h1:nth-child(2)', 3);
</span><span class="cx" style="display: block; padding: 0 10px">        editor.formatter.remove('format');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.getContent(), '<p>abc</p><h1>def</h1>', 'H1 is still not h1');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ equal(editor.getContent(), '<p>abc</p><h1 contenteditable="false">def</h1>', 'H1 is still not h1');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('remove format on del using removeformat format', function() {
</span></span></pre></div>
<a id="trunktestsquniteditortinymceSelectionOverridesjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/SelectionOverrides.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/SelectionOverrides.js                            (rev 0)
+++ trunk/tests/qunit/editor/tinymce/SelectionOverrides.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,167 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/caret/CaretPosition",
+       "tinymce/caret/CaretContainer",
+       "tinymce/util/VK"
+], function(CaretPosition, CaretContainer, VK) {
+       module("tinymce.SelectionOverrides", {
+               setupModule: function() {
+                       QUnit.stop();
+
+                       tinymce.init({
+                               selector: "textarea",
+                               add_unload_trigger: false,
+                               disable_nodechange: true,
+                               skin: false,
+                               entities: 'raw',
+                               indent: false,
+                               init_instance_callback: function(ed) {
+                                       window.editor = ed;
+                                       QUnit.start();
+                               }
+                       });
+               }
+       });
+
+       function pressKey(key) {
+               return function() {
+                       Utils.pressKey({keyCode: key});
+               };
+       }
+
+       function exitPreTest(arrow, offset, expectedContent) {
+               return function() {
+                       editor.setContent('<pre>abc</pre>');
+
+                       Utils.setSelection('pre', 1);
+                       arrow();
+                       equal(editor.getContent(), '<pre>abc</pre>');
+                       equal(editor.selection.getNode().nodeName, 'PRE');
+
+                       Utils.setSelection('pre', offset);
+                       arrow();
+                       equal(editor.getContent(), expectedContent);
+                       equal(editor.selection.getNode().nodeName, 'P');
+               };
+       }
+
+       var leftArrow = pressKey(VK.LEFT);
+       var rightArrow = pressKey(VK.RIGHT);
+       var backspace = pressKey(VK.BACKSPACE);
+       var forwardDelete = pressKey(VK.DELETE);
+       var upArrow = pressKey(VK.UP);
+       var downArrow = pressKey(VK.DOWN);
+
+       test('left/right over cE=false inline', function() {
+               editor.setContent('<span contenteditable="false">1</span>');
+               editor.selection.select(editor.$('span')[0]);
+
+               leftArrow();
+               equal(editor.getContent(), '<p><span contenteditable="false">1</span></p>');
+               equal(CaretContainer.isCaretContainerInline(editor.selection.getRng().startContainer), true);
+               equal(editor.selection.getRng().startContainer, editor.$('p')[0].firstChild);
+
+               rightArrow();
+               equal(editor.getContent(), '<p><span contenteditable="false">1</span></p>');
+               equal(editor.selection.getNode(), editor.$('span')[0]);
+
+               rightArrow();
+               equal(editor.getContent(), '<p><span contenteditable="false">1</span></p>');
+               equal(CaretContainer.isCaretContainerInline(editor.selection.getRng().startContainer), true);
+               equal(editor.selection.getRng().startContainer, editor.$('p')[0].lastChild);
+       });
+
+       test('left/right over cE=false block', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               leftArrow();
+               equal(editor.getContent(), '<p contenteditable="false">1</p>');
+               equal(CaretContainer.isCaretContainerBlock(editor.selection.getRng().startContainer), true);
+
+               rightArrow();
+               equal(editor.getContent(), '<p contenteditable="false">1</p>');
+               equal(editor.selection.getNode(), editor.$('p')[0]);
+
+               rightArrow();
+               equal(editor.getContent(), '<p contenteditable="false">1</p>');
+               equal(CaretContainer.isCaretContainerBlock(editor.selection.getRng().startContainer), true);
+       });
+
+       test('left before cE=false block and type', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               leftArrow();
+               Utils.type('a');
+               equal(editor.getContent(), '<p>a</p><p contenteditable="false">1</p>');
+               equal(CaretContainer.isCaretContainerBlock(editor.selection.getRng().startContainer.parentNode), false);
+       });
+
+       test('right after cE=false block and type', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               rightArrow();
+               Utils.type('a');
+               equal(editor.getContent(), '<p contenteditable="false">1</p><p>a</p>');
+               equal(CaretContainer.isCaretContainerBlock(editor.selection.getRng().startContainer.parentNode), false);
+       });
+
+       test('up from P to inline cE=false', function() {
+               editor.setContent('<p>a<span contentEditable="false">1</span></p><p>abc</p>');
+               Utils.setSelection('p:last', 3);
+
+               upArrow();
+               equal(CaretContainer.isCaretContainerInline(editor.$('p:first')[0].lastChild), true);
+       });
+
+       test('down from P to inline cE=false', function() {
+               editor.setContent('<p>abc</p><p>a<span contentEditable="false">1</span></p>');
+               Utils.setSelection('p:first', 3);
+
+               downArrow();
+               equal(CaretContainer.isCaretContainerInline(editor.$('p:last')[0].lastChild), true);
+       });
+
+       test('backspace on selected cE=false block', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               backspace();
+               equal(editor.getContent(), '');
+               equal(editor.selection.getRng().startContainer, editor.$('p')[0]);
+       });
+
+       test('backspace after cE=false block', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               rightArrow();
+               backspace();
+               equal(editor.getContent(), '');
+               equal(editor.selection.getRng().startContainer, editor.$('p')[0]);
+       });
+
+       test('delete on selected cE=false block', function() {
+               editor.setContent('<p contenteditable="false">1</p>');
+               editor.selection.select(editor.$('p')[0]);
+
+               forwardDelete();
+               equal(editor.getContent(), '');
+               equal(editor.selection.getRng().startContainer, editor.$('p')[0]);
+       });
+
+       test('delete inside nested cE=true block element', function() {
+               editor.setContent('<div contenteditable="false">1<div contenteditable="true">2</div>3</div>');
+               Utils.setSelection('div div', 1);
+
+               Utils.type('\b');
+               equal(Utils.cleanHtml(editor.getBody().innerHTML), '<div contenteditable="false">1<div contenteditable="true"><br data-mce-bogus="1"></div>3</div>');
+               equal(editor.selection.getRng().startContainer, editor.$('div div')[0]);
+       });
+
+       test('exit pre block (up)', exitPreTest(upArrow, 0, '<p>\u00a0</p><pre>abc</pre>'));
+       test('exit pre block (left)', exitPreTest(leftArrow, 0, '<p>\u00a0</p><pre>abc</pre>'));
+       test('exit pre block (down)', exitPreTest(downArrow, 3, '<pre>abc</pre><p>\u00a0</p>'));
+       test('exit pre block (right)', exitPreTest(rightArrow, 3, '<pre>abc</pre><p>\u00a0</p>'));
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/SelectionOverrides.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymceShortcutsjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/Shortcuts.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/Shortcuts.js     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/Shortcuts.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymceUndoManagerjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/UndoManager.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/UndoManager.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/UndoManager.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        init_instance_callback: function(ed) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -368,7 +367,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Dirty state type letter', function() {
</span><span class="cx" style="display: block; padding: 0 10px">        editor.undoManager.clear();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.setContent("<p>a</p>");
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p', 1);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -380,7 +379,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Dirty state type shift+letter', function() {
</span><span class="cx" style="display: block; padding: 0 10px">        editor.undoManager.clear();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.setContent("<p>a</p>");
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p', 1);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -392,7 +391,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Dirty state type AltGr+letter', function() {
</span><span class="cx" style="display: block; padding: 0 10px">        editor.undoManager.clear();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.isNotDirty = true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ editor.setDirty(false);
</ins><span class="cx" style="display: block; padding: 0 10px">         editor.setContent("<p>a</p>");
</span><span class="cx" style="display: block; padding: 0 10px">        Utils.setSelection('p', 1);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre></div>
<a id="trunktestsquniteditortinymcecaretCaretBookmarkjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretBookmark.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretBookmark.js                           (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretBookmark.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,137 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       'tinymce/caret/CaretBookmark',
+       'tinymce/caret/CaretPosition'
+], function(CaretBookmark, CaretPosition) {
+       var assertCaretPosition = Utils.assertCaretPosition;
+
+       module('tinymce.caret.CaretBookmark');
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       function setupHtml(html) {
+               getRoot().innerHTML = html;
+       }
+
+       function createTextPos(textNode, offset) {
+               return new CaretPosition(textNode, offset);
+       }
+
+       test('create element index', function() {
+               setupHtml('<b></b><i></i><b></b>');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().childNodes[0])), 'b[0],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().childNodes[1])), 'i[0],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().childNodes[2])), 'b[1],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.after(getRoot().childNodes[2])), 'b[1],after');
+       });
+
+       test('create text index', function() {
+               setupHtml('a<b></b>b<b></b>ccc');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[0], 0)), 'text()[0],0');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[2], 1)), 'text()[1],1');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[4], 3)), 'text()[2],3');
+       });
+
+       test('create text index on fragmented text nodes', function() {
+               setupHtml('a');
+               getRoot().appendChild(document.createTextNode('b'));
+               getRoot().appendChild(document.createTextNode('c'));
+               getRoot().appendChild(document.createElement('b'));
+               getRoot().appendChild(document.createTextNode('d'));
+               getRoot().appendChild(document.createTextNode('e'));
+
+               equal(getRoot().childNodes.length, 6);
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[0], 0)), 'text()[0],0');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[1], 0)), 'text()[0],1');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[2], 0)), 'text()[0],2');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[4], 0)), 'text()[1],0');
+               equal(CaretBookmark.create(getRoot(), createTextPos(getRoot().childNodes[5], 0)), 'text()[1],1');
+       });
+
+       test('create br element index', function() {
+               setupHtml('<p><br data-mce-bogus="1"></p><p><br></p>');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().firstChild.firstChild)), 'p[0]/br[0],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().lastChild.firstChild)), 'p[1]/br[0],before');
+       });
+
+       test('create deep element index', function() {
+               setupHtml('<p><span>a</span><span><b id="a"></b><b id="b"></b><b id="c"></b></span></p>');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(document.getElementById('a'))), 'p[0]/span[1]/b[0],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(document.getElementById('b'))), 'p[0]/span[1]/b[1],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(document.getElementById('c'))), 'p[0]/span[1]/b[2],before');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.after(document.getElementById('c'))), 'p[0]/span[1]/b[2],after');
+       });
+
+       test('create deep text index', function() {
+               setupHtml('<p><span>a</span><span id="x">a<b></b>b<b></b>ccc</span></p>');
+               equal(CaretBookmark.create(getRoot(), createTextPos(document.getElementById('x').childNodes[0], 0)), 'p[0]/span[1]/text()[0],0');
+               equal(CaretBookmark.create(getRoot(), createTextPos(document.getElementById('x').childNodes[2], 1)), 'p[0]/span[1]/text()[1],1');
+               equal(CaretBookmark.create(getRoot(), createTextPos(document.getElementById('x').childNodes[4], 3)), 'p[0]/span[1]/text()[2],3');
+       });
+
+       test('create element index from bogus', function() {
+               setupHtml('<b></b><span data-mce-bogus="1"><b></b><span data-mce-bogus="1"><b></b><b></b></span></span>');
+               equal(CaretBookmark.create(getRoot(), CaretPosition.before(getRoot().lastChild.lastChild.childNodes[1])), 'b[3],before');
+       });
+
+       test('resolve element index', function() {
+               setupHtml('<b></b><i></i><b></b>');
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'b[0],before'), CaretPosition.before(getRoot().childNodes[0]));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'b[1],before'), CaretPosition.before(getRoot().childNodes[2]));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'b[1],after'), CaretPosition.after(getRoot().childNodes[2]));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'i[0],before'), CaretPosition.before(getRoot().childNodes[1]));
+       });
+
+       test('resolve odd element names', function() {
+               setupHtml('<h-2X>abc</h-2X>');
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'h-2X[0]/text()[0],2'), createTextPos(getRoot().childNodes[0].firstChild, 2));
+       });
+
+       test('resolve deep element index', function() {
+               setupHtml('<p><span>a</span><span><b id="a"></b><b id="b"></b><b id="c"></b></span></p>');
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'p[0]/span[1]/b[0],before'), CaretPosition.before(document.getElementById('a')));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'p[0]/span[1]/b[1],before'), CaretPosition.before(document.getElementById('b')));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'p[0]/span[1]/b[2],before'), CaretPosition.before(document.getElementById('c')));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'p[0]/span[1]/b[2],after'), CaretPosition.after(document.getElementById('c')));
+       });
+
+       test('resolve text index', function() {
+               setupHtml('a<b></b>b<b></b>ccc');
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],0'), createTextPos(getRoot().childNodes[0], 0));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[1],1'), createTextPos(getRoot().childNodes[2], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[2],3'), createTextPos(getRoot().childNodes[4], 3));
+       });
+
+       test('resolve text index on fragmented text nodes', function() {
+               setupHtml('a');
+               getRoot().appendChild(document.createTextNode('b'));
+               getRoot().appendChild(document.createTextNode('c'));
+               getRoot().appendChild(document.createElement('b'));
+               getRoot().appendChild(document.createTextNode('d'));
+               getRoot().appendChild(document.createTextNode('e'));
+
+               equal(getRoot().childNodes.length, 6);
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],0'), createTextPos(getRoot().childNodes[0], 0));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],1'), createTextPos(getRoot().childNodes[0], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],2'), createTextPos(getRoot().childNodes[1], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],3'), createTextPos(getRoot().childNodes[2], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],4'), createTextPos(getRoot().childNodes[2], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[1],0'), createTextPos(getRoot().childNodes[4], 0));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[1],1'), createTextPos(getRoot().childNodes[4], 1));
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[1],2'), createTextPos(getRoot().childNodes[5], 1));
+       });
+
+       test('resolve text index with to high offset', function() {
+               setupHtml('abc');
+               assertCaretPosition(CaretBookmark.resolve(getRoot(), 'text()[0],10'), createTextPos(getRoot().childNodes[0], 3));
+       });
+
+       test('resolve invalid paths', function() {
+               setupHtml('<b><i></i></b>');
+               equal(CaretBookmark.resolve(getRoot(), 'x[0]/y[1]/z[2]'), null);
+               equal(CaretBookmark.resolve(getRoot(), 'b[0]/i[2]'), null);
+               equal(CaretBookmark.resolve(getRoot(), 'x'), null);
+               equal(CaretBookmark.resolve(getRoot(), null), null);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretBookmark.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretCaretCandidatejs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretCandidate.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretCandidate.js                          (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretCandidate.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,63 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/CaretCandidate",
+       "tinymce/dom/DomQuery",
+       "tinymce/text/Zwsp"
+], function(Env, CaretCandidate, $, Zwsp) {
+       module("tinymce.caret.CaretCandidate");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       function setupHtml(html) {
+               getRoot().innerHTML = html;
+       }
+
+       test('isCaretCandidate', function() {
+               $.each("img input textarea hr table iframe video audio object".split(' '), function(index, name) {
+                       equal(CaretCandidate.isCaretCandidate(document.createElement(name)), true);
+               });
+
+               equal(CaretCandidate.isCaretCandidate(document.createTextNode('text')), true);
+               equal(CaretCandidate.isCaretCandidate($('<span contentEditable="false"></span>')[0]), true);
+               equal(CaretCandidate.isCaretCandidate($('<div contentEditable="false"></div>')[0]), true);
+               equal(CaretCandidate.isCaretCandidate($('<table><tr><td>X</td></tr></table>')[0]), true);
+               equal(CaretCandidate.isCaretCandidate($('<span contentEditable="true"></span>')[0]), false);
+               equal(CaretCandidate.isCaretCandidate($('<span></span>')[0]), false);
+               equal(CaretCandidate.isCaretCandidate(document.createComment('text')), false);
+               equal(CaretCandidate.isCaretCandidate($('<span data-mce-caret="1"></span>')[0]), false);
+               equal(CaretCandidate.isCaretCandidate(document.createTextNode(Zwsp.ZWSP)), false);
+       });
+
+       test('isInEditable', function() {
+               setupHtml('abc<span contentEditable="true"><b><span contentEditable="false">X</span></b></span>');
+               equal(CaretCandidate.isInEditable($('span span', getRoot())[0].firstChild, getRoot()), false);
+               equal(CaretCandidate.isInEditable($('span span', getRoot())[0], getRoot()), true);
+               equal(CaretCandidate.isInEditable($('span', getRoot())[0], getRoot()), true);
+               equal(CaretCandidate.isInEditable(getRoot().firstChild, getRoot()), true);
+       });
+
+       test('isAtomic', function() {
+               $.each(["img", "input", "textarea", "hr"], function(index, name) {
+                       equal(CaretCandidate.isAtomic(document.createElement(name)), true);
+               });
+
+               equal(CaretCandidate.isAtomic(document.createTextNode('text')), false);
+               equal(CaretCandidate.isAtomic($('<table><tr><td>X</td></tr></table>')[0]), false);
+               equal(CaretCandidate.isAtomic($('<span contentEditable="false">X</span>')[0]), true);
+               equal(CaretCandidate.isAtomic($('<span contentEditable="false">X<span contentEditable="true">Y</span>Z</span>')[0]), false);
+       });
+
+       test('isEditableCaretCandidate', function() {
+               setupHtml('abc<b>xx</b><span contentEditable="false"><span contentEditable="false">X</span></span>');
+               equal(CaretCandidate.isEditableCaretCandidate(getRoot().firstChild, getRoot()), true);
+               equal(CaretCandidate.isEditableCaretCandidate($('b', getRoot())[0]), false);
+               equal(CaretCandidate.isEditableCaretCandidate($('span', getRoot())[0]), true);
+               equal(CaretCandidate.isEditableCaretCandidate($('span span', getRoot())[0]), false);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretCandidate.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretCaretContainerjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretContainer.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretContainer.js                          (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretContainer.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,114 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/CaretContainer",
+       "tinymce/dom/DomQuery",
+       "tinymce/text/Zwsp"
+], function(Env, CaretContainer, $, Zwsp) {
+       module("tinymce.caret.CaretContainer");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       function setViewHtml(html) {
+               getRoot().innerHTML = html;
+       }
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       test('isCaretContainer', function() {
+               equal(CaretContainer.isCaretContainer(document.createTextNode('text')), false);
+               equal(CaretContainer.isCaretContainer($('<span></span>')[0]), false);
+               equal(CaretContainer.isCaretContainer($('<span data-mce-caret="1"></span>')[0]), true);
+               equal(CaretContainer.isCaretContainer($('<span data-mce-caret="1">x</span>')[0].firstChild), true);
+               equal(CaretContainer.isCaretContainer(document.createTextNode(Zwsp.ZWSP)), true);
+       });
+
+       test('isCaretContainerBlock', function() {
+               equal(CaretContainer.isCaretContainerBlock(document.createTextNode('text')), false);
+               equal(CaretContainer.isCaretContainerBlock($('<span></span>')[0]), false);
+               equal(CaretContainer.isCaretContainerBlock($('<span data-mce-caret="1"></span>')[0]), true);
+               equal(CaretContainer.isCaretContainerBlock($('<span data-mce-caret="1">a</span>')[0].firstChild), true);
+               equal(CaretContainer.isCaretContainerBlock(document.createTextNode(Zwsp.ZWSP)), false);
+       });
+
+       test('isCaretContainerInline', function() {
+               equal(CaretContainer.isCaretContainerInline(document.createTextNode('text')), false);
+               equal(CaretContainer.isCaretContainerInline($('<span></span>')[0]), false);
+               equal(CaretContainer.isCaretContainerInline($('<span data-mce-caret="1"></span>')[0]), false);
+               equal(CaretContainer.isCaretContainerInline($('<span data-mce-caret="1">a</span>')[0].firstChild), false);
+               equal(CaretContainer.isCaretContainerInline(document.createTextNode(Zwsp.ZWSP)), true);
+       });
+
+       test('insertInline before element', function() {
+               setViewHtml('<span contentEditable="false">1</span>');
+               equal(CaretContainer.insertInline(getRoot().firstChild, true), getRoot().firstChild);
+               equal(CaretContainer.isCaretContainerInline(getRoot().firstChild), true);
+       });
+
+       test('insertInline after element', function() {
+               setViewHtml('<span contentEditable="false">1</span>');
+               equal(CaretContainer.insertInline(getRoot().firstChild, false), getRoot().lastChild);
+               equal(CaretContainer.isCaretContainerInline(getRoot().lastChild), true);
+       });
+
+       test('insertInline between elements', function() {
+               setViewHtml('<span contentEditable="false">1</span><span contentEditable="false">1</span>');
+               equal(CaretContainer.insertBlock('p', getRoot().lastChild, true), getRoot().childNodes[1]);
+               equal(CaretContainer.isCaretContainerBlock(getRoot().childNodes[1]), true);
+       });
+
+       test('insertInline before element with ZWSP', function() {
+               setViewHtml('abc' + Zwsp.ZWSP + '<span contentEditable="false">1</span>');
+               equal(CaretContainer.insertInline(getRoot().lastChild, true), getRoot().childNodes[1]);
+               equal(CaretContainer.isCaretContainerInline(getRoot().firstChild), false);
+               equal(CaretContainer.isCaretContainerInline(getRoot().childNodes[1]), true);
+       });
+
+       test('insertInline after element with ZWSP', function() {
+               setViewHtml('<span contentEditable="false">1</span>' + Zwsp.ZWSP + 'abc');
+               equal(CaretContainer.insertInline(getRoot().firstChild, false), getRoot().childNodes[1]);
+               equal(CaretContainer.isCaretContainerInline(getRoot().lastChild), false);
+               equal(CaretContainer.isCaretContainerInline(getRoot().childNodes[1]), true);
+       });
+
+       test('insertBlock before element', function() {
+               setViewHtml('<span contentEditable="false">1</span>');
+               equal(CaretContainer.insertBlock('p', getRoot().firstChild, true), getRoot().firstChild);
+               equal(CaretContainer.isCaretContainerBlock(getRoot().firstChild), true);
+       });
+
+       test('insertBlock after element', function() {
+               setViewHtml('<span contentEditable="false">1</span>');
+               equal(CaretContainer.insertBlock('p', getRoot().firstChild, false), getRoot().lastChild);
+               equal(CaretContainer.isCaretContainerBlock(getRoot().lastChild), true);
+       });
+
+       test('insertBlock between elements', function() {
+               setViewHtml('<span contentEditable="false">1</span><span contentEditable="false">1</span>');
+               equal(CaretContainer.insertInline(getRoot().lastChild, true), getRoot().childNodes[1]);
+               equal(CaretContainer.isCaretContainerInline(getRoot().childNodes[1]), true);
+       });
+
+       test('remove', function() {
+               setViewHtml('<span contentEditable="false">1</span>');
+
+               CaretContainer.insertInline(getRoot().firstChild, true);
+               equal(CaretContainer.isCaretContainerInline(getRoot().firstChild), true);
+
+               CaretContainer.remove(getRoot().firstChild);
+               equal(CaretContainer.isCaretContainerInline(getRoot().firstChild), false);
+       });
+
+       test('startsWithCaretContainer', function() {
+               setViewHtml(Zwsp.ZWSP + 'abc');
+               equal(CaretContainer.startsWithCaretContainer(getRoot().firstChild), true);
+       });
+
+       test('endsWithCaretContainer', function() {
+               setViewHtml('abc' + Zwsp.ZWSP);
+               equal(CaretContainer.endsWithCaretContainer(getRoot().firstChild), true);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretContainer.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretCaretPositionjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretPosition.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretPosition.js                           (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretPosition.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,173 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/CaretPosition"
+], function(Env, CaretPosition) {
+       module("tinymce.caret.CaretPosition");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       var createRange = Utils.createRange,
+               assertCaretPosition = Utils.assertCaretPosition,
+               assertRange = Utils.assertRange;
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       function setupHtml(html) {
+               tinymce.$(getRoot()).empty();
+               getRoot().innerHTML = html;
+       }
+
+       test('Constructor', function() {
+               setupHtml('abc');
+               strictEqual(new CaretPosition(getRoot(), 0).container(), getRoot());
+               strictEqual(new CaretPosition(getRoot(), 1).offset(), 1);
+               strictEqual(new CaretPosition(getRoot().firstChild, 0).container(), getRoot().firstChild);
+               strictEqual(new CaretPosition(getRoot().firstChild, 1).offset(), 1);
+       });
+
+       test('fromRangeStart', function() {
+               setupHtml('abc');
+               assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 0)), new CaretPosition(getRoot(), 0));
+               assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot(), 1)), new CaretPosition(getRoot(), 1));
+               assertCaretPosition(CaretPosition.fromRangeStart(createRange(getRoot().firstChild, 1)), new CaretPosition(getRoot().firstChild, 1));
+       });
+
+       test('fromRangeEnd', function() {
+               setupHtml('abc');
+               assertCaretPosition(CaretPosition.fromRangeEnd(createRange(getRoot(), 0, getRoot(), 1)), new CaretPosition(getRoot(), 1));
+               assertCaretPosition(CaretPosition.fromRangeEnd(createRange(getRoot().firstChild, 0, getRoot().firstChild, 1)), new CaretPosition(getRoot().firstChild, 1));
+       });
+
+       test('after', function() {
+               setupHtml('abc<b>123</b>');
+               assertCaretPosition(CaretPosition.after(getRoot().firstChild), new CaretPosition(getRoot(), 1));
+               assertCaretPosition(CaretPosition.after(getRoot().lastChild), new CaretPosition(getRoot(), 2));
+       });
+
+       test('before', function() {
+               setupHtml('abc<b>123</b>');
+               assertCaretPosition(CaretPosition.before(getRoot().firstChild), new CaretPosition(getRoot(), 0));
+               assertCaretPosition(CaretPosition.before(getRoot().lastChild), new CaretPosition(getRoot(), 1));
+       });
+
+       test('isAtStart', function() {
+               setupHtml('abc<b>123</b>123');
+               ok(new CaretPosition(getRoot(), 0).isAtStart());
+               ok(!new CaretPosition(getRoot(), 1).isAtStart());
+               ok(!new CaretPosition(getRoot(), 3).isAtStart());
+               ok(new CaretPosition(getRoot().firstChild, 0).isAtStart());
+               ok(!new CaretPosition(getRoot().firstChild, 1).isAtStart());
+               ok(!new CaretPosition(getRoot().firstChild, 3).isAtStart());
+       });
+
+       test('isAtEnd', function() {
+               setupHtml('abc<b>123</b>123');
+               ok(new CaretPosition(getRoot(), 3).isAtEnd());
+               ok(!new CaretPosition(getRoot(), 2).isAtEnd());
+               ok(!new CaretPosition(getRoot(), 0).isAtEnd());
+               ok(new CaretPosition(getRoot().firstChild, 3).isAtEnd());
+               ok(!new CaretPosition(getRoot().firstChild, 0).isAtEnd());
+               ok(!new CaretPosition(getRoot().firstChild, 1).isAtEnd());
+       });
+
+       test('toRange', function() {
+               setupHtml('abc');
+               assertRange(new CaretPosition(getRoot(), 0).toRange(), createRange(getRoot(), 0));
+               assertRange(new CaretPosition(getRoot(), 1).toRange(), createRange(getRoot(), 1));
+               assertRange(new CaretPosition(getRoot().firstChild, 1).toRange(), createRange(getRoot().firstChild, 1));
+       });
+
+       test('isEqual', function() {
+               setupHtml('abc');
+               equal(new CaretPosition(getRoot(), 0).isEqual(new CaretPosition(getRoot(), 0)), true);
+               equal(new CaretPosition(getRoot(), 1).isEqual(new CaretPosition(getRoot(), 0)), false);
+               equal(new CaretPosition(getRoot(), 0).isEqual(new CaretPosition(getRoot().firstChild, 0)), false);
+       });
+
+       test('isVisible', function() {
+               setupHtml('<b>  abc</b>');
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 0).isVisible(), false);
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 3).isVisible(), true);
+       });
+
+       test('getClientRects', function() {
+               setupHtml(
+                       '<b>abc</b>' +
+                       '<div contentEditable="false">1</div>' +
+                       '<div contentEditable="false">2</div>' +
+                       '<div contentEditable="false">2</div>' +
+                       '<input style="margin: 10px">' +
+                       '<input style="margin: 10px">' +
+                       '<input style="margin: 10px">' +
+                       '<p>123</p>' +
+                       '<br>'
+               );
+
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 1).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 2).getClientRects().length, 2);
+               equal(new CaretPosition(getRoot(), 3).getClientRects().length, 2);
+               equal(new CaretPosition(getRoot(), 4).getClientRects().length, 2);
+               equal(new CaretPosition(getRoot(), 5).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 6).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 7).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 8).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot(), 9).getClientRects().length, 0);
+       });
+
+       test('getClientRects between inline node and cE=false', function() {
+               setupHtml(
+                       '<span contentEditable="false">def</span>' +
+                       '<b>ghi</b>'
+               );
+
+               equal(new CaretPosition(getRoot(), 1).getClientRects().length, 1);
+       });
+
+       test('getClientRects at last visible character', function() {
+               setupHtml('<b>a  </b>');
+
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 1).getClientRects().length, 1);
+       });
+
+       test('getClientRects at extending character', function() {
+               setupHtml('a\u0301b');
+
+               equal(new CaretPosition(getRoot().firstChild, 0).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0);
+               equal(new CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1);
+       });
+
+       test('getClientRects at whitespace character', function() {
+               setupHtml('  a  ');
+
+               equal(new CaretPosition(getRoot().firstChild, 0).getClientRects().length, 0);
+               equal(new CaretPosition(getRoot().firstChild, 1).getClientRects().length, 0);
+               equal(new CaretPosition(getRoot().firstChild, 2).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot().firstChild, 3).getClientRects().length, 1);
+               equal(new CaretPosition(getRoot().firstChild, 4).getClientRects().length, 0);
+               equal(new CaretPosition(getRoot().firstChild, 5).getClientRects().length, 0);
+       });
+
+       test('getNode', function() {
+               setupHtml('<b>abc</b><input><input>');
+
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getNode(), getRoot().firstChild.firstChild);
+               equal(new CaretPosition(getRoot(), 1).getNode(), getRoot().childNodes[1]);
+               equal(new CaretPosition(getRoot(), 2).getNode(), getRoot().childNodes[2]);
+               equal(new CaretPosition(getRoot(), 3).getNode(), getRoot().childNodes[2]);
+       });
+
+       test('getNode (before)', function() {
+               setupHtml('<b>abc</b><input><input>');
+
+               equal(new CaretPosition(getRoot().firstChild.firstChild, 0).getNode(true), getRoot().firstChild.firstChild);
+               equal(new CaretPosition(getRoot(), 1).getNode(true), getRoot().childNodes[0]);
+               equal(new CaretPosition(getRoot(), 2).getNode(true), getRoot().childNodes[1]);
+               equal(new CaretPosition(getRoot(), 3).getNode(true), getRoot().childNodes[2]);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretPosition.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretCaretUtilsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretUtils.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretUtils.js                              (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretUtils.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,243 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/CaretUtils",
+       "tinymce/caret/CaretPosition",
+       "tinymce/text/Zwsp"
+], function(Env, CaretUtils, CaretPosition, Zwsp) {
+       module("tinymce.caret.CaretUtils");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       var assertRange = Utils.assertRange,
+               createRange = Utils.createRange,
+               ZWSP = Zwsp.ZWSP;
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       function setupHtml(html) {
+               getRoot().innerHTML = html;
+       }
+
+       function findElm(selector) {
+               return tinymce.$(selector, getRoot())[0];
+       }
+
+       test('isForwards', function() {
+               equal(CaretUtils.isForwards(1), true);
+               equal(CaretUtils.isForwards(10), true);
+               equal(CaretUtils.isForwards(0), false);
+               equal(CaretUtils.isForwards(-1), false);
+               equal(CaretUtils.isForwards(-10), false);
+       });
+
+       test('isBackwards', function() {
+               equal(CaretUtils.isBackwards(1), false);
+               equal(CaretUtils.isBackwards(10), false);
+               equal(CaretUtils.isBackwards(0), false);
+               equal(CaretUtils.isBackwards(-1), true);
+               equal(CaretUtils.isBackwards(-10), true);
+       });
+
+       test('findNode', function() {
+               setupHtml('<b>abc</b><b><i>123</i></b>def');
+
+               function isBold(node) {
+                       return node.nodeName == 'B';
+               }
+
+               function isText(node) {
+                       return node.nodeType == 3;
+               }
+
+               equal(CaretUtils.findNode(getRoot(), 1, isBold, getRoot()), getRoot().firstChild);
+               equal(CaretUtils.findNode(getRoot(), 1, isText, getRoot()), getRoot().firstChild.firstChild);
+               equal(CaretUtils.findNode(getRoot().childNodes[1], 1, isBold, getRoot().childNodes[1]), null);
+               equal(CaretUtils.findNode(getRoot().childNodes[1], 1, isText, getRoot().childNodes[1]).nodeName, '#text');
+               equal(CaretUtils.findNode(getRoot(), -1, isBold, getRoot()), getRoot().childNodes[1]);
+               equal(CaretUtils.findNode(getRoot(), -1, isText, getRoot()), getRoot().lastChild);
+       });
+
+       test('getEditingHost', function() {
+               setupHtml('<span contentEditable="true"><span contentEditable="false"></span></span>');
+
+               equal(CaretUtils.getEditingHost(getRoot(), getRoot()), getRoot());
+               equal(CaretUtils.getEditingHost(getRoot().firstChild, getRoot()), getRoot());
+               equal(CaretUtils.getEditingHost(getRoot().firstChild.firstChild, getRoot()), getRoot().firstChild);
+       });
+
+       test('getParentBlock', function() {
+               setupHtml('<p>abc</p><div><p><table><tr><td>X</td></tr></p></div>');
+
+               strictEqual(CaretUtils.getParentBlock(findElm('p:first')), findElm('p:first'));
+               strictEqual(CaretUtils.getParentBlock(findElm('td:first').firstChild), findElm('td:first'));
+               strictEqual(CaretUtils.getParentBlock(findElm('td:first')), findElm('td:first'));
+               strictEqual(CaretUtils.getParentBlock(findElm('table')), findElm('table'));
+       });
+
+       test('isInSameBlock', function() {
+               setupHtml('<p>abc</p><p>def<b>ghj</b></p>');
+
+               strictEqual(CaretUtils.isInSameBlock(
+                       CaretPosition(findElm('p:first').firstChild, 0),
+                       CaretPosition(findElm('p:last').firstChild, 0)
+               ), false);
+
+               strictEqual(CaretUtils.isInSameBlock(
+                       CaretPosition(findElm('p:first').firstChild, 0),
+                       CaretPosition(findElm('p:first').firstChild, 0)
+               ), true);
+
+               strictEqual(CaretUtils.isInSameBlock(
+                       CaretPosition(findElm('p:last').firstChild, 0),
+                       CaretPosition(findElm('b').firstChild, 0)
+               ), true);
+       });
+
+       test('isInSameEditingHost', function() {
+               setupHtml(
+                       '<p>abc</p>' +
+                       'def' +
+                       '<span contentEditable="false">' +
+                               '<span contentEditable="true">ghi</span>' +
+                               '<span contentEditable="true">jkl</span>' +
+                       '</span>'
+               );
+
+               strictEqual(CaretUtils.isInSameEditingHost(
+                       CaretPosition(findElm('p:first').firstChild, 0),
+                       CaretPosition(findElm('p:first').firstChild, 1)
+               ), true);
+
+               strictEqual(CaretUtils.isInSameEditingHost(
+                       CaretPosition(findElm('p:first').firstChild, 0),
+                       CaretPosition(getRoot().childNodes[1], 1)
+               ), true);
+
+               strictEqual(CaretUtils.isInSameEditingHost(
+                       CaretPosition(findElm('span span:first').firstChild, 0),
+                       CaretPosition(findElm('span span:first').firstChild, 1)
+               ), true);
+
+               strictEqual(CaretUtils.isInSameEditingHost(
+                       CaretPosition(findElm('p:first').firstChild, 0),
+                       CaretPosition(findElm('span span:first').firstChild, 1)
+               ), false);
+
+               strictEqual(CaretUtils.isInSameEditingHost(
+                       CaretPosition(findElm('span span:first').firstChild, 0),
+                       CaretPosition(findElm('span span:last').firstChild, 1)
+               ), false);
+       });
+
+       test('isBeforeContentEditableFalse', function() {
+               setupHtml(
+                       '<span contentEditable="false"></span>' +
+                       '<span contentEditable="false"></span>a'
+               );
+
+               strictEqual(CaretUtils.isBeforeContentEditableFalse(CaretPosition(getRoot(), 0)), true);
+               strictEqual(CaretUtils.isBeforeContentEditableFalse(CaretPosition(getRoot(), 1)), true);
+               strictEqual(CaretUtils.isBeforeContentEditableFalse(CaretPosition(getRoot(), 2)), false);
+               strictEqual(CaretUtils.isBeforeContentEditableFalse(CaretPosition(getRoot(), 3)), false);
+       });
+
+       test('isAfterContentEditableFalse', function() {
+               setupHtml(
+                       '<span contentEditable="false"></span>' +
+                       '<span contentEditable="false"></span>a'
+               );
+
+               strictEqual(CaretUtils.isAfterContentEditableFalse(CaretPosition(getRoot(), 0)), false);
+               strictEqual(CaretUtils.isAfterContentEditableFalse(CaretPosition(getRoot(), 1)), true);
+               strictEqual(CaretUtils.isAfterContentEditableFalse(CaretPosition(getRoot(), 2)), true);
+               strictEqual(CaretUtils.isAfterContentEditableFalse(CaretPosition(getRoot(), 3)), false);
+       });
+
+       test('normalizeRange', function() {
+               setupHtml(
+                       'abc<span contentEditable="false">1</span>def'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().firstChild, 2)), createRange(getRoot().firstChild, 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().firstChild, 3)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().lastChild, 2)), createRange(getRoot().lastChild, 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().lastChild, 0)), createRange(getRoot(), 2));
+       });
+
+       test('normalizeRange deep', function() {
+               setupHtml(
+                       '<i><b>abc</b></i><span contentEditable="false">1</span><i><b>def</b></i>'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('b').firstChild, 2)), createRange(findElm('b').firstChild, 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('b').firstChild, 3)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(findElm('b:last').firstChild, 1)), createRange(findElm('b:last').firstChild, 1));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(findElm('b:last').firstChild, 0)), createRange(getRoot(), 2));
+       });
+
+       test('normalizeRange break at candidate', function() {
+               setupHtml(
+                       '<p><b>abc</b><input></p><p contentEditable="false">1</p><p><input><b>abc</b></p>'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('b').firstChild, 3)), createRange(findElm('b').firstChild, 3));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('b:last').lastChild, 0)), createRange(findElm('b:last').lastChild, 0));
+       });
+
+       test('normalizeRange at block caret container', function() {
+               setupHtml(
+                       '<p data-mce-caret="before">\u00a0</p><p contentEditable="false">1</p><p data-mce-caret="after">\u00a0</p>'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('p:first').firstChild, 0)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(findElm('p:first').firstChild, 1)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(findElm('p:last').firstChild, 0)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(findElm('p:last').firstChild, 1)), createRange(getRoot(), 2));
+       });
+
+       test('normalizeRange at inline caret container', function() {
+               setupHtml(
+                       'abc<span contentEditable="false">1</span>def'
+               );
+
+               getRoot().insertBefore(document.createTextNode(ZWSP), getRoot().childNodes[1]);
+               getRoot().insertBefore(document.createTextNode(ZWSP), getRoot().childNodes[3]);
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().firstChild, 3)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().childNodes[1], 0)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().childNodes[1], 1)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().lastChild, 0)), createRange(getRoot(), 3));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().childNodes[3], 0)), createRange(getRoot(), 3));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().childNodes[3], 1)), createRange(getRoot(), 3));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().firstChild, 3)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().childNodes[1], 0)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().childNodes[1], 1)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().lastChild, 0)), createRange(getRoot(), 3));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().childNodes[3], 0)), createRange(getRoot(), 3));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().childNodes[3], 1)), createRange(getRoot(), 3));
+       });
+
+       test('normalizeRange at inline caret container (combined)', function() {
+               setupHtml(
+                       'abc' + ZWSP + '<span contentEditable="false">1</span>' + ZWSP + 'def'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().firstChild, 3)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().firstChild, 4)), createRange(getRoot(), 1));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().lastChild, 0)), createRange(getRoot(), 2));
+               assertRange(CaretUtils.normalizeRange(-1, getRoot(), createRange(getRoot().lastChild, 1)), createRange(getRoot(), 2));
+       });
+
+       test('normalizeRange at inline caret container after block', function() {
+               setupHtml(
+                       '<p><span contentEditable="false">1</span></p>' + ZWSP + 'abc'
+               );
+
+               assertRange(CaretUtils.normalizeRange(1, getRoot(), createRange(getRoot().lastChild, 0)), createRange(getRoot().lastChild, 0));
+
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretUtils.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretCaretWalkerjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/CaretWalker.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/CaretWalker.js                             (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/CaretWalker.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,273 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/CaretWalker",
+       "tinymce/caret/CaretPosition"
+], function(Env, CaretWalker, CaretPosition) {
+       module("tinymce.caret.CaretWalker");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       function getRoot() {
+               return document.getElementById('view');
+       }
+
+       function setupHtml(html) {
+               tinymce.$(getRoot()).empty();
+               getRoot().innerHTML = html;
+       }
+
+       function findElm(selector) {
+               return tinymce.$(selector, getRoot())[0];
+       }
+
+       function findElmPos(selector, offset) {
+               return CaretPosition(tinymce.$(selector, getRoot())[0], offset);
+       }
+
+       function findTextPos(selector, offset) {
+               return CaretPosition(tinymce.$(selector, getRoot())[0].firstChild, offset);
+       }
+
+       var assertCaretPosition = Utils.assertCaretPosition,
+               logicalCaret = new CaretWalker(getRoot());
+
+       test('inside empty root', function() {
+               setupHtml('');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), null);
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 0)), null);
+       });
+
+       test('on null', function() {
+               setupHtml('');
+               assertCaretPosition(logicalCaret.next(null), null);
+               assertCaretPosition(logicalCaret.prev(null), null);
+       });
+
+       test('within text node in root', function() {
+               setupHtml('abc');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 0)), CaretPosition(getRoot().firstChild, 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 1)), CaretPosition(getRoot().firstChild, 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 2)), CaretPosition(getRoot().firstChild, 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 3)), null);
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().firstChild, 3)), CaretPosition(getRoot().firstChild, 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().firstChild, 2)), CaretPosition(getRoot().firstChild, 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().firstChild, 1)), CaretPosition(getRoot().firstChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().firstChild, 0)), null);
+       });
+
+       test('within text node in element', function() {
+               setupHtml('<p>abc</p>');
+               assertCaretPosition(logicalCaret.next(findTextPos('p', 0)), findTextPos('p', 1));
+               assertCaretPosition(logicalCaret.next(findTextPos('p', 1)), findTextPos('p', 2));
+               assertCaretPosition(logicalCaret.next(findTextPos('p', 2)), findTextPos('p', 3));
+               assertCaretPosition(logicalCaret.next(findTextPos('p', 3)), null);
+               assertCaretPosition(logicalCaret.prev(findTextPos('p', 3)), findTextPos('p', 2));
+               assertCaretPosition(logicalCaret.prev(findTextPos('p', 2)), findTextPos('p', 1));
+               assertCaretPosition(logicalCaret.prev(findTextPos('p', 1)), findTextPos('p', 0));
+               assertCaretPosition(logicalCaret.prev(findTextPos('p', 0)), null);
+       });
+
+       test('from index text node over comment', function() {
+               setupHtml('abcd<!-- x -->abcd');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), CaretPosition(getRoot().firstChild, 0));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(getRoot().lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot().firstChild, 4));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 3)), CaretPosition(getRoot().lastChild, 4));
+       });
+
+       test('from text to text across elements', function() {
+               setupHtml('<p>abc</p><p>abc</p>');
+               assertCaretPosition(logicalCaret.next(findTextPos('p:first', 3)), findTextPos('p:last', 0));
+               assertCaretPosition(logicalCaret.prev(findTextPos('p:last', 0)), findTextPos('p:first', 3));
+       });
+
+       test('from text to text across elements with siblings', function() {
+               setupHtml('<p>abc<b><!-- x --></b></p><p><b><!-- x --></b></p><p><b><!-- x --></b>abc</p>');
+               assertCaretPosition(logicalCaret.next(findTextPos('p:first', 3)), CaretPosition(findElm('p:last').lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('p:last').lastChild)), findTextPos('p:first', 3));
+       });
+
+       test('from input to text', function() {
+               setupHtml('123<input>456');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), CaretPosition(getRoot().lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot().firstChild, 3));
+       });
+
+       test('from input to input across elements', function() {
+               setupHtml('<p><input></p><p><input></p>');
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('p:first'), 1)), CaretPosition(findElm('p:last'), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('p:last'), 0)), CaretPosition(findElm('p:first'), 1));
+       });
+
+       test('from br to br across elements', function() {
+               setupHtml('<p><br></p><p><br></p>');
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('p:first'), 1)), CaretPosition(findElm('p:last'), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('p:last'), 0)), CaretPosition(findElm('p:first'), 1));
+       });
+
+       test('from before/after br to text', function() {
+               setupHtml('<br>123<br>456<br>789');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 4)), CaretPosition(getRoot(), 5));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 5)), CaretPosition(getRoot().lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 5)), CaretPosition(getRoot(), 4));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 4)), CaretPosition(getRoot().childNodes[3], 3));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 0));
+       });
+
+       test('over br', function() {
+               setupHtml('<br><br><br>');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 3)), null);
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 3)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 0)), null);
+       });
+
+       test('over input', function() {
+               setupHtml('<input><input><input>');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 3)), null);
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 3)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 0)), null);
+       });
+
+       test('over img', function() {
+               setupHtml('<img src="about:blank"><img src="about:blank"><img src="about:blank">');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 0)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 3)), null);
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 3)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 0)), null);
+       });
+
+       test('over script/style/textarea', function() {
+               setupHtml('a<script>//x</script>b<style>x{}</style>c<textarea>x</textarea>d');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 1)), CaretPosition(getRoot().childNodes[2], 0));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().childNodes[2], 1)), CaretPosition(getRoot().childNodes[4], 0));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 5)), CaretPosition(getRoot(), 6));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 6)), CaretPosition(getRoot(), 5));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().childNodes[4], 0)), CaretPosition(getRoot().childNodes[2], 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot().childNodes[0], 1));
+       });
+
+       test('around tables', function() {
+               setupHtml('a<table><tr><td>A</td></tr></table><table><tr><td>B</td></tr></table>b');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 1)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), findTextPos('td:first', 0));
+               assertCaretPosition(logicalCaret.next(findTextPos('td:first', 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 2)), findTextPos('td:last', 0));
+               assertCaretPosition(logicalCaret.next(findTextPos('table:last td', 1)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 3)), CaretPosition(getRoot().lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().lastChild, 0)), CaretPosition(getRoot(), 3));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 3)), findTextPos('td:last', 1));
+               assertCaretPosition(logicalCaret.prev(findTextPos('td:last', 0)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), findTextPos('td:first', 1));
+               assertCaretPosition(logicalCaret.prev(findTextPos('td:first', 0)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 1)), CaretPosition(getRoot().firstChild, 1));
+       });
+
+       test('over cE=false', function() {
+               setupHtml('123<span contentEditable="false">a</span>456');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 3)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().lastChild, 0)), CaretPosition(getRoot(), 2));
+       });
+/*
+       test('from outside cE=false to nested cE=true', function() {
+               setupHtml('abc<span contentEditable="false">b<span contentEditable="true">c</span></span>def');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 3)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), findTextPos('span span', 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().lastChild, 0)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), findTextPos('span span', 1));
+       });
+
+       test('from outside cE=false to nested cE=true before/after cE=false', function() {
+               setupHtml('a<span contentEditable="false">b<span contentEditable="true"><span contentEditable="false"></span></span></span>d');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot(), 1)), CaretPosition(findElm('span span'), 0));
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('span span'), 1)), CaretPosition(getRoot(), 2));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot(), 2)), CaretPosition(findElm('span span'), 1));
+       });
+*/
+       test('from inside cE=true in cE=false to after cE=false', function() {
+               setupHtml(
+                       '<p>' +
+                               '<span contentEditable="false">' +
+                                       '<span contentEditable="true">' +
+                                               'abc' +
+                                       '</span>' +
+                                       'def' +
+                               '</span>' +
+                       '</p>' +
+                       '<p>abc</p>'
+               );
+
+               assertCaretPosition(logicalCaret.next(findTextPos('span span', 3)), CaretPosition(findElm('p'), 1));
+       });
+
+       test('around cE=false inside nested cE=true', function() {
+               setupHtml(
+                       '<span contentEditable="false">' +
+                               '<span contentEditable="true">' +
+                                       '<span contentEditable="false">1</span>' +
+                                       '<span contentEditable="false">2</span>' +
+                                       '<span contentEditable="false">3</span>' +
+                               '</span>' +
+                       '</span>'
+               );
+
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('span span'), 0)), CaretPosition(findElm('span span'), 1));
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('span span'), 1)), CaretPosition(findElm('span span'), 2));
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('span span'), 2)), CaretPosition(findElm('span span'), 3));
+               assertCaretPosition(logicalCaret.next(CaretPosition(findElm('span span'), 3)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('span span'), 0)), CaretPosition(getRoot(), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('span span'), 1)), CaretPosition(findElm('span span'), 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('span span'), 2)), CaretPosition(findElm('span span'), 1));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(findElm('span span'), 3)), CaretPosition(findElm('span span'), 2));
+       });
+
+       test('next from last node', function() {
+               setupHtml(
+                       '<p><b><input></b></p>' +
+                       '<input>' +
+                       '<p><b><input></b></p>'
+               );
+
+               assertCaretPosition(logicalCaret.next(findElmPos('p:first', 1)), CaretPosition(getRoot(), 1));
+               assertCaretPosition(logicalCaret.next(findElmPos('p:last', 1)), null);
+       });
+
+       test('left/right between cE=false inlines in different blocks', function() {
+               setupHtml(
+                       '<p>' +
+                               '<span contentEditable="false">abc</span>' +
+                       '</p>' +
+                       '<p>' +
+                               '<span contentEditable="false">def</span>' +
+                       '</p>'
+               );
+
+               assertCaretPosition(logicalCaret.next(findElmPos('p:first', 1)), findElmPos('p:last', 0));
+               assertCaretPosition(logicalCaret.prev(findElmPos('p:last', 0)), findElmPos('p:first', 1));
+       });
+
+       test('never into caret containers', function() {
+               setupHtml('abc<b data-mce-caret="1">def</b>ghi');
+               assertCaretPosition(logicalCaret.next(CaretPosition(getRoot().firstChild, 3)), CaretPosition(getRoot().lastChild, 0));
+               assertCaretPosition(logicalCaret.prev(CaretPosition(getRoot().lastChild, 0)), CaretPosition(getRoot().firstChild, 3));
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/CaretWalker.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretFakeCaretjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/FakeCaret.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/FakeCaret.js                               (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/FakeCaret.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,94 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/FakeCaret",
+       "tinymce/dom/DomQuery",
+       "tinymce/text/Zwsp"
+], function(Env, FakeCaret, $, Zwsp) {
+       var fakeCaret;
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       module("tinymce.caret.FakeCaret", {
+               setupModule: function() {
+                       fakeCaret = new FakeCaret($('#view')[0], isBlock);
+               },
+
+               teardownModule: function() {
+                       fakeCaret.destroy();
+               }
+       });
+
+       function isBlock(node) {
+               return node.nodeName == 'DIV';
+       }
+
+       test('show/hide (before, block)', function() {
+               var rng, $fakeCaretElm;
+
+               $('#view').html('<div>a</div>');
+
+               rng = fakeCaret.show(true, $('#view div')[0]);
+               $fakeCaretElm = $('#view').children();
+
+               equal($fakeCaretElm[0].nodeName, 'P');
+               equal($fakeCaretElm.attr('data-mce-caret'), 'before');
+               Utils.assertRange(rng, Utils.createRange($fakeCaretElm[0].firstChild, 0, $fakeCaretElm[0].firstChild, 1));
+
+               fakeCaret.hide();
+               equal($('#view *[data-mce-caret]').length, 0);
+       });
+
+       test('show/hide (before, block)', function() {
+               var rng, $fakeCaretElm;
+
+               $('#view').html('<div>a</div>');
+
+               rng = fakeCaret.show(false, $('#view div')[0]);
+               $fakeCaretElm = $('#view').children();
+
+               equal($fakeCaretElm[1].nodeName, 'P');
+               equal($fakeCaretElm.eq(1).attr('data-mce-caret'), 'after');
+               Utils.assertRange(rng, Utils.createRange($fakeCaretElm[1].firstChild, 0, $fakeCaretElm[1].firstChild, 1));
+
+               fakeCaret.hide();
+               equal($('#view *[data-mce-caret]').length, 0);
+       });
+
+       test('show/hide (before, inline)', function() {
+               var rng, $fakeCaretText;
+
+               $('#view').html('<span>a</span>');
+
+               rng = fakeCaret.show(true, $('#view span')[0]);
+               $fakeCaretText = $('#view').contents();
+
+               equal($fakeCaretText[0].nodeName, '#text');
+               equal($fakeCaretText[0].data, Zwsp.ZWSP);
+               Utils.assertRange(rng, Utils.createRange($fakeCaretText[0], 1));
+
+               fakeCaret.hide();
+               equal($('#view').contents()[0].nodeName, 'SPAN');
+       });
+
+       test('show/hide (after, inline)', function() {
+               var rng, $fakeCaretText;
+
+               $('#view').html('<span>a</span>');
+
+               rng = fakeCaret.show(false, $('#view span')[0]);
+               $fakeCaretText = $('#view').contents();
+
+               equal($fakeCaretText[1].nodeName, '#text');
+               equal($fakeCaretText[1].data, Zwsp.ZWSP);
+               Utils.assertRange(rng, Utils.createRange($fakeCaretText[1], 1));
+
+               fakeCaret.hide();
+               equal($('#view').contents()[0].nodeName, 'SPAN');
+       });
+
+       test('getCss', function() {
+               equal(fakeCaret.getCss().length > 10, true);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/FakeCaret.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretLineUtilsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/LineUtils.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/LineUtils.js                               (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/LineUtils.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,28 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/LineUtils"
+], function(Env, LineUtils) {
+       module("tinymce.caret.LineUtils");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       function rect(x, y, w, h) {
+               return {
+                       left: x,
+                       top: y,
+                       bottom: y + h,
+                       right: x + w,
+                       width: w,
+                       height: h
+               };
+       }
+
+       test('findClosestClientRect', function() {
+               deepEqual(LineUtils.findClosestClientRect([rect(10, 10, 10, 10), rect(30, 10, 10, 10)], 15), rect(10, 10, 10, 10));
+               deepEqual(LineUtils.findClosestClientRect([rect(10, 10, 10, 10), rect(30, 10, 10, 10)], 27), rect(30, 10, 10, 10));
+               deepEqual(LineUtils.findClosestClientRect([rect(10, 10, 10, 10), rect(30, 10, 10, 10)], 23), rect(10, 10, 10, 10));
+               deepEqual(LineUtils.findClosestClientRect([rect(10, 10, 10, 10), rect(20, 10, 10, 10)], 13), rect(10, 10, 10, 10));
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/LineUtils.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcecaretLineWalkerjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/caret/LineWalker.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/caret/LineWalker.js                              (rev 0)
+++ trunk/tests/qunit/editor/tinymce/caret/LineWalker.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,88 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/Env",
+       "tinymce/caret/LineWalker",
+       "tinymce/caret/CaretPosition",
+       "tinymce/dom/DomQuery"
+], function(Env, LineWalker, CaretPosition, $) {
+       module("tinymce.caret.LineWalker");
+
+       if (!Env.ceFalse) {
+               return;
+       }
+
+       test('positionsUntil', function() {
+               var result, predicateCallCount = 0;
+
+               function predicate() {
+                       predicateCallCount++;
+                       return false;
+               }
+
+               $('#view').html('<span contentEditable="false">a</span><span>b</span>');
+               result = LineWalker.positionsUntil(1, $('#view')[0], predicate, $('#view')[0].firstChild);
+               equal(result.length, 3);
+               equal(result[0].position.getNode(), $('#view')[0].lastChild);
+               equal(result[1].position.getNode(), $('#view')[0].lastChild.firstChild);
+               equal(result[2].position.getNode(), $('#view')[0].lastChild.firstChild);
+               equal(predicateCallCount, 3);
+
+               predicateCallCount = 0;
+               $('#view').html('<span>a</span><span contentEditable="false">b</span>');
+               result = LineWalker.positionsUntil(-1, $('#view')[0], predicate, $('#view')[0].lastChild);
+               equal(result.length, 3);
+               equal(result[0].position.getNode(), $('#view')[0].lastChild);
+               equal(result[1].position.getNode(), $('#view')[0].firstChild.firstChild);
+               equal(result[2].position.getNode(), $('#view')[0].firstChild.firstChild);
+               equal(predicateCallCount, 3);
+       });
+
+       test('upUntil', function() {
+               var caretPosition, result, predicateCallCount = 0;
+
+               function predicate() {
+                       predicateCallCount++;
+                       return false;
+               }
+
+               $('#view').html('<p>a</p><p>b</p><p>c</p>');
+
+               caretPosition = new CaretPosition($('#view')[0].lastChild.lastChild, 1);
+               result = LineWalker.upUntil($('#view')[0], predicate, caretPosition);
+
+               equal(result.length, 3);
+               equal(result[0].line, 0);
+               equal(result[1].line, 1);
+               equal(result[2].line, 2);
+               equal(predicateCallCount, 3);
+       });
+
+       test('downUntil', function() {
+               var caretPosition, result, predicateCallCount = 0;
+
+               function predicate() {
+                       predicateCallCount++;
+                       return false;
+               }
+
+               $('#view').html('<p>a</p><p>b</p><p>c</p>');
+
+               caretPosition = new CaretPosition($('#view')[0].firstChild.firstChild, 0);
+               result = LineWalker.downUntil($('#view')[0], predicate, caretPosition);
+
+               equal(result.length, 3);
+               equal(result[0].line, 0);
+               equal(result[1].line, 1);
+               equal(result[2].line, 2);
+               equal(predicateCallCount, 3);
+       });
+
+       test('isAboveLine', function() {
+               equal(LineWalker.isAboveLine(5)({line: 10}), true);
+               equal(LineWalker.isAboveLine(5)({line: 2}), false);
+       });
+
+       test('isLine', function() {
+               equal(LineWalker.isLine(3)({line: 3}), true);
+               equal(LineWalker.isLine(3)({line: 4}), false);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/caret/LineWalker.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcedomDimensionsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/dom/Dimensions.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/dom/Dimensions.js                                (rev 0)
+++ trunk/tests/qunit/editor/tinymce/dom/Dimensions.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/util/Arr",
+       "tinymce/dom/Dimensions"
+], function(Arr, Dimensions) {
+       module("tinymce.dom.Dimensions");
+
+       function setupHtml(html) {
+               var viewElm;
+
+               viewElm = document.getElementById('view');
+               viewElm.innerHTML = html;
+
+               return viewElm;
+       }
+
+       test('getClientRects', function() {
+               var viewElm = setupHtml('abc<span>123</span>');
+
+               strictEqual(Dimensions.getClientRects(viewElm.firstChild).length, 1);
+               strictEqual(Dimensions.getClientRects(viewElm.lastChild).length, 1);
+               strictEqual(Dimensions.getClientRects(viewElm.firstChild)[0].node, viewElm.firstChild);
+               strictEqual(Dimensions.getClientRects(viewElm.firstChild)[0].left > 3, true);
+               strictEqual(Dimensions.getClientRects(viewElm.lastChild)[0].left > 3, true);
+       });
+
+       test('getClientRects from array', function() {
+               var viewElm = setupHtml('<b>a</b><b>b</b>'),
+                       clientRects = Dimensions.getClientRects(Arr.toArray(viewElm.childNodes));
+
+               strictEqual(clientRects.length, 2);
+               strictEqual(clientRects[0].node, viewElm.childNodes[0]);
+               strictEqual(clientRects[1].node, viewElm.childNodes[1]);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/dom/Dimensions.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcedomNodeTypejs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/dom/NodeType.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/dom/NodeType.js                          (rev 0)
+++ trunk/tests/qunit/editor/tinymce/dom/NodeType.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,81 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/dom/NodeType",
+       "tinymce/dom/DomQuery"
+], function(NodeType, $) {
+       module("tinymce.dom.NodeType");
+
+       test('isText/isElement/isComment', function() {
+               strictEqual(NodeType.isText(document.createTextNode("x")), true);
+               strictEqual(NodeType.isText(null), false);
+               strictEqual(NodeType.isText(document.createElement("div")), false);
+               strictEqual(NodeType.isText(document.createComment("x")), false);
+
+               strictEqual(NodeType.isElement(document.createElement("div")), true);
+               strictEqual(NodeType.isElement(null), false);
+               strictEqual(NodeType.isElement(document.createTextNode("x")), false);
+               strictEqual(NodeType.isElement(document.createComment("x")), false);
+
+               strictEqual(NodeType.isComment(document.createComment("x")), true);
+               strictEqual(NodeType.isComment(null), false);
+               strictEqual(NodeType.isComment(document.createTextNode("x")), false);
+               strictEqual(NodeType.isComment(document.createElement("div")), false);
+       });
+
+       test('isBr', function() {
+               strictEqual(NodeType.isBr(null), false);
+               strictEqual(NodeType.isBr(document.createTextNode("x")), false);
+               strictEqual(NodeType.isBr(document.createElement('br')), true);
+               strictEqual(NodeType.isBr(document.createComment("x")), false);
+       });
+
+       test('isContentEditableTrue', function() {
+               strictEqual(NodeType.isContentEditableTrue(null), false);
+               strictEqual(NodeType.isContentEditableTrue(document.createComment("x")), false);
+               strictEqual(NodeType.isContentEditableTrue(document.createTextNode("x")), false);
+               strictEqual(NodeType.isContentEditableTrue(document.createElement('div')), false);
+               strictEqual(NodeType.isContentEditableTrue($('<div contentEditable="true"></div>')[0]), true);
+               strictEqual(NodeType.isContentEditableTrue($('<div contentEditable="trUe"></div>')[0]), true);
+               strictEqual(NodeType.isContentEditableTrue($('<div contentEditable="false"></div>')[0]), false);
+               strictEqual(NodeType.isContentEditableTrue($('<div contentEditable="fAlse"></div>')[0]), false);
+               strictEqual(NodeType.isContentEditableTrue($('<div contentEditable="inherit"></div>')[0]), false);
+       });
+
+       test('isContentEditableFalse', function() {
+               strictEqual(NodeType.isContentEditableFalse(null), false);
+               strictEqual(NodeType.isContentEditableFalse(document.createComment("x")), false);
+               strictEqual(NodeType.isContentEditableFalse(document.createTextNode("x")), false);
+               strictEqual(NodeType.isContentEditableFalse(document.createElement('div')), false);
+               strictEqual(NodeType.isContentEditableFalse($('<div contentEditable="true"></div>')[0]), false);
+               strictEqual(NodeType.isContentEditableFalse($('<div contentEditable="trUe"></div>')[0]), false);
+               strictEqual(NodeType.isContentEditableFalse($('<div contentEditable="false"></div>')[0]), true);
+               strictEqual(NodeType.isContentEditableFalse($('<div contentEditable="fAlse"></div>')[0]), true);
+               strictEqual(NodeType.isContentEditableFalse($('<div contentEditable="inherit"></div>')[0]), false);
+       });
+
+       test('matchNodeNames', function() {
+               var matchNodeNames = NodeType.matchNodeNames('a div #text');
+
+               strictEqual(matchNodeNames(null), false);
+               strictEqual(matchNodeNames(document.createTextNode('x')), true);
+               strictEqual(matchNodeNames(document.createElement('a')), true);
+               strictEqual(matchNodeNames(document.createElement('div')), true);
+               strictEqual(matchNodeNames(document.createElement('b')), false);
+       });
+
+       test('hasPropValue', function() {
+               var hasTabIndex3 = NodeType.hasPropValue('tabIndex', 3);
+
+               strictEqual(hasTabIndex3(null), false);
+               strictEqual(hasTabIndex3($('<div tabIndex="3"></div>')[0]), true);
+               strictEqual(hasTabIndex3(document.createElement('div')), false);
+               strictEqual(hasTabIndex3(document.createElement('b')), false);
+       });
+
+       test('isBogus', function() {
+               strictEqual(NodeType.isBogus($('<div data-mce-bogus="1"></div>')[0]), true);
+               strictEqual(NodeType.isBogus($('<div data-mce-bogus="all"></div>')[0]), true);
+               strictEqual(NodeType.isBogus($('<div></div>')[0]), false);
+               strictEqual(NodeType.isBogus(document.createTextNode('test')), false);
+               strictEqual(NodeType.isBogus(null), false);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/dom/NodeType.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcedomSelectionjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/dom/Selection.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/dom/Selection.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/dom/Selection.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,633 +1,592 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-module("tinymce.dom.Selection", {
-       setupModule: function() {
-               QUnit.stop();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/caret/CaretContainer",
+       "tinymce/Env"
+], function(CaretContainer, Env) {
+       module("tinymce.dom.Selection", {
+               setupModule: function() {
+                       QUnit.stop();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                tinymce.init({
-                       selector: "textarea",
-                       plugins: wpPlugins,
-                       add_unload_trigger: false,
-                       skin: false,
-                       forced_root_block: '',
-                       entities: 'raw',
-                       valid_styles: {
-                               '*': 'color,font-size,font-family,background-color,font-weight,font-style,text-decoration,float,margin,margin-top,margin-right,margin-bottom,margin-left,display'
-                       },
-                       custom_elements: 'custom1,~custom2',
-                       extended_valid_elements: 'custom1,custom2',
-                       init_instance_callback: function(ed) {
-                               window.editor = ed;
-                               QUnit.start();
-                       }
-               });
-       }
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 tinymce.init({
+                               selector: "textarea",
+                               add_unload_trigger: false,
+                               skin: false,
+                               forced_root_block: '',
+                               entities: 'raw',
+                               valid_styles: {
+                                       '*': 'color,font-size,font-family,background-color,font-weight,font-style,text-decoration,float,margin,margin-top,margin-right,margin-bottom,margin-left,display'
+                               },
+                               custom_elements: 'custom1,~custom2',
+                               extended_valid_elements: 'custom1,custom2',
+                               init_instance_callback: function(ed) {
+                                       window.editor = ed;
+                                       QUnit.start();
+                               }
+                       });
+               }
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getContent', function() {
-       var rng, eventObj;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getContent', function() {
+               var rng, eventObj;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get selected contents
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 1);
-       editor.selection.setRng(rng);
-       equal(editor.selection.getContent(), '<p>text</p>', 'Get selected contents');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get selected contents
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 1);
+               editor.selection.setRng(rng);
+               equal(editor.selection.getContent(), '<p>text</p>', 'Get selected contents');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get selected contents (collapsed)
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 0);
-       editor.selection.setRng(rng);
-       equal(editor.selection.getContent(), '', 'Get selected contents (collapsed)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get selected contents (collapsed)
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 0);
+               editor.selection.setRng(rng);
+               equal(editor.selection.getContent(), '', 'Get selected contents (collapsed)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get selected contents, onGetContent event
-       eventObj = {};
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get selected contents, onGetContent event
+               eventObj = {};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        function handler(event) {
-               eventObj = event;
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function handler(event) {
+                       eventObj = event;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.on('GetContent', handler);
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 1);
-       editor.selection.setRng(rng);
-       editor.selection.getContent();
-       equal(eventObj.content, '<p>text</p>', 'Get selected contents, onGetContent event');
-       editor.off('GetContent', handler);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.on('GetContent', handler);
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 1);
+               editor.selection.setRng(rng);
+               editor.selection.getContent();
+               equal(eventObj.content, '<p>text</p>', 'Get selected contents, onGetContent event');
+               editor.off('GetContent', handler);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('setContent', function() {
-       var rng, eventObj;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('setContent', function() {
+               var rng, eventObj;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Set contents at selection
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 1);
-       editor.selection.setRng(rng);
-       editor.selection.setContent('<div>test</div>');
-       equal(editor.getContent(), '<div>test</div>', 'Set contents at selection');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Set contents at selection
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 1);
+               editor.selection.setRng(rng);
+               editor.selection.setContent('<div>test</div>');
+               equal(editor.getContent(), '<div>test</div>', 'Set contents at selection');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Set contents at selection (collapsed)
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 0);
-       editor.selection.setRng(rng);
-       editor.selection.setContent('<div>test</div>');
-       equal(editor.getContent(), '<div>test</div>\n<p>text</p>', 'Set contents at selection (collapsed)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Set contents at selection (collapsed)
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 0);
+               editor.selection.setRng(rng);
+               editor.selection.setContent('<div>test</div>');
+               equal(editor.getContent(), '<div>test</div>\n<p>text</p>', 'Set contents at selection (collapsed)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Insert in middle of paragraph
-       editor.setContent('<p>beforeafter</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 'before'.length);
-       rng.setEnd(editor.getBody().firstChild.firstChild, 'before'.length);
-       editor.selection.setRng(rng);
-       editor.selection.setContent('<br />');
-       equal(editor.getContent(), '<p>before<br />after</p>', 'Set contents at selection (inside paragraph)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Insert in middle of paragraph
+               editor.setContent('<p>beforeafter</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 'before'.length);
+               rng.setEnd(editor.getBody().firstChild.firstChild, 'before'.length);
+               editor.selection.setRng(rng);
+               editor.selection.setContent('<br />');
+               equal(editor.getContent(), '<p>before<br />after</p>', 'Set contents at selection (inside paragraph)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Check the caret is left in the correct position.
-       rng = editor.selection.getRng(true);
-       if (document.createRange) {
-               equal(rng.startContainer, editor.getBody().firstChild, 'Selection start container');
-               equal(rng.startOffset, 2, 'Selection start offset');
-               equal(rng.endContainer, editor.getBody().firstChild, 'Selection end container');
-               equal(rng.endOffset, 2, 'Selection end offset');
-       } else {
-               // TridentSelection resolves indexed text nodes
-               equal(rng.startContainer, editor.getBody().firstChild.lastChild, 'Selection start container');
-               equal(rng.startOffset, 0, 'Selection start offset');
-               equal(rng.endContainer, editor.getBody().firstChild.lastChild, 'Selection end container');
-               equal(rng.endOffset, 0, 'Selection end offset');
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Check the caret is left in the correct position.
+               rng = editor.selection.getRng(true);
+               if (document.createRange) {
+                       equal(rng.startContainer, editor.getBody().firstChild, 'Selection start container');
+                       equal(rng.startOffset, 2, 'Selection start offset');
+                       equal(rng.endContainer, editor.getBody().firstChild, 'Selection end container');
+                       equal(rng.endOffset, 2, 'Selection end offset');
+               } else {
+                       // TridentSelection resolves indexed text nodes
+                       equal(rng.startContainer, editor.getBody().firstChild.lastChild, 'Selection start container');
+                       equal(rng.startOffset, 0, 'Selection start offset');
+                       equal(rng.endContainer, editor.getBody().firstChild.lastChild, 'Selection end container');
+                       equal(rng.endOffset, 0, 'Selection end offset');
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 0);
-       editor.selection.setRng(rng);
-       editor.selection.setContent('');
-       equal(editor.getContent(), '<p>text</p>', 'Set contents to empty at selection (collapsed)');
-       rng = editor.selection.getRng(true);
-       if (!document.createRange) {
-               // The old IE selection can only be positioned in text nodes
-               equal(rng.startContainer, editor.getBody().firstChild.firstChild, 'Selection start container');
-               equal(rng.startOffset, 0, 'Selection start offset');
-               equal(rng.endContainer, editor.getBody().firstChild.firstChild, 'Selection end container');
-               equal(rng.endOffset, 0, 'Selection end offset');
-       } else {
-               equal(rng.startContainer, editor.getBody(), 'Selection start container');
-               equal(rng.startOffset, 0, 'Selection start offset');
-               equal(rng.endContainer, editor.getBody(), 'Selection end container');
-               equal(rng.endOffset, 0, 'Selection end offset');
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 0);
+               editor.selection.setRng(rng);
+               editor.selection.setContent('');
+               equal(editor.getContent(), '<p>text</p>', 'Set contents to empty at selection (collapsed)');
+               rng = editor.selection.getRng(true);
+               if (!document.createRange) {
+                       // The old IE selection can only be positioned in text nodes
+                       equal(rng.startContainer, editor.getBody().firstChild.firstChild, 'Selection start container');
+                       equal(rng.startOffset, 0, 'Selection start offset');
+                       equal(rng.endContainer, editor.getBody().firstChild.firstChild, 'Selection end container');
+                       equal(rng.endOffset, 0, 'Selection end offset');
+               } else {
+                       equal(rng.startContainer, editor.getBody(), 'Selection start container');
+                       equal(rng.startOffset, 0, 'Selection start offset');
+                       equal(rng.endContainer, editor.getBody(), 'Selection end container');
+                       equal(rng.endOffset, 0, 'Selection end offset');
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Set selected contents, onSetContent event
-       eventObj = {};
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Set selected contents, onSetContent event
+               eventObj = {};
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        function handler(event) {
-               eventObj = event;
-       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         function handler(event) {
+                       eventObj = event;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.on('SetContent', handler);
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 1);
-       editor.selection.setRng(rng);
-       editor.selection.setContent('<div>text</div>');
-       equal(eventObj.content, '<div>text</div>', 'Set selected contents, onSetContent event');
-       editor.off('SetContent', handler);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.on('SetContent', handler);
+               editor.setContent('<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 1);
+               editor.selection.setRng(rng);
+               editor.selection.setContent('<div>text</div>');
+               equal(eventObj.content, '<div>text</div>', 'Set selected contents, onSetContent event');
+               editor.off('SetContent', handler);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getStart/getEnd', function() {
-       var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getStart/getEnd', function() {
+               var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Selected contents
-       editor.setContent('<p id="a">text</p><p id="b">text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 0);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 0);
-       editor.selection.setRng(rng);
-       equal(editor.selection.getStart().id, 'a', 'Selected contents (getStart)');
-       equal(editor.selection.getEnd().id, 'b', 'Selected contents (getEnd)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Selected contents
+               editor.setContent('<p id="a">text</p><p id="b">text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 0);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 0);
+               editor.selection.setRng(rng);
+               equal(editor.selection.getStart().id, 'a', 'Selected contents (getStart)');
+               equal(editor.selection.getEnd().id, 'b', 'Selected contents (getEnd)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Selected contents (collapsed)
-       editor.setContent('<p id="a">text</p>\n<p id="b">text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 0);
-       rng.setEnd(editor.getBody().firstChild.firstChild, 0);
-       editor.selection.setRng(rng);
-       equal(editor.selection.getStart().id, 'a', 'Selected contents (getStart, collapsed)');
-       equal(editor.selection.getEnd().id, 'a', 'Selected contents (getEnd, collapsed)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Selected contents (collapsed)
+               editor.setContent('<p id="a">text</p>\n<p id="b">text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 0);
+               rng.setEnd(editor.getBody().firstChild.firstChild, 0);
+               editor.selection.setRng(rng);
+               equal(editor.selection.getStart().id, 'a', 'Selected contents (getStart, collapsed)');
+               equal(editor.selection.getEnd().id, 'a', 'Selected contents (getEnd, collapsed)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (persistent)', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (persistent)', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get persistent bookmark simple text selection
-       editor.setContent('text');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 1);
-       rng.setEnd(editor.getBody().firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark();
-       equal(editor.getContent(), 'text', 'Editor contents (text)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get persistent bookmark simple text selection
+               editor.setContent('text');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 1);
+               rng.setEnd(editor.getBody().firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark();
+               equal(editor.getContent(), 'text', 'Editor contents (text)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get persistent bookmark multiple elements text selection
-       editor.setContent('<p>text</p>\n<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 1);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark();
-       equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get persistent bookmark multiple elements text selection
+               editor.setContent('<p>text</p>\n<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 1);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark();
+               equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (simple)', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (simple)', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get persistent bookmark simple text selection
-       editor.setContent('text');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 1);
-       rng.setEnd(editor.getBody().firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(1);
-       equal(editor.getContent(), 'text', 'Editor contents (text)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get persistent bookmark simple text selection
+               editor.setContent('text');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 1);
+               rng.setEnd(editor.getBody().firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(1);
+               equal(editor.getContent(), 'text', 'Editor contents (text)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get persistent bookmark multiple elements text selection
-       editor.setContent('<p>text</p>\n<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 1);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(1);
-       equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get persistent bookmark multiple elements text selection
+               editor.setContent('<p>text</p>\n<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 1);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(1);
+               equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - simple text selection', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - simple text selection', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(2);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('text');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 1);
-       rng.setEnd(editor.getBody().firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2);
-       equal(editor.getContent(), 'text', 'Editor contents (text)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('text');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 1);
+               rng.setEnd(editor.getBody().firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               equal(editor.getContent(), 'text', 'Editor contents (text)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), 'ex', 'Selected contents (text)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get non intrusive bookmark simple element selection', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get non intrusive bookmark simple element selection', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(1);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get non intrusive bookmark simple element selection
-       editor.setContent('<p>text<em>a<strong>b</strong>c</em></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.dom.select('em')[0], 1);
-       rng.setEnd(editor.dom.select('em')[0], 2);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2);
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<strong>b</strong>', 'Selected contents (element)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get non intrusive bookmark simple element selection
+               editor.setContent('<p>text<em>a<strong>b</strong>c</em></p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.dom.select('em')[0], 1);
+               rng.setEnd(editor.dom.select('em')[0], 2);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<strong>b</strong>', 'Selected contents (element)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get non intrusive bookmark multiple elements text selection', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get non intrusive bookmark multiple elements text selection', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(2);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get non intrusive bookmark multiple elements text selection
-       editor.setContent('<p>text</p>\n<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.firstChild, 1);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2);
-       equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get non intrusive bookmark multiple elements text selection
+               editor.setContent('<p>text</p>\n<p>text</p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.firstChild, 1);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               equal(editor.getContent(), '<p>text</p>\n<p>text</p>', 'Editor contents (elements)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (elements)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive)', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive)', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(2);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get non intrusive bookmark multiple elements text selection fragmented
-       editor.setContent('<p>text</p><p>text</p>');
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('text'));
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.lastChild, 1);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2);
-       equal(editor.getContent(), '<p>textaaatext</p>\n<p>text</p>', 'Editor contents (fragmented, elements)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (fragmented, elements)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get non intrusive bookmark multiple elements text selection fragmented
+               editor.setContent('<p>text</p><p>text</p>');
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('text'));
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.lastChild, 1);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               equal(editor.getContent(), '<p>textaaatext</p>\n<p>text</p>', 'Editor contents (fragmented, elements)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (fragmented, elements)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - fragmentext text (normalized)', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - fragmentext text (normalized)', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(2);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get non intrusive bookmark multiple elements text selection fragmented
-       editor.setContent('<p>text</p><p>text</p>');
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
-       editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('text'));
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild.lastChild, 1);
-       rng.setEnd(editor.getBody().lastChild.firstChild, 3);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.setContent(editor.getContent());
-       equal(editor.getContent(), '<p>textaaatext</p>\n<p>text</p>', 'Editor contents (fragmented, elements)');
-       editor.selection.moveToBookmark(bookmark);
-       equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (fragmented, elements)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get non intrusive bookmark multiple elements text selection fragmented
+               editor.setContent('<p>text</p><p>text</p>');
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('a'));
+               editor.dom.select('p')[0].appendChild(editor.dom.doc.createTextNode('text'));
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild.lastChild, 1);
+               rng.setEnd(editor.getBody().lastChild.firstChild, 3);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.setContent(editor.getContent());
+               equal(editor.getContent(), '<p>textaaatext</p>\n<p>text</p>', 'Editor contents (fragmented, elements)');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getContent(), '<p>ext</p>\n<p>tex</p>', 'Selected contents (fragmented, elements)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark before image', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark before image', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p><img src="about:blank" /></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 0);
-       rng.setEnd(editor.getBody().firstChild, 0);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().firstChild);
-       equal(rng.startOffset, 0);
-       equal(rng.endContainer, editor.getBody().firstChild);
-       equal(rng.endOffset, 0);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p><img src="about:blank" /></p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 0);
+               rng.setEnd(editor.getBody().firstChild, 0);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().firstChild);
+               equal(rng.startOffset, 0);
+               equal(rng.endContainer, editor.getBody().firstChild);
+               equal(rng.endOffset, 0);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark before/after image', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark before/after image', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p><img src="about:blank" /></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 0);
-       rng.setEnd(editor.getBody().firstChild, 1);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().firstChild);
-       equal(rng.startOffset, 0);
-       equal(rng.endContainer, editor.getBody().firstChild);
-       equal(rng.endOffset, 1);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p><img src="about:blank" /></p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 0);
+               rng.setEnd(editor.getBody().firstChild, 1);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().firstChild);
+               equal(rng.startOffset, 0);
+               equal(rng.endContainer, editor.getBody().firstChild);
+               equal(rng.endOffset, 1);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark after image', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark after image', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p><img src="about:blank" /></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 1);
-       rng.setEnd(editor.getBody().firstChild, 1);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().firstChild);
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer, editor.getBody().firstChild);
-       equal(rng.endOffset, 1);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p><img src="about:blank" /></p>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 1);
+               rng.setEnd(editor.getBody().firstChild, 1);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().firstChild);
+               equal(rng.startOffset, 1);
+               equal(rng.endContainer, editor.getBody().firstChild);
+               equal(rng.endOffset, 1);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark before element', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark before element', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('abc<b>123</b>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 0);
-       rng.setEnd(editor.getBody().firstChild, 2);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().firstChild);
-       equal(rng.startOffset, 0);
-       equal(rng.endContainer, editor.getBody().firstChild);
-       equal(rng.endOffset, 2);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('abc<b>123</b>');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 0);
+               rng.setEnd(editor.getBody().firstChild, 2);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().firstChild);
+               equal(rng.startOffset, 0);
+               equal(rng.endContainer, editor.getBody().firstChild);
+               equal(rng.endOffset, 2);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark after element', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark after element', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Get bookmark after element
-       editor.setContent('<b>123</b>abc');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().lastChild, 1);
-       rng.setEnd(editor.getBody().lastChild, 2);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().lastChild);
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer, editor.getBody().lastChild);
-       equal(rng.endOffset, 2);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Get bookmark after element
+               editor.setContent('<b>123</b>abc');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().lastChild, 1);
+               rng.setEnd(editor.getBody().lastChild, 2);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().lastChild);
+               equal(rng.startOffset, 1);
+               equal(rng.endContainer, editor.getBody().lastChild);
+               equal(rng.endOffset, 2);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside element', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside element', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('abc<b>123</b>abc');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().childNodes[1].firstChild, 1);
-       rng.setEnd(editor.getBody().childNodes[1].firstChild, 2);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().childNodes[1].firstChild);
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer, editor.getBody().childNodes[1].firstChild);
-       equal(rng.endOffset, 2);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('abc<b>123</b>abc');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().childNodes[1].firstChild, 1);
+               rng.setEnd(editor.getBody().childNodes[1].firstChild, 2);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().childNodes[1].firstChild);
+               equal(rng.startOffset, 1);
+               equal(rng.endContainer, editor.getBody().childNodes[1].firstChild);
+               equal(rng.endOffset, 2);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside root text', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside root text', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('abc');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getBody().firstChild, 1);
-       rng.setEnd(editor.getBody().firstChild, 2);
-       editor.selection.setRng(rng);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.getBody().firstChild);
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer, editor.getBody().firstChild);
-       equal(rng.endOffset, 2);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('abc');
+               rng = editor.dom.createRng();
+               rng.setStart(editor.getBody().firstChild, 1);
+               rng.setEnd(editor.getBody().firstChild, 2);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.getBody().firstChild);
+               equal(rng.startOffset, 1);
+               equal(rng.endContainer, editor.getBody().firstChild);
+               equal(rng.endOffset, 2);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside complex html', function() {
-       var rng, bookmark;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark (nonintrusive) - Get bookmark inside complex html', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        expect(4);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         expect(4);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p>abc</p>123<p>123</p><p>123<b>123</b><table><tr><td>abc</td></tr></table></p>');
-       editor.execCommand('SelectAll');
-       Utils.setSelection('td', 1, 'td', 2);
-       bookmark = editor.selection.getBookmark(2, true);
-       editor.getBody().innerHTML = editor.getBody().innerHTML;
-       editor.selection.moveToBookmark(bookmark);
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer, editor.dom.select('td')[0].firstChild);
-       equal(rng.startOffset, 1);
-       equal(rng.endContainer, editor.dom.select('td')[0].firstChild);
-       equal(rng.endOffset, 2);
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p>abc</p>123<p>123</p><p>123<b>123</b><table><tr><td>abc</td></tr></table></p>');
+               editor.execCommand('SelectAll');
+               Utils.setSelection('td', 1, 'td', 2);
+               bookmark = editor.selection.getBookmark(2, true);
+               editor.getBody().innerHTML = editor.getBody().innerHTML;
+               editor.selection.moveToBookmark(bookmark);
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer, editor.dom.select('td')[0].firstChild);
+               equal(rng.startOffset, 1);
+               equal(rng.endContainer, editor.dom.select('td')[0].firstChild);
+               equal(rng.endOffset, 2);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('select empty TD', function() {
-       editor.getBody().innerHTML = '<table><tr><td><br></td></tr></table>';
-       editor.selection.select(editor.dom.select('td')[0], true);
-       equal(editor.selection.getRng(true).startContainer.nodeName, 'TD');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark on cE=false', function() {
+               var bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('select first p', 2, function() {
-       editor.setContent('<p>text1</p><p>text2</p>');
-       editor.selection.select(editor.dom.select('p')[0]);
-       equal(editor.selection.getContent(), '<p>text1</p>', 'Select simple element, content');
-       equal(editor.selection.getStart().nodeName, 'P', 'Select simple element, nodeName');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('text<span contentEditable="false">1</span>');
+               editor.selection.select(editor.$('span')[0]);
+               bookmark = editor.selection.getBookmark(2);
+               editor.setContent('text<span contentEditable="false">1</span>');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getNode(), editor.$('span')[0]);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('select table', 2, function() {
-       editor.setContent('<table><tbody><tr><td>text1</td></tr></tbody></table>');
-       editor.selection.select(editor.dom.select('table')[0]);
-       equal(editor.selection.getContent(), '<table>\n<tbody>\n<tr>\n<td>text1</td>\n</tr>\n</tbody>\n</table>', 'Select complex element, content');
-       equal(editor.selection.getNode().nodeName, 'TABLE', 'Select complex element, nodeName');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark before cE=false', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('select table text 1', 2, function() {
-       editor.setContent('<table><tbody><tr><td id="a">text1</td><td id="b">text2</td></tr></tbody></table>');
-       editor.selection.select(editor.dom.select('table')[0], true);
-       equal(editor.selection.getStart().id, 'a', 'Expand to text content 1 (start)');
-       equal(editor.selection.getEnd().id, 'b', 'Expand to text content 1 (end)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p><input><span contentEditable="false">1</span></p>');
+               CaretContainer.insertInline(editor.$('span')[0], true);
+               rng = editor.dom.createRng();
+               rng.setStart(editor.$('span')[0].previousSibling, 0);
+               rng.setEnd(editor.$('span')[0].previousSibling, 0);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               editor.setContent('<p><input><span contentEditable="false">1</span></p>');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getNode(), editor.$('span')[0]);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('select table text 2', 2, function() {
-       editor.setContent('<table><tbody><tr><td id="a"><br /></td><td id="b"><br /></td></tr></tbody></table>');
-       editor.selection.select(editor.dom.select('table')[0], true);
-       equal(editor.dom.getParent(editor.selection.getStart(), 'td').id, 'a', 'Expand to text content 2 (start)');
-       equal(editor.dom.getParent(editor.selection.getEnd(), 'td').id, 'b', 'Expand to text content 2 (end)');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getBookmark/setBookmark before cE=false block', function() {
+               var rng, bookmark;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('getNode', function() {
-       var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p contentEditable="false">1</p>');
+               CaretContainer.insertBlock('p', editor.$('p')[0], true);
+               rng = editor.dom.createRng();
+               rng.setStart(editor.$('p')[0].firstChild, 0);
+               rng.setEnd(editor.$('p')[0].firstChild, 1);
+               editor.selection.setRng(rng);
+               bookmark = editor.selection.getBookmark(2);
+               editor.setContent('<p contentEditable="false">1</p>');
+               editor.selection.moveToBookmark(bookmark);
+               equal(editor.selection.getNode(), editor.$('p')[0]);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<p id="p1"><span id="s1">span1</span> word <span id="s2">span2</span> word <span id="s3">span3</span></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.dom.get('s1').firstChild, 0);
-       rng.setEnd(editor.dom.get('s1').nextSibling, 0);
-       editor.selection.setRng(rng);
-       deepEqual(editor.selection.getNode(), editor.dom.get('s1'), 'Detect selection ends immediately after node at start of paragraph.');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('select empty TD', function() {
+               editor.getBody().innerHTML = '<table><tr><td><br></td></tr></table>';
+               editor.selection.select(editor.dom.select('td')[0], true);
+               equal(editor.selection.getRng(true).startContainer.nodeName, 'TD');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        rng = editor.dom.createRng();
-       rng.setStart(editor.dom.get('s2').previousSibling, editor.dom.get('s2').previousSibling.length);
-       rng.setEnd(editor.dom.get('s2').nextSibling, 0);
-       editor.selection.setRng(rng);
-       deepEqual(editor.selection.getNode(), editor.dom.get('s2'), 'Detect selection immediately surrounds node in middle of paragraph.');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('select first p', 2, function() {
+               editor.setContent('<p>text1</p><p>text2</p>');
+               editor.selection.select(editor.dom.select('p')[0]);
+               equal(editor.selection.getContent(), '<p>text1</p>', 'Select simple element, content');
+               equal(editor.selection.getStart().nodeName, 'P', 'Select simple element, nodeName');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        rng = editor.dom.createRng();
-       rng.setStart(editor.dom.get('s3').previousSibling, editor.dom.get('s3').previousSibling.length);
-       rng.setEnd(editor.dom.get('s3').lastChild, editor.dom.get('s3').lastChild.length);
-       editor.selection.setRng(rng);
-       deepEqual(editor.selection.getNode(), editor.dom.get('s3'), 'Detect selection starts immediately before node at end of paragraph.');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('select table', 2, function() {
+               editor.setContent('<table><tbody><tr><td>text1</td></tr></tbody></table>');
+               editor.selection.select(editor.dom.select('table')[0]);
+               equal(editor.selection.getContent(), '<table>\n<tbody>\n<tr>\n<td>text1</td>\n</tr>\n</tbody>\n</table>', 'Select complex element, content');
+               equal(editor.selection.getNode().nodeName, 'TABLE', 'Select complex element, nodeName');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        rng = editor.dom.createRng();
-       rng.setStart(editor.dom.get('s2').previousSibling, editor.dom.get('s2').previousSibling.length);
-       rng.setEnd(editor.dom.get('s3').lastChild, editor.dom.get('s3').lastChild.length);
-       editor.selection.setRng(rng);
-       deepEqual(editor.selection.getNode(), editor.dom.get('p1'), 'Detect selection wrapping multiple nodes does not collapse.');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('select table text 1', 2, function() {
+               editor.setContent('<table><tbody><tr><td id="a">text1</td><td id="b">text2</td></tr></tbody></table>');
+               editor.selection.select(editor.dom.select('table')[0], true);
+               equal(editor.selection.getStart().id, 'a', 'Expand to text content 1 (start)');
+               equal(editor.selection.getEnd().id, 'b', 'Expand to text content 1 (end)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('normalize to text node from document', function() {
-       var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('select table text 2', 2, function() {
+               editor.setContent('<table><tbody><tr><td id="a"><br /></td><td id="b"><br /></td></tr></tbody></table>');
+               editor.selection.select(editor.dom.select('table')[0], true);
+               equal(editor.dom.getParent(editor.selection.getStart(), 'td').id, 'a', 'Expand to text content 2 (start)');
+               equal(editor.dom.getParent(editor.selection.getEnd(), 'td').id, 'b', 'Expand to text content 2 (end)');
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        if (tinymce.isOpera || tinymce.isIE) {
-               ok(true, "Skipped on Opera/IE since Opera doesn't let you to set the range to document and IE will steal focus.");
-               return;
-       }
-
-       editor.setContent('<p>text</p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getDoc(), 0);
-       rng.setEnd(editor.getDoc(), 0);
-       editor.selection.setRng(rng);
-       editor.selection.normalize();
-
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer.nodeType, 3, 'startContainer node type');
-       equal(rng.startOffset, 0, 'startContainer offset');
-       equal(rng.endContainer.nodeType, 3, 'endContainer node type');
-       equal(rng.endOffset, 0, 'endOffset offset');
-});
-
-test('normalize to br from document', function() {
-       var rng;
-
-       if (tinymce.isOpera || tinymce.isIE) {
-               ok(true, "Skipped on Opera/IE since Opera doesn't let you to set the range to document and IE will steal focus.");
-               return;
-       }
-
-       editor.setContent('<p><br /></p>');
-       rng = editor.dom.createRng();
-       rng.setStart(editor.getDoc(), 0);
-       rng.setEnd(editor.getDoc(), 0);
-       editor.selection.setRng(rng);
-       editor.selection.normalize();
-
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
-       equal(rng.startContainer.nodeType, 1, 'startContainer node type');
-       equal(rng.startOffset, 0, 'startContainer offset');
-       equal(rng.endContainer.nodeType, 1, 'endContainer node type');
-       equal(rng.endOffset, 0, 'endOffset offset');
-});
-
-// Only run on browser with W3C DOM Range support
-if (tinymce.Env.range) {
-       test('normalize with contentEditable:false element', function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('getNode', function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var rng;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('<p>a<b contentEditable="false">b</b>c</p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p id="p1"><span id="s1">span1</span> word <span id="s2">span2</span> word <span id="s3">span3</span></p>');
</ins><span class="cx" style="display: block; padding: 0 10px">                 rng = editor.dom.createRng();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng.setStart(editor.getBody().firstChild.lastChild, 0);
-               rng.setEnd(editor.getBody().firstChild.lastChild, 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng.setStart(editor.dom.get('s1').firstChild, 0);
+               rng.setEnd(editor.dom.get('s1').nextSibling, 0);
</ins><span class="cx" style="display: block; padding: 0 10px">                 editor.selection.setRng(rng);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         deepEqual(editor.selection.getNode(), editor.dom.get('s1'), 'Detect selection ends immediately after node at start of paragraph.');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.collapsed, true);
-               equal(rng.startContainer.nodeType, 3);
-               equal(rng.startContainer.data, 'c');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng = editor.dom.createRng();
+               rng.setStart(editor.dom.get('s2').previousSibling, editor.dom.get('s2').previousSibling.length);
+               rng.setEnd(editor.dom.get('s2').nextSibling, 0);
+               editor.selection.setRng(rng);
+               deepEqual(editor.selection.getNode(), editor.dom.get('s2'), 'Detect selection immediately surrounds node in middle of paragraph.');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize with contentEditable:false parent and contentEditable:true child element', function() {
-               editor.setContent('<p contentEditable="false">a<em contentEditable="true">b</em></p>');
-               Utils.setSelection('em', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng = editor.dom.createRng();
+               rng.setStart(editor.dom.get('s3').previousSibling, editor.dom.get('s3').previousSibling.length);
+               rng.setEnd(editor.dom.get('s3').lastChild, editor.dom.get('s3').lastChild.length);
+               editor.selection.setRng(rng);
+               deepEqual(editor.selection.getNode(), editor.dom.get('s3'), 'Detect selection starts immediately before node at end of paragraph.');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var rng = editor.selection.getRng(true);
-               equal(rng.collapsed, true);
-               equal(rng.startContainer.nodeType, 3);
-               equal(rng.startContainer.data, 'b');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng = editor.dom.createRng();
+               rng.setStart(editor.dom.get('s2').previousSibling, editor.dom.get('s2').previousSibling.length);
+               rng.setEnd(editor.dom.get('s3').lastChild, editor.dom.get('s3').lastChild.length);
+               editor.selection.setRng(rng);
+               deepEqual(editor.selection.getNode(), editor.dom.get('p1'), 'Detect selection wrapping multiple nodes does not collapse.');
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize with contentEditable:true parent and contentEditable:false child element', function() {
-               editor.setContent('<p contentEditable="true">a<em contentEditable="false">b</em></p>');
-               Utils.setSelection('em', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('normalize to text node from document', function() {
+               var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                var rng = editor.selection.getRng(true);
-               equal(rng.collapsed, true);
-               equal(rng.startContainer.nodeType, 3);
-               equal(rng.startContainer.data, 'a');
-
-               // Excluding assert on IE since it's a minor issue
-               if (tinymce.ie) {
-                       equal(rng.startOffset, 1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (tinymce.isOpera || tinymce.isIE) {
+                       ok(true, "Skipped on Opera/IE since Opera doesn't let you to set the range to document and IE will steal focus.");
+                       return;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        });
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize to text node from body', function() {
-               var rng;
-
</del><span class="cx" style="display: block; padding: 0 10px">                 editor.setContent('<p>text</p>');
</span><span class="cx" style="display: block; padding: 0 10px">                rng = editor.dom.createRng();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng.setStart(editor.getBody(), 0);
-               rng.setEnd(editor.getBody(), 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng.setStart(editor.getDoc(), 0);
+               rng.setEnd(editor.getDoc(), 0);
</ins><span class="cx" style="display: block; padding: 0 10px">                 editor.selection.setRng(rng);
</span><span class="cx" style="display: block; padding: 0 10px">                editor.selection.normalize();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -638,13 +597,18 @@
</span><span class="cx" style="display: block; padding: 0 10px">                equal(rng.endOffset, 0, 'endOffset offset');
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize to br from body', function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('normalize to br from document', function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var rng;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if (tinymce.isOpera || tinymce.isIE) {
+                       ok(true, "Skipped on Opera/IE since Opera doesn't let you to set the range to document and IE will steal focus.");
+                       return;
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 editor.setContent('<p><br /></p>');
</span><span class="cx" style="display: block; padding: 0 10px">                rng = editor.dom.createRng();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng.setStart(editor.getBody(), 0);
-               rng.setEnd(editor.getBody(), 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng.setStart(editor.getDoc(), 0);
+               rng.setEnd(editor.getDoc(), 0);
</ins><span class="cx" style="display: block; padding: 0 10px">                 editor.selection.setRng(rng);
</span><span class="cx" style="display: block; padding: 0 10px">                editor.selection.normalize();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -656,330 +620,415 @@
</span><span class="cx" style="display: block; padding: 0 10px">                equal(rng.endOffset, 0, 'endOffset offset');
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize ignore img', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ // Only run on browser with W3C DOM Range support
+       if (tinymce.Env.range) {
+               test('normalize with contentEditable:false element', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<img src="about:blank " />';
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody(), 0);
-               rng.setEnd(editor.getBody(), 1);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.setContent('<p>a<b contentEditable="false">b</b>c</p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody().firstChild.lastChild, 0);
+                       rng.setEnd(editor.getBody().firstChild.lastChild, 0);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'BODY', 'startContainer node name');
-               equal(rng.startContainer.nodeType, 1, 'startContainer node type');
-               equal(rng.startOffset, 0, 'startContainer offset');
-               equal(rng.endContainer.nodeName, 'BODY', 'endContainer node name');
-               equal(rng.endContainer.nodeType, 1, 'endContainer node type');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.collapsed, true);
+                       equal(CaretContainer.isCaretContainer(rng.startContainer), true);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize to before/after img', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize with contentEditable:false parent and contentEditable:true child element', function() {
+                       editor.setContent('<p contentEditable="false">a<em contentEditable="true">b</em></p>');
+                       Utils.setSelection('em', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><img src="about:blank " /></p>';
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody(), 0);
-               rng.setEnd(editor.getBody(), 1);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var rng = editor.selection.getRng(true);
+                       equal(rng.collapsed, true);
+                       equal(rng.startContainer.nodeType, 3);
+                       equal(rng.startContainer.data, 'b');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
-               equal(rng.startContainer.nodeType, 1, 'startContainer node type');
-               equal(rng.startOffset, 0, 'startContainer offset');
-               equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
-               equal(rng.endContainer.nodeType, 1, 'endContainer node type');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize with contentEditable:true parent and contentEditable:false child element', function() {
+                       editor.setContent('<p contentEditable="true">a<em contentEditable="false">b</em></p>');
+                       Utils.setSelection('em', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize to text node inside P', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var rng = editor.selection.getRng(true);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p>abc</p>';
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody(), 0);
-               rng.setEnd(editor.getBody(), 1);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (Env.ie && Env.ie < 12) {
+                               // IE automatically normalizes
+                               equal(rng.startContainer.data, 'a');
+                       } else {
+                               equal(CaretContainer.isCaretContainer(rng.startContainer), true);
+                       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
-               equal(rng.startOffset, 0, 'startContainer offset');
-               equal(rng.endContainer.nodeName, '#text', 'endContainer node name');
-               equal(rng.endOffset, 3, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Excluding assert on IE since it's a minor issue
+                       if (tinymce.ie) {
+                               equal(rng.startOffset, 1);
+                       }
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean left if at the start of text node', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize to text node from body', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><b>a</b><i>b</i></p>';
-               Utils.setSelection('i', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.setContent('<p>text</p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody(), 0);
+                       rng.setEnd(editor.getBody(), 0);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
-               equal(rng.startContainer.parentNode.nodeName, 'B');
-               equal(rng.startOffset, 1, 'startContainer offset');
-               equal(rng.endContainer.nodeName, '#text');
-               equal(rng.endContainer.parentNode.nodeName, 'B');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeType, 3, 'startContainer node type');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeType, 3, 'endContainer node type');
+                       equal(rng.endOffset, 0, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean start to the right if at end of text node', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize to br from body', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><b>a</b><i>b</i></p>';
-               Utils.setSelection('b', 1, 'i', 1);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.setContent('<p><br /></p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody(), 0);
+                       rng.setEnd(editor.getBody(), 0);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
-               equal(rng.startContainer.parentNode.nodeName, 'I');
-               equal(rng.startOffset, 0, 'startContainer offset');
-               equal(rng.endContainer.nodeName, '#text');
-               equal(rng.endContainer.parentNode.nodeName, 'I');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
+                       equal(rng.startContainer.nodeType, 1, 'startContainer node type');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeType, 1, 'endContainer node type');
+                       equal(rng.endOffset, 0, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean left but break before br', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize ignore img', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p>a<br><b>b</b></p>';
-               Utils.setSelection('b', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<img src="about:blank " />';
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody(), 0);
+                       rng.setEnd(editor.getBody(), 1);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeValue, 'b');
-               equal(rng.startOffset, 0);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'BODY', 'startContainer node name');
+                       equal(rng.startContainer.nodeType, 1, 'startContainer node type');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, 'BODY', 'endContainer node name');
+                       equal(rng.endContainer.nodeType, 1, 'endContainer node type');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean left but break before img', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize to before/after img', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p>a<img><b>b</b></p>';
-               Utils.setSelection('b', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><img src="about:blank " /></p>';
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody(), 0);
+                       rng.setEnd(editor.getBody(), 1);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeValue, 'b');
-               equal(rng.startOffset, 0);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
+                       equal(rng.startContainer.nodeType, 1, 'startContainer node type');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
+                       equal(rng.endContainer.nodeType, 1, 'endContainer node type');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean left but don\'t walk out the parent block', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize to text node inside P', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p>a</p><p><b>b</b></p>';
-               Utils.setSelection('b', 0);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p>abc</p>';
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody(), 0);
+                       rng.setEnd(editor.getBody(), 1);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeValue, 'b');
-               equal(rng.startOffset, 0);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, '#text', 'endContainer node name');
+                       equal(rng.endOffset, 3, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize lean left into empty inline elements when caret is before br', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean left if at the start of text node', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><i><b></b></i><br /></p>';
-               rng = editor.dom.createRng();
-               rng.setStartBefore(editor.getBody().firstChild.lastChild);
-               rng.setEndBefore(editor.getBody().firstChild.lastChild);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><b>a</b><i>b</i></p>';
+                       Utils.setSelection('i', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'B');
-               equal(rng.startOffset, 0);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
+                       equal(rng.startContainer.parentNode.nodeName, 'B');
+                       equal(rng.startOffset, 1, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, '#text');
+                       equal(rng.endContainer.parentNode.nodeName, 'B');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize don\'t lean left into empty inline elements if there is a br element after caret', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean start to the right if at end of text node', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><i><b></b></i><br /><br /></p>';
-               rng = editor.dom.createRng();
-               rng.setStartBefore(editor.getBody().firstChild.lastChild);
-               rng.setEndBefore(editor.getBody().firstChild.lastChild);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><b>a</b><i>b</i></p>';
+                       Utils.setSelection('b', 1, 'i', 1);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P');
-               equal(rng.startOffset, 2);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
+                       equal(rng.startContainer.parentNode.nodeName, 'I');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, '#text');
+                       equal(rng.endContainer.parentNode.nodeName, 'I');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize don\'t lean left into empty inline elements if there is a br element before caret', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean left but break before br', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p><i><b><br /></b></i><br /></p>';
-               rng = editor.dom.createRng();
-               rng.setStartBefore(editor.getBody().firstChild.lastChild);
-               rng.setEndBefore(editor.getBody().firstChild.lastChild);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p>a<br><b>b</b></p>';
+                       Utils.setSelection('b', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P');
-               equal(rng.startOffset, 1);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeValue, 'b');
+                       equal(rng.startOffset, 0);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize don\'t move start/end if it\'s before/after table', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean left but break before img', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<table><tr><td>X</td></tr></table>';
-               rng = editor.dom.createRng();
-               rng.setStartBefore(editor.getBody().firstChild);
-               rng.setEndAfter(editor.getBody().lastChild);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p>a<img><b>b</b></p>';
+                       Utils.setSelection('b', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'BODY');
-               equal(rng.startOffset, 0);
-               equal(rng.endContainer.nodeName, 'BODY');
-               equal(rng.endOffset, 1);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeValue, 'b');
+                       equal(rng.startOffset, 0);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize after paragraph', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean left but don\'t walk out the parent block', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.getBody().innerHTML = '<p>a</p>';
-               rng = editor.dom.createRng();
-               rng.setStartAfter(editor.getBody().firstChild);
-               rng.setEndAfter(editor.getBody().lastChild);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p>a</p><p><b>b</b></p>';
+                       Utils.setSelection('b', 0);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, '#text');
-               equal(rng.startOffset, 1);
-               equal(rng.endContainer.nodeName, '#text');
-               equal(rng.endOffset, 1);
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeValue, 'b');
+                       equal(rng.startOffset, 0);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize caret after trailing BR', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize lean left into empty inline elements when caret is before br', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('<p>a<br /></p>');
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody().firstChild, 2);
-               rng.setEnd(editor.getBody().firstChild, 2);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><i><b></b></i><br /></p>';
+                       rng = editor.dom.createRng();
+                       rng.setStartBefore(editor.getBody().firstChild.lastChild);
+                       rng.setEndBefore(editor.getBody().firstChild.lastChild);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
-               equal(rng.startOffset, 1, 'startContainer offset');
-               equal(rng.endContainer.nodeName, '#text', 'endContainer node name');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'B');
+                       equal(rng.startOffset, 0);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize caret after bogus block BR', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize don\'t lean left into empty inline elements if there is a br element after caret', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('<p><br /></p>');
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody().firstChild, 1);
-               rng.setEnd(editor.getBody().firstChild, 1);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><i><b></b></i><br /><br /></p>';
+                       rng = editor.dom.createRng();
+                       rng.setStartBefore(editor.getBody().firstChild.lastChild);
+                       rng.setEndBefore(editor.getBody().firstChild.lastChild);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
-               equal(rng.startOffset, 0, 'startContainer offset');
-               equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
-               equal(rng.endOffset, 0, 'endOffset offset');
-       });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P');
+                       equal(rng.startOffset, 2);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-/*
-       test('normalize caret after last BR in block', function() {
-               var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize don\'t lean left into empty inline elements if there is a br element before caret', function() {
+                       var rng;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('<p><br /><br /></p>');
-               rng = editor.dom.createRng();
-               rng.setStart(editor.getBody().firstChild, 2);
-               rng.setEnd(editor.getBody().firstChild, 2);
-               editor.selection.setRng(rng);
-               editor.selection.normalize();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 editor.getBody().innerHTML = '<p><i><b><br /></b></i><br /></p>';
+                       rng = editor.dom.createRng();
+                       rng.setStartBefore(editor.getBody().firstChild.lastChild);
+                       rng.setEndBefore(editor.getBody().firstChild.lastChild);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
-               equal(rng.startOffset, 1, 'startContainer offset');
-               equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
-               equal(rng.endOffset, 1, 'endOffset offset');
-       });
-*/
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P');
+                       equal(rng.startOffset, 1);
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        test('normalize caret after double BR', function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         test('normalize don\'t move start/end if it\'s before/after table', function() {
+                       var rng;
+
+                       editor.getBody().innerHTML = '<table><tr><td>X</td></tr></table>';
+                       rng = editor.dom.createRng();
+                       rng.setStartBefore(editor.getBody().firstChild);
+                       rng.setEndAfter(editor.getBody().lastChild);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'BODY');
+                       equal(rng.startOffset, 0);
+                       equal(rng.endContainer.nodeName, 'BODY');
+                       equal(rng.endOffset, 1);
+               });
+
+               test('normalize after paragraph', function() {
+                       var rng;
+
+                       editor.getBody().innerHTML = '<p>a</p>';
+                       rng = editor.dom.createRng();
+                       rng.setStartAfter(editor.getBody().firstChild);
+                       rng.setEndAfter(editor.getBody().lastChild);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, '#text');
+                       equal(rng.startOffset, 1);
+                       equal(rng.endContainer.nodeName, '#text');
+                       equal(rng.endOffset, 1);
+               });
+
+               test('normalize caret after trailing BR', function() {
+                       var rng;
+
+                       editor.setContent('<p>a<br /></p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody().firstChild, 2);
+                       rng.setEnd(editor.getBody().firstChild, 2);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, '#text', 'startContainer node name');
+                       equal(rng.startOffset, 1, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, '#text', 'endContainer node name');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
+
+               test('normalize caret after bogus block BR', function() {
+                       var rng;
+
+                       editor.setContent('<p><br /></p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody().firstChild, 1);
+                       rng.setEnd(editor.getBody().firstChild, 1);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
+                       equal(rng.startOffset, 0, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
+                       equal(rng.endOffset, 0, 'endOffset offset');
+               });
+
+       /*
+               test('normalize caret after last BR in block', function() {
+                       var rng;
+
+                       editor.setContent('<p><br /><br /></p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody().firstChild, 2);
+                       rng.setEnd(editor.getBody().firstChild, 2);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
+                       equal(rng.startOffset, 1, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
+                       equal(rng.endOffset, 1, 'endOffset offset');
+               });
+       */
+
+               test('normalize caret after double BR', function() {
+                       var rng;
+
+                       editor.setContent('<p>a<br /><br /></p>');
+                       rng = editor.dom.createRng();
+                       rng.setStart(editor.getBody().firstChild, 3);
+                       rng.setEnd(editor.getBody().firstChild, 3);
+                       editor.selection.setRng(rng);
+                       editor.selection.normalize();
+
+                       rng = editor.selection.getRng(true);
+                       equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
+                       equal(rng.startOffset, 3, 'startContainer offset');
+                       equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
+                       equal(rng.endOffset, 3, 'endOffset offset');
+               });
+       }
+
+       test('custom elements', function() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 var rng;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.setContent('<p>a<br /><br /></p>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<custom1>test</custom1><custom2>test</custom2>');
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 rng = editor.dom.createRng();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng.setStart(editor.getBody().firstChild, 3);
-               rng.setEnd(editor.getBody().firstChild, 3);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         rng.setStart(editor.getBody(), 0);
+               rng.setEnd(editor.getBody(), 2);
</ins><span class="cx" style="display: block; padding: 0 10px">                 editor.selection.setRng(rng);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                editor.selection.normalize();
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                rng = editor.selection.getRng(true);
-               equal(rng.startContainer.nodeName, 'P', 'startContainer node name');
-               equal(rng.startOffset, 3, 'startContainer offset');
-               equal(rng.endContainer.nodeName, 'P', 'endContainer node name');
-               equal(rng.endOffset, 3, 'endOffset offset');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         equal(editor.selection.getContent(), '<custom1>test</custom1><custom2>test</custom2>');
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-}
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('custom elements', function() {
-       var rng;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('selectorChanged', function() {
+               var newState, newArgs;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.setContent('<custom1>test</custom1><custom2>test</custom2>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.selection.selectorChanged('a[href]', function(state, args) {
+                       newState = state;
+                       newArgs = args;
+               });
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        rng = editor.dom.createRng();
-       rng.setStart(editor.getBody(), 0);
-       rng.setEnd(editor.getBody(), 2);
-       editor.selection.setRng(rng);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.getBody().innerHTML = '<p><a href="#">text</a></p>';
+               Utils.setSelection('a', 0, 'a', 4);
+               editor.nodeChanged();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(editor.selection.getContent(), '<custom1>test</custom1><custom2>test</custom2>');
-});
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         ok(newState);
+               equal(newArgs.selector, 'a[href]');
+               equal(newArgs.node, editor.getBody().firstChild.firstChild);
+               equal(newArgs.parents.length, 2);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('selectorChanged', function() {
-       var newState, newArgs;
-
-       editor.selection.selectorChanged('a[href]', function(state, args) {
-               newState = state;
-               newArgs = args;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.getBody().innerHTML = '<p>text</p>';
+               Utils.setSelection('p', 0, 'p', 4);
+               editor.nodeChanged();
+               equal(newArgs.selector, 'a[href]');
+               equal(newArgs.node, editor.getBody().firstChild);
+               equal(newArgs.parents.length, 1);
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.getBody().innerHTML = '<p><a href="#">text</a></p>';
-       Utils.setSelection('a', 0, 'a', 4);
-       editor.nodeChanged();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ test('setRng', function() {
+               var rng = editor.dom.createRng();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        ok(newState);
-       equal(newArgs.selector, 'a[href]');
-       equal(newArgs.node, editor.getBody().firstChild.firstChild);
-       equal(newArgs.parents.length, 2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.setContent('<p>x</p>');
+               rng.setStart(editor.$('p')[0].firstChild, 0);
+               rng.setEnd(editor.$('p')[0].firstChild, 1);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        editor.getBody().innerHTML = '<p>text</p>';
-       Utils.setSelection('p', 0, 'p', 4);
-       editor.nodeChanged();
-       equal(newArgs.selector, 'a[href]');
-       equal(newArgs.node, editor.getBody().firstChild);
-       equal(newArgs.parents.length, 1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         editor.selection.setRng(rng);
+               editor.selection.setRng(null);
+
+               rng = editor.selection.getRng(true);
+               equal(rng.startContainer.nodeName, '#text');
+               equal(rng.startOffset, 0);
+               equal(rng.endContainer.nodeName, '#text');
+               equal(rng.endOffset, 1);
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-test('setRng', function() {
-       var rng = editor.dom.createRng();
-
-       editor.setContent('<p>x</p>');
-       rng.setStart(editor.$('p')[0].firstChild, 0);
-       rng.setEnd(editor.$('p')[0].firstChild, 1);
-
-       editor.selection.setRng(rng);
-       editor.selection.setRng(null);
-
-       rng = editor.selection.getRng(true);
-       equal(rng.startContainer.nodeName, '#text');
-       equal(rng.startOffset, 0);
-       equal(rng.endContainer.nodeName, '#text');
-       equal(rng.endOffset, 1);
-});
</del></span></pre></div>
<a id="trunktestsquniteditortinymcedomSerializerjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/dom/Serializer.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/dom/Serializer.js        2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/dom/Serializer.js  2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -89,7 +89,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        equal(ser.serialize(DOM.get('test')), '<label for="test">label</label>');
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        DOM.setHTML('test', '<input type="checkbox" value="test" /><input type="button" /><textarea></textarea>');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        equal(ser.serialize(DOM.get('test')), '<input type="checkbox" value="test" /><input type="button" /><textarea></textarea>');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       // Edge will add an empty input value so remove that to normalize test since it doesn't break anything
+       equal(ser.serialize(DOM.get('test')).replace(/ value=""/g, ''), '<input type="checkbox" value="test" /><input type="button" /><textarea></textarea>');
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> test('Form elements (checkbox)', function() {
</span></span></pre></div>
<a id="trunktestsquniteditortinymcedomTridentSelectionjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/dom/TridentSelection.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/dom/TridentSelection.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/dom/TridentSelection.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -10,7 +10,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><span class="cx" style="display: block; padding: 0 10px">                        elements: "elm1",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        disable_nodechange: true,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymcefileImageScannerjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/file/ImageScanner.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/file/ImageScanner.js     2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/file/ImageScanner.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -28,4 +28,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        strictEqual(result[0].image, document.getElementById('view').firstChild);
</span><span class="cx" style="display: block; padding: 0 10px">                });
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       QUnit.asyncTest("findAll (filtered)", function() {
+               var imageScanner = new ImageScanner(new BlobCache());
+
+               function predicate(img) {
+                       return !img.hasAttribute('data-skip');
+               }
+
+               document.getElementById('view').innerHTML = (
+                       '<img src="' + base64Src + '">' +
+                       '<img src="' + base64Src + '" data-skip="1">'
+               );
+
+               imageScanner.findAll(document.getElementById('view'), predicate).then(function(result) {
+                       QUnit.start();
+                       equal(result.length, 1);
+                       equal('data:image/gif;base64,' + result[0].blobInfo.base64(), base64Src);
+                       strictEqual(result[0].image, document.getElementById('view').firstChild);
+               });
+       });
</ins><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="trunktestsquniteditortinymcegeomClientRectjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/geom/ClientRect.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/geom/ClientRect.js                               (rev 0)
+++ trunk/tests/qunit/editor/tinymce/geom/ClientRect.js 2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,70 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/geom/ClientRect"
+], function(ClientRect) {
+       module("tinymce.geom.ClientRect");
+
+       function rect(x, y, w, h) {
+               return {
+                       left: x,
+                       top: y,
+                       bottom: y + h,
+                       right: x + w,
+                       width: w,
+                       height: h
+               };
+       }
+
+       test('clone', function() {
+               deepEqual(ClientRect.clone(rect(10, 20, 30, 40)), rect(10, 20, 30, 40));
+               deepEqual(ClientRect.clone(rect(10.1, 20.1, 30.1, 40.1)), rect(10, 20, 30, 40));
+       });
+
+       test('collapse', function() {
+               deepEqual(ClientRect.collapse(rect(10, 20, 30, 40), true), rect(10, 20, 0, 40));
+               deepEqual(ClientRect.collapse(rect(10, 20, 30, 40), false), rect(40, 20, 0, 40));
+       });
+
+       test('isAbove', function() {
+               equal(ClientRect.isAbove(rect(10, 70, 10, 40), rect(20, 40, 10, 20)), false);
+               equal(ClientRect.isAbove(rect(10, 40, 10, 20), rect(20, 70, 10, 40)), true);
+       });
+
+       test('isAbove intersects', function() {
+               equal(ClientRect.isAbove(rect(10, 20, 10, 10), rect(20, 20, 10, 10)), false);
+               equal(ClientRect.isAbove(rect(10, 20, 10, 40), rect(20, 20, 10, 10)), false);
+               equal(ClientRect.isAbove(rect(10, 20, 10, 10), rect(20, 20, 10, 40)), false);
+               equal(ClientRect.isAbove(rect(10, 10, 10, 10), rect(20, 20, 10, 10)), true);
+               equal(ClientRect.isAbove(rect(10, 15, 10, 10), rect(20, 20, 10, 10)), false);
+       });
+
+       test('isBelow', function() {
+               equal(ClientRect.isBelow(rect(10, 70, 10, 40), rect(20, 40, 10, 20)), true);
+               equal(ClientRect.isBelow(rect(10, 40, 10, 20), rect(20, 70, 10, 40)), false);
+       });
+
+       test('isBelow intersects', function() {
+               equal(ClientRect.isBelow(rect(10, 30, 10, 20), rect(20, 10, 10, 20)), true);
+               equal(ClientRect.isBelow(rect(10, 30, 10, 20), rect(20, 10, 10, 25)), true);
+               equal(ClientRect.isBelow(rect(10, 15, 10, 20), rect(20, 30, 10, 20)), false);
+               equal(ClientRect.isBelow(rect(10, 29, 10, 20), rect(20, 10, 10, 30)), false);
+               equal(ClientRect.isBelow(rect(10, 30, 10, 20), rect(20, 10, 10, 30)), true);
+               equal(ClientRect.isBelow(rect(10, 20, 10, 20), rect(20, 10, 10, 30)), false);
+       });
+
+       test('isLeft', function() {
+               equal(ClientRect.isLeft(rect(10, 20, 30, 40), rect(20, 20, 30, 40)), true);
+               equal(ClientRect.isLeft(rect(20, 20, 30, 40), rect(10, 20, 30, 40)), false);
+       });
+
+       test('isRight', function() {
+               equal(ClientRect.isRight(rect(10, 20, 30, 40), rect(20, 20, 30, 40)), false);
+               equal(ClientRect.isRight(rect(20, 20, 30, 40), rect(10, 20, 30, 40)), true);
+       });
+
+       test('compare', function() {
+               equal(ClientRect.compare(rect(10, 70, 10, 40), rect(10, 40, 10, 20)), 1);
+               equal(ClientRect.compare(rect(10, 40, 10, 20), rect(10, 70, 10, 40)), -1);
+               equal(ClientRect.compare(rect(5, 10, 10, 10), rect(10, 10, 10, 10)), -1);
+               equal(ClientRect.compare(rect(15, 10, 10, 10), rect(10, 10, 10, 10)), 1);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/geom/ClientRect.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcegeomRectjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/geom/Rect.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/geom/Rect.js                             (rev 0)
+++ trunk/tests/qunit/editor/tinymce/geom/Rect.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,92 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/geom/Rect",
+       "tinymce/util/Tools"
+], function(Rect, Tools) {
+       module("tinymce.geom.Rect");
+
+       test('relativePosition', function() {
+               var sourceRect = Rect.create(0, 0, 20, 30),
+                       targetRect = Rect.create(10, 20, 40, 50),
+                       tests = [
+                               // Only test a few of them all would be 81
+                               ['tl-tl', 10, 20, 20, 30],
+                               ['tc-tc', 20, 20, 20, 30],
+                               ['tr-tr', 30, 20, 20, 30],
+                               ['cl-cl', 10, 30, 20, 30],
+                               ['cc-cc', 20, 30, 20, 30],
+                               ['cr-cr', 30, 30, 20, 30],
+                               ['bl-bl', 10, 40, 20, 30],
+                               ['bc-bc', 20, 40, 20, 30],
+                               ['br-br', 30, 40, 20, 30],
+                               ['tr-tl', 50, 20, 20, 30],
+                               ['br-bl', 50, 40, 20, 30]
+                       ];
+
+               Tools.each(tests, function(item) {
+                       deepEqual(
+                               Rect.relativePosition(sourceRect, targetRect, item[0]),
+                               Rect.create(item[1], item[2], item[3], item[4]),
+                               item[0]
+                       );
+               });
+       });
+
+       test('findBestRelativePosition', function() {
+               var sourceRect = Rect.create(0, 0, 20, 30),
+                       targetRect = Rect.create(10, 20, 40, 50),
+                       tests = [
+                               [['tl-tl'], 5, 15, 100, 100, 'tl-tl'],
+                               [['tl-tl'], 20, 30, 100, 100, null],
+                               [['tl-tl', 'tr-tl'], 20, 20, 100, 100, 'tr-tl'],
+                               [['tl-bl', 'tr-tl', 'bl-tl'], 10, 20, 40, 100, 'bl-tl']
+                       ];
+
+               Tools.each(tests, function(item) {
+                       equal(
+                               Rect.findBestRelativePosition(sourceRect, targetRect, Rect.create(item[1], item[2], item[3], item[4]), item[0]),
+                               item[5],
+                               item[5]
+                       );
+               });
+       });
+
+       test('inflate', function() {
+               deepEqual(Rect.inflate(Rect.create(10, 20, 30, 40), 5, 10), Rect.create(5, 10, 40, 60));
+       });
+
+       test('intersect', function() {
+               ok(Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(10, 20, 30, 40)));
+               ok(Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(15, 25, 30, 40)));
+               ok(Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(15, 25, 5, 5)));
+               ok(!Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(0, 10, 5, 5)));
+               ok(!Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(45, 20, 5, 5)));
+               ok(!Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(10, 65, 5, 5)));
+               ok(Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(40, 20, 30, 40)));
+               ok(Rect.intersect(Rect.create(10, 20, 30, 40), Rect.create(10, 60, 30, 40)));
+       });
+
+       test('clamp', function() {
+               deepEqual(
+                       Rect.clamp(Rect.create(10, 20, 30, 40), Rect.create(10, 20, 30, 40)),
+                       Rect.create(10, 20, 30, 40)
+               );
+
+               deepEqual(
+                       Rect.clamp(Rect.create(5, 20, 30, 40), Rect.create(10, 20, 30, 40)),
+                       Rect.create(10, 20, 25, 40)
+               );
+
+               deepEqual(
+                       Rect.clamp(Rect.create(5, 20, 30, 40), Rect.create(10, 20, 30, 40), true),
+                       Rect.create(10, 20, 30, 40)
+               );
+       });
+
+       test('create', function() {
+               deepEqual(Rect.create(10, 20, 30, 40), {x: 10, y: 20, w: 30, h: 40});
+       });
+
+       test('fromClientRect', function() {
+               deepEqual(Rect.fromClientRect({left: 10, top: 20, width: 30, height: 40}), {x: 10, y: 20, w: 30, h: 40});
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/geom/Rect.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcehtmlObsoletejs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/html/Obsolete.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/html/Obsolete.js 2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/html/Obsolete.js   2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4,7 +4,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: 'textarea',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger : false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent : false,
</span></span></pre></div>
<a id="trunktestsquniteditortinymcehtmlSchemajs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/html/Schema.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/html/Schema.js   2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/html/Schema.js     2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -168,8 +168,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                "DECLARE": {}, "COMPACT": {}, "CHECKED": {},
</span><span class="cx" style="display: block; padding: 0 10px">                "controls": {}, "loop": {}, "autoplay": {}, "selected": {}, "readonly": {}, "nowrap": {},
</span><span class="cx" style="display: block; padding: 0 10px">                "noshade": {}, "noresize": {}, "nohref": {}, "multiple": {}, "ismap": {}, "disabled": {}, "defer": {},
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                "declare": {}, "compact": {}, "checked": {},
-               "allowfullscreen": {}, "mozallowfullscreen": {}, "webkitallowfullscreen": {} // WP
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         "declare": {}, "compact": {}, "checked": {}
</ins><span class="cx" style="display: block; padding: 0 10px">         });
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -181,7 +180,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        schema = new tinymce.html.Schema();
</span><span class="cx" style="display: block; padding: 0 10px">        deepEqual(schema.getBlockElements(), {
</span><span class="cx" style="display: block; padding: 0 10px">                ASIDE: {}, HGROUP: {}, SECTION: {}, ARTICLE: {}, FOOTER: {}, HEADER: {},
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                ISINDEX: {}, MENU: {}, NOSCRIPT: {}, FIELDSET: {}, DIR: {}, DD: {}, DT: {},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         ISINDEX: {}, MENU: {}, NOSCRIPT: {}, FIELDSET: {}, FIGCAPTION: {}, DIR: {}, DD: {}, DT: {},
</ins><span class="cx" style="display: block; padding: 0 10px">                 DL: {}, CENTER: {}, BLOCKQUOTE: {}, CAPTION: {}, UL: {}, OL: {}, LI: {},
</span><span class="cx" style="display: block; padding: 0 10px">                TD: {}, TR: {}, TH: {}, TFOOT: {}, THEAD: {}, TBODY: {}, TABLE: {}, FORM: {},
</span><span class="cx" style="display: block; padding: 0 10px">                PRE: {}, ADDRESS: {}, DIV: {}, P: {}, HR: {}, H6: {}, H5: {}, H4: {}, H3: {},
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -190,7 +189,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                isindex: {}, menu: {}, noscript: {}, fieldset: {}, dir: {}, dd: {}, dt: {}, dl: {}, center: {},
</span><span class="cx" style="display: block; padding: 0 10px">                blockquote: {}, caption: {}, ul: {}, ol: {}, li: {}, td: {}, tr: {}, th: {}, tfoot: {}, thead: {},
</span><span class="cx" style="display: block; padding: 0 10px">                tbody: {}, table: {}, form: {}, pre: {}, address: {}, div: {}, p: {}, hr: {}, h6: {},
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                h5: {}, h4: {}, h3: {}, h2: {}, h1: {}, nav: {}, figure: {}, datalist: {}, optgroup: {},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         h5: {}, h4: {}, h3: {}, h2: {}, h1: {}, nav: {}, figure: {}, figcaption: {}, datalist: {}, optgroup: {},
</ins><span class="cx" style="display: block; padding: 0 10px">                 option: {}, select: {}
</span><span class="cx" style="display: block; padding: 0 10px">        });
</span><span class="cx" style="display: block; padding: 0 10px"> });
</span></span></pre></div>
<a id="trunktestsquniteditortinymcetextExtendingCharjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/text/ExtendingChar.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/text/ExtendingChar.js                            (rev 0)
+++ trunk/tests/qunit/editor/tinymce/text/ExtendingChar.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,8 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require(["tinymce/text/ExtendingChar"], function(ExtendingChar) {
+       module("tinymce.text.ExtendingChar");
+
+       test('isExtendingChar', function() {
+               strictEqual(ExtendingChar.isExtendingChar('a'), false);
+               strictEqual(ExtendingChar.isExtendingChar('\u0301'), true);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/text/ExtendingChar.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymcetextZwspjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/text/Zwsp.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/text/Zwsp.js                             (rev 0)
+++ trunk/tests/qunit/editor/tinymce/text/Zwsp.js       2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,15 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require(["tinymce/text/Zwsp"], function(Zwsp) {
+       module("tinymce.text.Zwsp");
+
+       test('ZWSP', function() {
+               strictEqual(Zwsp.ZWSP, '\u200b');
+       });
+
+       test('isZwsp', function() {
+               strictEqual(Zwsp.isZwsp(Zwsp.ZWSP), true);
+       });
+
+       test('isZwsp', function() {
+               strictEqual(Zwsp.trim('a' + Zwsp.ZWSP + 'b'), 'ab');
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/text/Zwsp.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymceuiControljs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/ui/Control.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/ui/Control.js    2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/ui/Control.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,7 +6,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                ctrl = new tinymce.ui.Control({});
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Check inital states
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Check initial states
</ins><span class="cx" style="display: block; padding: 0 10px">                 equal(ctrl.disabled(), false);
</span><span class="cx" style="display: block; padding: 0 10px">                equal(ctrl.active(), false);
</span><span class="cx" style="display: block; padding: 0 10px">                equal(ctrl.visible(), true);
</span></span></pre></div>
<a id="trunktestsquniteditortinymceutilDelayjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/util/Delay.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/util/Delay.js                            (rev 0)
+++ trunk/tests/qunit/editor/tinymce/util/Delay.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,114 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/util/Delay"
+], function(Delay) {
+       module("tinymce.util.Delay");
+
+       asyncTest('requestAnimationFrame', function() {
+               Delay.requestAnimationFrame(function() {
+                       ok("requestAnimationFrame was executed.", true);
+                       QUnit.start();
+               });
+       });
+
+       asyncTest('setTimeout', function() {
+               Delay.setTimeout(function() {
+                       ok("setTimeout was executed.", true);
+                       QUnit.start();
+               });
+       });
+
+       asyncTest('setInterval', function() {
+               var count = 0, id;
+
+               id = Delay.setInterval(function() {
+                       if (++count == 2) {
+                               Delay.clearInterval(id);
+                               equal(count, 2);
+                               QUnit.start();
+                       } else if (count > 3) {
+                               throw new Error("Still executing setInterval.");
+                       }
+               });
+       });
+
+       asyncTest('setEditorTimeout', function() {
+               var fakeEditor = {};
+
+               Delay.setEditorTimeout(fakeEditor, function() {
+                       ok("setEditorTimeout was executed.", true);
+                       QUnit.start();
+               });
+       });
+
+       test('setEditorTimeout (removed)', function() {
+               var fakeEditor = {removed: true};
+
+               Delay.setEditorTimeout(fakeEditor, function() {
+                       throw new Error("Still executing setEditorTimeout.");
+               });
+
+               ok(true, "setEditorTimeout on removed instance.");
+       });
+
+       asyncTest('setEditorInterval', function() {
+               var count = 0, id, fakeEditor = {};
+
+               id = Delay.setEditorInterval(fakeEditor, function() {
+                       if (++count == 2) {
+                               Delay.clearInterval(id);
+                               equal(count, 2);
+                               QUnit.start();
+                       } else if (count > 3) {
+                               throw new Error("Still executing setEditorInterval.");
+                       }
+               });
+       });
+
+       test('setEditorInterval (removed)', function() {
+               var fakeEditor = {removed: true};
+
+               Delay.setEditorInterval(fakeEditor, function() {
+                       throw new Error("Still executing setEditorInterval.");
+               });
+
+               ok(true, "setEditorTimeout on removed instance.");
+       });
+
+       asyncTest('throttle', function() {
+               var fn, args = [];
+
+               fn = Delay.throttle(function(a) {
+                       args.push(a);
+               }, 0);
+
+               fn(1);
+               fn(2);
+
+               Delay.setTimeout(function() {
+                       deepEqual(args, [2]);
+                       QUnit.start();
+               }, 10);
+       });
+
+       test('clearTimeout', function() {
+               var id;
+
+               id = Delay.setTimeout(function() {
+                       throw new Error("clearTimeout didn't work.");
+               });
+
+               Delay.clearTimeout(id);
+               ok(true, "clearTimeout works.");
+       });
+
+       test('clearTimeout', function() {
+               var id;
+
+               id = Delay.setInterval(function() {
+                       throw new Error("clearInterval didn't work.");
+               });
+
+               Delay.clearInterval(id);
+               ok(true, "clearInterval works.");
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/util/Delay.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymceutilFunjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/qunit/editor/tinymce/util/Fun.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/util/Fun.js                              (rev 0)
+++ trunk/tests/qunit/editor/tinymce/util/Fun.js        2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,49 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ModuleLoader.require([
+       "tinymce/util/Fun"
+], function(Fun) {
+       module("tinymce.util.Fun");
+
+       function isTrue(value) {
+               return value === true;
+       }
+
+       function isFalse(value) {
+               return value === true;
+       }
+
+       function isAbove(target, value) {
+               return value() > target();
+       }
+
+       test('constant', function() {
+               strictEqual(Fun.constant(1)(), 1);
+               strictEqual(Fun.constant("1")(), "1");
+               strictEqual(Fun.constant(null)(), null);
+       });
+
+       test('negate', function() {
+               strictEqual(Fun.negate(isTrue)(false), true);
+               strictEqual(Fun.negate(isFalse)(true), false);
+       });
+
+       test('and', function() {
+               var isAbove5 = Fun.curry(isAbove, Fun.constant(5));
+               var isAbove10 = Fun.curry(isAbove, Fun.constant(10));
+
+               strictEqual(Fun.and(isAbove10, isAbove5)(Fun.constant(10)), false);
+               strictEqual(Fun.and(isAbove10, isAbove5)(Fun.constant(30)), true);
+       });
+
+       test('or', function() {
+               var isAbove5 = Fun.curry(isAbove, Fun.constant(5));
+               var isAbove10 = Fun.curry(isAbove, Fun.constant(10));
+
+               strictEqual(Fun.or(isAbove10, isAbove5)(Fun.constant(5)), false);
+               strictEqual(Fun.or(isAbove10, isAbove5)(Fun.constant(15)), true);
+               strictEqual(Fun.or(isAbove5, isAbove10)(Fun.constant(15)), true);
+       });
+
+       test('compose', function() {
+               strictEqual(Fun.compose(Fun.curry(isAbove, Fun.constant(5)), Fun.constant)(10), true);
+       });
+});
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/tests/qunit/editor/tinymce/util/Fun.js
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunktestsquniteditortinymceutilQuirks_webkitjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/editor/tinymce/util/Quirks_webkit.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/editor/tinymce/util/Quirks_webkit.js    2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/editor/tinymce/util/Quirks_webkit.js      2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -5,7 +5,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                tinymce.init({
</span><span class="cx" style="display: block; padding: 0 10px">                        selector: "textarea",
</span><span class="cx" style="display: block; padding: 0 10px">                        elements: "elm1",
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        plugins: wpPlugins,
</del><span class="cx" style="display: block; padding: 0 10px">                         add_unload_trigger: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        skin: false,
</span><span class="cx" style="display: block; padding: 0 10px">                        indent: false,
</span></span></pre></div>
<a id="trunktestsqunitwpincludesjstinymcepluginswptextpatternpluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js  2016-01-20 02:01:57 UTC (rev 36351)
+++ trunk/tests/qunit/wp-includes/js/tinymce/plugins/wptextpattern/plugin.js    2016-01-20 04:17:22 UTC (rev 36352)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,4 +1,4 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-( function( $, QUnit, tinymce, _type, setTimeout ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+( function( $, QUnit, tinymce, setTimeout ) {
</ins><span class="cx" style="display: block; padding: 0 10px">         var editor,
</span><span class="cx" style="display: block; padding: 0 10px">                count = 0;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -6,6 +6,111 @@
</span><span class="cx" style="display: block; padding: 0 10px">                return;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        function mceType(chr) {
+               var editor = tinymce.activeEditor, keyCode, charCode, evt, startElm, rng, startContainer, startOffset, textNode;
+
+               function charCodeToKeyCode(charCode) {
+                       var lookup = {
+                               '0': 48, '1': 49, '2': 50, '3': 51, '4': 52, '5': 53, '6': 54, '7': 55, '8': 56, '9': 57,'a': 65, 'b': 66, 'c': 67,
+                               'd': 68, 'e': 69, 'f': 70, 'g': 71, 'h': 72, 'i': 73, 'j': 74, 'k': 75, 'l': 76, 'm': 77, 'n': 78, 'o': 79, 'p': 80, 'q': 81,
+                               'r': 82, 's': 83, 't': 84, 'u': 85,     'v': 86, 'w': 87, 'x': 88, 'y': 89, ' ': 32, ',': 188, '-': 189, '.': 190, '/': 191, '\\': 220,
+                               '[': 219, ']': 221, '\'': 222, ';': 186, '=': 187, ')': 41
+                       };
+
+                       return lookup[String.fromCharCode(charCode)];
+               }
+
+               function fakeEvent(target, type, evt) {
+                       editor.dom.fire(target, type, evt);
+               }
+
+               // Numeric keyCode
+               if (typeof(chr) === 'number') {
+                       charCode = chr;
+                       keyCode = charCodeToKeyCode(charCode);
+               } else if (typeof(chr) === 'string') {
+                       // String value
+                       if (chr === '\b') {
+                               keyCode = 8;
+                               charCode = chr.charCodeAt(0);
+                       } else if (chr === '\n') {
+                               keyCode = 13;
+                               charCode = chr.charCodeAt(0);
+                       } else {
+                               charCode = chr.charCodeAt(0);
+                               keyCode = charCodeToKeyCode(charCode);
+                       }
+               } else {
+                       evt = chr;
+
+                       if (evt.charCode) {
+                               chr = String.fromCharCode(evt.charCode);
+                       }
+
+                       if (evt.keyCode) {
+                               keyCode = evt.keyCode;
+                       }
+               }
+
+               evt = evt || {keyCode: keyCode, charCode: charCode};
+
+               startElm = editor.selection.getStart();
+               fakeEvent(startElm, 'keydown', evt);
+               fakeEvent(startElm, 'keypress', evt);
+
+               if (!evt.isDefaultPrevented()) {
+                       if (keyCode === 8) {
+                               if (editor.getDoc().selection) {
+                                       rng = editor.getDoc().selection.createRange();
+
+                                       if (rng.text.length === 0) {
+                                               rng.moveStart('character', -1);
+                                               rng.select();
+                                       }
+
+                                       rng.execCommand('Delete', false, null);
+                               } else {
+                                       rng = editor.selection.getRng();
+                                       startContainer = rng.startContainer;
+
+                                       if (startContainer.nodeType === 1 && rng.collapsed) {
+                                               var nodes = rng.startContainer.childNodes;
+                                               startContainer = nodes[nodes.length - 1];
+                                       }
+
+                                       // If caret is at <p>abc|</p> and after the abc text node then move it to the end of the text node
+                                       // Expand the range to include the last char <p>ab[c]</p> since IE 11 doesn't delete otherwise
+                                       if ( rng.collapsed && startContainer && startContainer.nodeType === 3 && startContainer.data.length > 0) {
+                                               rng.setStart(startContainer, startContainer.data.length - 1);
+                                               rng.setEnd(startContainer, startContainer.data.length);
+                                               editor.selection.setRng(rng);
+                                       }
+
+                                       editor.getDoc().execCommand('Delete', false, null);
+                               }
+                       } else if (typeof(chr) === 'string') {
+                               rng = editor.selection.getRng(true);
+
+                               if (rng.startContainer.nodeType === 3 && rng.collapsed) {
+                                       // `insertData` may alter the range.
+                                       startContainer = rng.startContainer;
+                                       startOffset = rng.startOffset;
+                                       rng.startContainer.insertData( rng.startOffset, chr );
+                                       rng.setStart( startContainer, startOffset + 1 );
+                               } else {
+                                       textNode = editor.getDoc().createTextNode(chr);
+                                       rng.insertNode(textNode);
+                                       rng.setStart(textNode, 1);
+                               }
+
+                               rng.collapse(true);
+                               editor.selection.setRng(rng);
+                       }
+               }
+
+               fakeEvent(startElm, 'keyup', evt);
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function type() {
</span><span class="cx" style="display: block; padding: 0 10px">                var args = arguments;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,7 +122,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( typeof args[0] === 'function' ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                args[0]();
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                _type( args[0].shift() );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         mceType( args[0].shift() );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( ! args[0].length ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -172,4 +277,4 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        assert.equal( editor.getContent(), '<p>###&nbsp;</p>\n<p>&nbsp;</p>' );
</span><span class="cx" style="display: block; padding: 0 10px">                }, assert.async() );
</span><span class="cx" style="display: block; padding: 0 10px">        } );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-} )( window.jQuery, window.QUnit, window.tinymce, window.Utils.type, window.setTimeout );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+} )( window.jQuery, window.QUnit, window.tinymce, window.setTimeout );
</ins></span></pre>
</div>
</div>

</body>
</html>