{"version":3,"file":"/js/front.js","mappings":"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","sources":["webpack:///./resources/assets/js/common.js","webpack:///./resources/assets/js/front/base.js","webpack:///./resources/assets/js/front/index.js","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/bootstrap-sass/assets/javascripts/bootstrap.js","webpack:///./node_modules/codemirror-spell-checker/src/js/spell-checker.js","webpack:///./node_modules/codemirror/addon/display/fullscreen.js","webpack:///./node_modules/codemirror/addon/display/placeholder.js","webpack:///./node_modules/codemirror/addon/edit/continuelist.js","webpack:///./node_modules/codemirror/addon/mode/overlay.js","webpack:///./node_modules/codemirror/addon/selection/mark-selection.js","webpack:///./node_modules/codemirror/lib/codemirror.js","webpack:///./node_modules/codemirror/mode/gfm/gfm.js","webpack:///./node_modules/codemirror/mode/markdown/markdown.js","webpack:///./node_modules/codemirror/mode/meta.js","webpack:///./node_modules/codemirror/mode/xml/xml.js","webpack:///./node_modules/inputmask/dist/inputmask.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/js.cookie/dst/Cookie.js","webpack:///./node_modules/simplemde/src/js/codemirror/tablist.js","webpack:///./node_modules/simplemde/src/js/simplemde.js","webpack:///./node_modules/typo-js/typo.js","webpack:///./node_modules/marked/lib/marked.cjs","webpack:///webpack/bootstrap","webpack:///./resources/assets/js/front.js"],"sourcesContent":["try {\n window.$ = window.jQuery = require('jquery');\n window.SimpleMDE = require('simplemde')\n\n require('bootstrap-sass');\n\n} catch (e) {\n}\n\n// region Material Switch\n$(document).on('click', '.material-switch', function (event) {\n event.preventDefault();\n\n if ($(this).attr('aria-checked') === 'true') {\n $(this).attr('aria-checked', 'false');\n $(this).find('input').removeAttr('checked');\n } else {\n $(this).find('input').attr('checked', 'checked');\n $(this).attr('aria-checked', 'true');\n }\n});\n\n$(document).on('keydown', '.material-switch', function (event) {\n if (event.keyCode === 32) {\n event.preventDefault();\n\n if ($(this).attr('aria-checked') === 'true') {\n $(this).attr('aria-checked', 'false');\n $(this).find('input').removeAttr('checked');\n } else {\n $(this).find('input').attr('checked', 'checked');\n $(this).attr('aria-checked', 'true');\n }\n\n return false;\n }\n});\n// endregion\n","var Inputmask = require('inputmask');\n\nwindow.mobileCheck = function () {\n var check = false;\n (function (a) {\n if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;\n })(navigator.userAgent || navigator.vendor || window.opera);\n return check;\n};\n\n// region Radio and Checkbox Fix\n$('.radio-label').keypress(function (e) {\n if (e.keyCode === 0 || e.keyCode === 32) {\n $(this).find('input').prop('checked', true);\n }\n});\n\n$('.checkbox-label').keypress(function (e) {\n if (e.keyCode === 0 || e.keyCode === 32) {\n var $ele = $(this).find('input');\n $ele.prop('checked', !$ele.is(':checked'));\n }\n});\n// endregion\n\n// region Side Menu Toggle\n$(document).on('click', '.js-toggle-side-menu', function (event) {\n event.preventDefault();\n\n var $sideMenu = $('.js-off-canvas-wrap');\n $sideMenu.toggleClass('move-left');\n\n if ($sideMenu.hasClass('move-left')) {\n $('.mobile-link').attr('tabindex', '-1').attr('aria-hidden', true);\n } else {\n // $('.js-toggle-side-menu').focus();\n $('.mobile-link').attr('tabindex', '0').attr('aria-hidden', false);\n }\n});\n// endregion\n\n// region Modal Window Panel Collapse\n$('.collapse').on('hide.bs.collapse', function () {\n $('.accordion-button-icon').removeClass('minus').addClass('plus');\n}).on('show.bs.collapse', function () {\n $('.accordion-button-icon').removeClass('plus').addClass('minus');\n});\n\n$('.modal').on('show.bs.modal', function () {\n $('.modal .modal-body').css('overflow-y', 'auto');\n $('.modal .modal-body').css('max-height', $(window).height() * 0.7);\n});\n// endregion\n\n// region Range Slider\nvar sliderControl = $('.js-slider-control');\nif (sliderControl.length > 0) {\n sliderControl\n .rangeslider({\n polyfill: false,\n onInit: function () {\n $('.rangeslider__handle', this.$range)[0].textContent = '£' + this.value;\n }\n })\n .on('input', function () {\n $('.rangeslider__handle', this.$range)[0].textContent = '£' + this.value;\n });\n}\n// endregion\n\n// region Cookie Banner\n$(document).ready(function () {\n var $cookieBannerContainer = $('.cookie-banner-container');\n\n if ($cookieBannerContainer.attr('data-can-open') === 'true') {\n $cookieBannerContainer.addClass('open');\n }\n});\n\n$(document).on('click', '.js-toggle-cookie-banner', function (event) {\n $('.cookie-banner-container').toggleClass('open');\n});\n\n$(document).on('click', '.js-cookie-close', function (event) {\n event.preventDefault();\n\n $.ajax({\n method: 'get',\n url: $(this).attr('data-url'),\n dataType: 'json',\n data: {analytics: $('#analytics').is(':checked')},\n headers: {'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')},\n success: function (response) {\n $('.cookie-banner-container').removeClass('open');\n },\n });\n});\n// endregion\n\n$(function () {\n // region Scroll to Errors\n let $elementError = $('.form-group.has-error:first');\n if ($elementError.length > 0) {\n // scroll to error\n $('html, body').animate({\n scrollTop: $elementError.offset().top\n }, 100);\n }\n $elementError = $('.alert.alert-danger:first');\n if ($elementError.length > 0) {\n // scroll to error\n $('html, body').animate({\n scrollTop: $elementError.offset().top\n }, 100);\n }\n // endregion\n\n // region Scroll to message if on mobile\n if (window.mobileCheck()) {\n let $elementMessage = $('.alert.alert-danger');\n if ($elementMessage.length > 0) {\n $('html, body').animate({\n scrollTop: $elementMessage.offset().top\n }, 100);\n }\n }\n // endregion\n\n // region Date Picker\n let $datePickers = $('.date_picker');\n if ($datePickers.length > 0) {\n $datePickers.datepicker({\n format: \"dd-mm-yyyy\",\n todayHighlight: true,\n orientation: \"bottom auto\",\n autoclose: true,\n }).on('changeDate', function (selected) {\n $(this).trigger('focusout');\n });\n }\n // endregion\n\n Inputmask().mask($(\"input[data-inputmask]\"));\n});\n\n// region Password Strength Indicator\nvar $strengthIndicator = $('.js-strength-indicator');\nif ($strengthIndicator.length > 0) {\n $(document).on('keyup', 'input[name=\"password\"]', function () {\n var value = $(this).val(),\n total = 0;\n\n $strengthIndicator.removeClass(function (index, css) {\n return (css.match(/(^|\\s)__\\S+/g) || []).join(' ');\n });\n\n if (value.length >= 6) {\n total++;\n }\n\n if (/[A-Z]/.test(value)) {\n total++;\n }\n\n if (/[0-9]/.test(value)) {\n total++;\n }\n\n if (/^[a-zA-Z0-9- ]*$/.test(value) === false) {\n total++;\n }\n\n if (value.length < 6) {\n total = 0;\n $strengthIndicator.addClass('_short');\n } else {\n $strengthIndicator.removeClass('_short');\n }\n\n switch (total) {\n case 1:\n $strengthIndicator.addClass('__weak');\n break;\n case 2:\n $strengthIndicator.addClass('__bad');\n break;\n case 3:\n $strengthIndicator.addClass('__good');\n break;\n case 4:\n $strengthIndicator.addClass('__strong');\n break;\n }\n });\n}\n// endregion\n\n// region Message Scroll\nvar $chatArea = $('.js-messages');\n\n$(document).ready(function () {\n $chatArea.scrollTop($chatArea.prop('scrollHeight'));\n});\n// endregion\n\n// region Account JS\n$('.container.raf').on('click', '.js-social-whatsapp', function (event) {\n event.preventDefault();\n\n $('.js-social-form').attr('data-href', ($(this).attr('href'))).removeClass('hide');\n}).on('submit', '.js-social-form', function (event) {\n event.preventDefault();\n\n var url = $(this).attr('data-href');\n url = url.replace('[FRIENDS NUMBER]', $(this).find('input').val());\n\n window.open(url, '_blank');\n});\n// endregion\n\n// region Accordion Fix\n$(document).on('click', '.simple-accordion .collapse-label', function(event) {\n event.stopPropagation();\n var $this = $(this);\n var href;\n\n var parent = $this.data('parent');\n var actives = parent && $(parent).find('.collapse.in');\n\n if (actives && actives.length) {\n actives.collapse('hide');\n }\n\n var target = $this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, ''); //strip for ie7\n\n $(target).collapse('toggle');\n});\n// endregion\n","//from Node\nrequire('js.cookie');\nrequire('bootstrap-datepicker');\n\n//from local\nrequire('./base');\n","/*!\n * Datepicker for Bootstrap v1.10.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (https://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!Array.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0){\n\t\t\tthis.component = false;\n }\n\n\t\tif (this.o.isInline === null){\n\t\t\tthis.isInline = !this.component && !this.isInput;\n\t\t} else {\n\t\t\tthis.isInline = this.o.isInline;\n\t\t}\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!Array.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!Array.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n var events = {\n keyup: $.proxy(function(e){\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) { // single input\n this._events = [\n [this.element, events]\n ];\n }\n // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [\n // For components that are not readonly, allow keyboard nav\n [this.inputField, events],\n [this.component, {\n click: $.proxy(this.show, this)\n }]\n ];\n }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.update();\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = Array.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += ' ';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '';\n\t\t\t}\n\t\t\thtml += '';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n }\n\t\t},\n\n\t\tfillMonths: function(){\n var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '' + dates[this.o.language].monthsShort[i] + '';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n cls.push('range-start');\n }\n if (date.valueOf() === this.range[this.range.length-1]){\n cls.push('range-end');\n }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t classes.push('focused');\n }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '' + currVal + '';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push(''+ calWeek +'');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif (typeof $.uniqueSort === \"function\") {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('' + content + '');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n if (this.viewMode === 0) {\n \t\t\t\t\tif (e.ctrlKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n \t\t\t\t\t} else if (e.shiftKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n \t\t\t\t\t}\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j] && (this.pickers[j].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k] && (this.pickers[k].element.val() || \"\").length > 0) {\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tisInline: null,\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '«',\n\t\t\trightArrow: '»'\n\t\t},\n showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n return format;\n // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n return format.toDisplay(date, format, language);\n var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: ''+\n\t\t\t ''+\n\t\t\t ''+\n\t\t\t ''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+defaults.templates.leftArrow+''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+defaults.templates.rightArrow+''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t'',\n\t\tcontTemplate: '',\n\t\tfootTemplate: ''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t''\n\t};\n\tDPGlobal.template = '
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t''+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.10.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n","/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n 'use strict';\n var version = $.fn.jquery.split(' ')[0].split('.')\n if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // https://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // ALERT CLASS DEFINITION\n // ======================\n\n var dismiss = '[data-dismiss=\"alert\"]'\n var Alert = function (el) {\n $(el).on('click', dismiss, this.close)\n }\n\n Alert.VERSION = '3.4.1'\n\n Alert.TRANSITION_DURATION = 150\n\n Alert.prototype.close = function (e) {\n var $this = $(this)\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n selector = selector === '#' ? [] : selector\n var $parent = $(document).find(selector)\n\n if (e) e.preventDefault()\n\n if (!$parent.length) {\n $parent = $this.closest('.alert')\n }\n\n $parent.trigger(e = $.Event('close.bs.alert'))\n\n if (e.isDefaultPrevented()) return\n\n $parent.removeClass('in')\n\n function removeElement() {\n // detach from parent, fire event then clean up data\n $parent.detach().trigger('closed.bs.alert').remove()\n }\n\n $.support.transition && $parent.hasClass('fade') ?\n $parent\n .one('bsTransitionEnd', removeElement)\n .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n removeElement()\n }\n\n\n // ALERT PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.alert')\n\n if (!data) $this.data('bs.alert', (data = new Alert(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.alert\n\n $.fn.alert = Plugin\n $.fn.alert.Constructor = Alert\n\n\n // ALERT NO CONFLICT\n // =================\n\n $.fn.alert.noConflict = function () {\n $.fn.alert = old\n return this\n }\n\n\n // ALERT DATA-API\n // ==============\n\n $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // BUTTON PUBLIC CLASS DEFINITION\n // ==============================\n\n var Button = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Button.DEFAULTS, options)\n this.isLoading = false\n }\n\n Button.VERSION = '3.4.1'\n\n Button.DEFAULTS = {\n loadingText: 'loading...'\n }\n\n Button.prototype.setState = function (state) {\n var d = 'disabled'\n var $el = this.$element\n var val = $el.is('input') ? 'val' : 'html'\n var data = $el.data()\n\n state += 'Text'\n\n if (data.resetText == null) $el.data('resetText', $el[val]())\n\n // push to event loop to allow forms to submit\n setTimeout($.proxy(function () {\n $el[val](data[state] == null ? this.options[state] : data[state])\n\n if (state == 'loadingText') {\n this.isLoading = true\n $el.addClass(d).attr(d, d).prop(d, true)\n } else if (this.isLoading) {\n this.isLoading = false\n $el.removeClass(d).removeAttr(d).prop(d, false)\n }\n }, this), 0)\n }\n\n Button.prototype.toggle = function () {\n var changed = true\n var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n if ($parent.length) {\n var $input = this.$element.find('input')\n if ($input.prop('type') == 'radio') {\n if ($input.prop('checked')) changed = false\n $parent.find('.active').removeClass('active')\n this.$element.addClass('active')\n } else if ($input.prop('type') == 'checkbox') {\n if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n this.$element.toggleClass('active')\n }\n $input.prop('checked', this.$element.hasClass('active'))\n if (changed) $input.trigger('change')\n } else {\n this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n this.$element.toggleClass('active')\n }\n }\n\n\n // BUTTON PLUGIN DEFINITION\n // ========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.button')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n if (option == 'toggle') data.toggle()\n else if (option) data.setState(option)\n })\n }\n\n var old = $.fn.button\n\n $.fn.button = Plugin\n $.fn.button.Constructor = Button\n\n\n // BUTTON NO CONFLICT\n // ==================\n\n $.fn.button.noConflict = function () {\n $.fn.button = old\n return this\n }\n\n\n // BUTTON DATA-API\n // ===============\n\n $(document)\n .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n var $btn = $(e.target).closest('.btn')\n Plugin.call($btn, 'toggle')\n if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n e.preventDefault()\n // The target component still receive the focus\n if ($btn.is('input,button')) $btn.trigger('focus')\n else $btn.find('input:visible,button:visible').first().trigger('focus')\n }\n })\n .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CAROUSEL CLASS DEFINITION\n // =========================\n\n var Carousel = function (element, options) {\n this.$element = $(element)\n this.$indicators = this.$element.find('.carousel-indicators')\n this.options = options\n this.paused = null\n this.sliding = null\n this.interval = null\n this.$active = null\n this.$items = null\n\n this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n }\n\n Carousel.VERSION = '3.4.1'\n\n Carousel.TRANSITION_DURATION = 600\n\n Carousel.DEFAULTS = {\n interval: 5000,\n pause: 'hover',\n wrap: true,\n keyboard: true\n }\n\n Carousel.prototype.keydown = function (e) {\n if (/input|textarea/i.test(e.target.tagName)) return\n switch (e.which) {\n case 37: this.prev(); break\n case 39: this.next(); break\n default: return\n }\n\n e.preventDefault()\n }\n\n Carousel.prototype.cycle = function (e) {\n e || (this.paused = false)\n\n this.interval && clearInterval(this.interval)\n\n this.options.interval\n && !this.paused\n && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n return this\n }\n\n Carousel.prototype.getItemIndex = function (item) {\n this.$items = item.parent().children('.item')\n return this.$items.index(item || this.$active)\n }\n\n Carousel.prototype.getItemForDirection = function (direction, active) {\n var activeIndex = this.getItemIndex(active)\n var willWrap = (direction == 'prev' && activeIndex === 0)\n || (direction == 'next' && activeIndex == (this.$items.length - 1))\n if (willWrap && !this.options.wrap) return active\n var delta = direction == 'prev' ? -1 : 1\n var itemIndex = (activeIndex + delta) % this.$items.length\n return this.$items.eq(itemIndex)\n }\n\n Carousel.prototype.to = function (pos) {\n var that = this\n var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n if (pos > (this.$items.length - 1) || pos < 0) return\n\n if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n if (activeIndex == pos) return this.pause().cycle()\n\n return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n }\n\n Carousel.prototype.pause = function (e) {\n e || (this.paused = true)\n\n if (this.$element.find('.next, .prev').length && $.support.transition) {\n this.$element.trigger($.support.transition.end)\n this.cycle(true)\n }\n\n this.interval = clearInterval(this.interval)\n\n return this\n }\n\n Carousel.prototype.next = function () {\n if (this.sliding) return\n return this.slide('next')\n }\n\n Carousel.prototype.prev = function () {\n if (this.sliding) return\n return this.slide('prev')\n }\n\n Carousel.prototype.slide = function (type, next) {\n var $active = this.$element.find('.item.active')\n var $next = next || this.getItemForDirection(type, $active)\n var isCycling = this.interval\n var direction = type == 'next' ? 'left' : 'right'\n var that = this\n\n if ($next.hasClass('active')) return (this.sliding = false)\n\n var relatedTarget = $next[0]\n var slideEvent = $.Event('slide.bs.carousel', {\n relatedTarget: relatedTarget,\n direction: direction\n })\n this.$element.trigger(slideEvent)\n if (slideEvent.isDefaultPrevented()) return\n\n this.sliding = true\n\n isCycling && this.pause()\n\n if (this.$indicators.length) {\n this.$indicators.find('.active').removeClass('active')\n var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n $nextIndicator && $nextIndicator.addClass('active')\n }\n\n var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n if ($.support.transition && this.$element.hasClass('slide')) {\n $next.addClass(type)\n if (typeof $next === 'object' && $next.length) {\n $next[0].offsetWidth // force reflow\n }\n $active.addClass(direction)\n $next.addClass(direction)\n $active\n .one('bsTransitionEnd', function () {\n $next.removeClass([type, direction].join(' ')).addClass('active')\n $active.removeClass(['active', direction].join(' '))\n that.sliding = false\n setTimeout(function () {\n that.$element.trigger(slidEvent)\n }, 0)\n })\n .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n } else {\n $active.removeClass('active')\n $next.addClass('active')\n this.sliding = false\n this.$element.trigger(slidEvent)\n }\n\n isCycling && this.cycle()\n\n return this\n }\n\n\n // CAROUSEL PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.carousel')\n var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n var action = typeof option == 'string' ? option : options.slide\n\n if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n if (typeof option == 'number') data.to(option)\n else if (action) data[action]()\n else if (options.interval) data.pause().cycle()\n })\n }\n\n var old = $.fn.carousel\n\n $.fn.carousel = Plugin\n $.fn.carousel.Constructor = Carousel\n\n\n // CAROUSEL NO CONFLICT\n // ====================\n\n $.fn.carousel.noConflict = function () {\n $.fn.carousel = old\n return this\n }\n\n\n // CAROUSEL DATA-API\n // =================\n\n var clickHandler = function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n if (href) {\n href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n }\n\n var target = $this.attr('data-target') || href\n var $target = $(document).find(target)\n\n if (!$target.hasClass('carousel')) return\n\n var options = $.extend({}, $target.data(), $this.data())\n var slideIndex = $this.attr('data-slide-to')\n if (slideIndex) options.interval = false\n\n Plugin.call($target, options)\n\n if (slideIndex) {\n $target.data('bs.carousel').to(slideIndex)\n }\n\n e.preventDefault()\n }\n\n $(document)\n .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n $(window).on('load', function () {\n $('[data-ride=\"carousel\"]').each(function () {\n var $carousel = $(this)\n Plugin.call($carousel, $carousel.data())\n })\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n 'use strict';\n\n // COLLAPSE PUBLIC CLASS DEFINITION\n // ================================\n\n var Collapse = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Collapse.DEFAULTS, options)\n this.$trigger = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n this.transitioning = null\n\n if (this.options.parent) {\n this.$parent = this.getParent()\n } else {\n this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n }\n\n if (this.options.toggle) this.toggle()\n }\n\n Collapse.VERSION = '3.4.1'\n\n Collapse.TRANSITION_DURATION = 350\n\n Collapse.DEFAULTS = {\n toggle: true\n }\n\n Collapse.prototype.dimension = function () {\n var hasWidth = this.$element.hasClass('width')\n return hasWidth ? 'width' : 'height'\n }\n\n Collapse.prototype.show = function () {\n if (this.transitioning || this.$element.hasClass('in')) return\n\n var activesData\n var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n if (actives && actives.length) {\n activesData = actives.data('bs.collapse')\n if (activesData && activesData.transitioning) return\n }\n\n var startEvent = $.Event('show.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n if (actives && actives.length) {\n Plugin.call(actives, 'hide')\n activesData || actives.data('bs.collapse', null)\n }\n\n var dimension = this.dimension()\n\n this.$element\n .removeClass('collapse')\n .addClass('collapsing')[dimension](0)\n .attr('aria-expanded', true)\n\n this.$trigger\n .removeClass('collapsed')\n .attr('aria-expanded', true)\n\n this.transitioning = 1\n\n var complete = function () {\n this.$element\n .removeClass('collapsing')\n .addClass('collapse in')[dimension]('')\n this.transitioning = 0\n this.$element\n .trigger('shown.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n this.$element\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n }\n\n Collapse.prototype.hide = function () {\n if (this.transitioning || !this.$element.hasClass('in')) return\n\n var startEvent = $.Event('hide.bs.collapse')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n var dimension = this.dimension()\n\n this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n this.$element\n .addClass('collapsing')\n .removeClass('collapse in')\n .attr('aria-expanded', false)\n\n this.$trigger\n .addClass('collapsed')\n .attr('aria-expanded', false)\n\n this.transitioning = 1\n\n var complete = function () {\n this.transitioning = 0\n this.$element\n .removeClass('collapsing')\n .addClass('collapse')\n .trigger('hidden.bs.collapse')\n }\n\n if (!$.support.transition) return complete.call(this)\n\n this.$element\n [dimension](0)\n .one('bsTransitionEnd', $.proxy(complete, this))\n .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n }\n\n Collapse.prototype.toggle = function () {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n Collapse.prototype.getParent = function () {\n return $(document).find(this.options.parent)\n .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n .each($.proxy(function (i, element) {\n var $element = $(element)\n this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n }, this))\n .end()\n }\n\n Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n var isOpen = $element.hasClass('in')\n\n $element.attr('aria-expanded', isOpen)\n $trigger\n .toggleClass('collapsed', !isOpen)\n .attr('aria-expanded', isOpen)\n }\n\n function getTargetFromTrigger($trigger) {\n var href\n var target = $trigger.attr('data-target')\n || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n return $(document).find(target)\n }\n\n\n // COLLAPSE PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.collapse')\n var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.collapse\n\n $.fn.collapse = Plugin\n $.fn.collapse.Constructor = Collapse\n\n\n // COLLAPSE NO CONFLICT\n // ====================\n\n $.fn.collapse.noConflict = function () {\n $.fn.collapse = old\n return this\n }\n\n\n // COLLAPSE DATA-API\n // =================\n\n $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n var $this = $(this)\n\n if (!$this.attr('data-target')) e.preventDefault()\n\n var $target = getTargetFromTrigger($this)\n var data = $target.data('bs.collapse')\n var option = data ? 'toggle' : $this.data()\n\n Plugin.call($target, option)\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.4.1'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector !== '#' ? $(document).find(selector) : null\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$dialog = this.$element.find('.modal-dialog')\n this.$backdrop = null\n this.isShown = null\n this.originalBodyPad = null\n this.scrollbarWidth = 0\n this.ignoreBackdropClick = false\n this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.4.1'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this.isShown ? this.hide() : this.show(_relatedTarget)\n }\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n })\n })\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n that.adjustDialog()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element.addClass('in')\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$dialog // wait for modal to slide in\n .one('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('focus').trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n\n e = $.Event('hide.bs.modal')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .off('click.dismiss.bs.modal')\n .off('mouseup.dismiss.bs.modal')\n\n this.$dialog.off('mousedown.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n this.hideModal()\n }\n\n Modal.prototype.enforceFocus = function () {\n $(document)\n .off('focusin.bs.modal') // guard against infinite focus loop\n .on('focusin.bs.modal', $.proxy(function (e) {\n if (document !== e.target &&\n this.$element[0] !== e.target &&\n !this.$element.has(e.target).length) {\n this.$element.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\n that.$element.trigger('hidden.bs.modal')\n })\n }\n\n Modal.prototype.removeBackdrop = function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n Modal.prototype.backdrop = function (callback) {\n var that = this\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $(document.createElement('div'))\n .addClass('modal-backdrop ' + animate)\n .appendTo(this.$body)\n\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n if (this.ignoreBackdropClick) {\n this.ignoreBackdropClick = false\n return\n }\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus()\n : this.hide()\n }, this))\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop\n .one('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n this.adjustDialog()\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n var fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n var documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n var scrollbarWidth = this.scrollbarWidth\n if (this.bodyIsOverflowing) {\n this.$body.css('padding-right', bodyPad + scrollbarWidth)\n $(this.fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight\n var calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n })\n }\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', this.originalBodyPad)\n $(this.fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(option, _relatedTarget) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option](_relatedTarget)\n else if (options.show) data.show(_relatedTarget)\n })\n }\n\n var old = $.fn.modal\n\n $.fn.modal = Plugin\n $.fn.modal.Constructor = Modal\n\n\n // MODAL NO CONFLICT\n // =================\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n // MODAL DATA-API\n // ==============\n\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n var target = $this.attr('data-target') ||\n (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n var $target = $(document).find(target)\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n Plugin.call($target, option, this)\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n var uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n ]\n\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n }\n\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase()\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp\n })\n\n // Check if a regular expression validates the attribute.\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n // IE 8 and below don't support createHTMLDocument\n if (!document.implementation || !document.implementation.createHTMLDocument) {\n return unsafeHtml\n }\n\n var createdDocument = document.implementation.createHTMLDocument('sanitization')\n createdDocument.body.innerHTML = unsafeHtml\n\n var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n var elements = $(createdDocument.body).find('*')\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var el = elements[i]\n var elName = el.nodeName.toLowerCase()\n\n if ($.inArray(elName, whitelistKeys) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n var attributeList = $.map(el.attributes, function (el) { return el })\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n el.removeAttribute(attributeList[j].nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n }\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.4.1'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n },\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n var dataAttributes = this.$element.data()\n\n for (var dataAttr in dataAttributes) {\n if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr]\n }\n }\n\n options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n if (options.sanitize) {\n options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n if (this.options.html) {\n if (this.options.sanitize) {\n title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n }\n\n $tip.find('.tooltip-inner').html(title)\n } else {\n $tip.find('.tooltip-inner').text(title)\n }\n\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n }\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.4.1'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '

'\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n if (this.options.html) {\n var typeContent = typeof content\n\n if (this.options.sanitize) {\n title = this.sanitizeHtml(title)\n\n if (typeContent === 'string') {\n content = this.sanitizeHtml(content)\n }\n }\n\n $tip.find('.popover-title').html(title)\n $tip.find('.popover-content').children().detach().end()[\n typeContent === 'string' ? 'html' : 'append'\n ](content)\n } else {\n $tip.find('.popover-title').text(title)\n $tip.find('.popover-content').children().detach().end().text(content)\n }\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // SCROLLSPY CLASS DEFINITION\n // ==========================\n\n function ScrollSpy(element, options) {\n this.$body = $(document.body)\n this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n this.options = $.extend({}, ScrollSpy.DEFAULTS, options)\n this.selector = (this.options.target || '') + ' .nav li > a'\n this.offsets = []\n this.targets = []\n this.activeTarget = null\n this.scrollHeight = 0\n\n this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n this.refresh()\n this.process()\n }\n\n ScrollSpy.VERSION = '3.4.1'\n\n ScrollSpy.DEFAULTS = {\n offset: 10\n }\n\n ScrollSpy.prototype.getScrollHeight = function () {\n return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n }\n\n ScrollSpy.prototype.refresh = function () {\n var that = this\n var offsetMethod = 'offset'\n var offsetBase = 0\n\n this.offsets = []\n this.targets = []\n this.scrollHeight = this.getScrollHeight()\n\n if (!$.isWindow(this.$scrollElement[0])) {\n offsetMethod = 'position'\n offsetBase = this.$scrollElement.scrollTop()\n }\n\n this.$body\n .find(this.selector)\n .map(function () {\n var $el = $(this)\n var href = $el.data('target') || $el.attr('href')\n var $href = /^#./.test(href) && $(href)\n\n return ($href\n && $href.length\n && $href.is(':visible')\n && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n })\n .sort(function (a, b) { return a[0] - b[0] })\n .each(function () {\n that.offsets.push(this[0])\n that.targets.push(this[1])\n })\n }\n\n ScrollSpy.prototype.process = function () {\n var scrollTop = this.$scrollElement.scrollTop() + this.options.offset\n var scrollHeight = this.getScrollHeight()\n var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()\n var offsets = this.offsets\n var targets = this.targets\n var activeTarget = this.activeTarget\n var i\n\n if (this.scrollHeight != scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n }\n\n if (activeTarget && scrollTop < offsets[0]) {\n this.activeTarget = null\n return this.clear()\n }\n\n for (i = offsets.length; i--;) {\n activeTarget != targets[i]\n && scrollTop >= offsets[i]\n && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n && this.activate(targets[i])\n }\n }\n\n ScrollSpy.prototype.activate = function (target) {\n this.activeTarget = target\n\n this.clear()\n\n var selector = this.selector +\n '[data-target=\"' + target + '\"],' +\n this.selector + '[href=\"' + target + '\"]'\n\n var active = $(selector)\n .parents('li')\n .addClass('active')\n\n if (active.parent('.dropdown-menu').length) {\n active = active\n .closest('li.dropdown')\n .addClass('active')\n }\n\n active.trigger('activate.bs.scrollspy')\n }\n\n ScrollSpy.prototype.clear = function () {\n $(this.selector)\n .parentsUntil(this.options.target, '.active')\n .removeClass('active')\n }\n\n\n // SCROLLSPY PLUGIN DEFINITION\n // ===========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.scrollspy')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.scrollspy\n\n $.fn.scrollspy = Plugin\n $.fn.scrollspy.Constructor = ScrollSpy\n\n\n // SCROLLSPY NO CONFLICT\n // =====================\n\n $.fn.scrollspy.noConflict = function () {\n $.fn.scrollspy = old\n return this\n }\n\n\n // SCROLLSPY DATA-API\n // ==================\n\n $(window).on('load.bs.scrollspy.data-api', function () {\n $('[data-spy=\"scroll\"]').each(function () {\n var $spy = $(this)\n Plugin.call($spy, $spy.data())\n })\n })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TAB CLASS DEFINITION\n // ====================\n\n var Tab = function (element) {\n // jscs:disable requireDollarBeforejQueryAssignment\n this.element = $(element)\n // jscs:enable requireDollarBeforejQueryAssignment\n }\n\n Tab.VERSION = '3.4.1'\n\n Tab.TRANSITION_DURATION = 150\n\n Tab.prototype.show = function () {\n var $this = this.element\n var $ul = $this.closest('ul:not(.dropdown-menu)')\n var selector = $this.data('target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n if ($this.parent('li').hasClass('active')) return\n\n var $previous = $ul.find('.active:last a')\n var hideEvent = $.Event('hide.bs.tab', {\n relatedTarget: $this[0]\n })\n var showEvent = $.Event('show.bs.tab', {\n relatedTarget: $previous[0]\n })\n\n $previous.trigger(hideEvent)\n $this.trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n var $target = $(document).find(selector)\n\n this.activate($this.closest('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $previous.trigger({\n type: 'hidden.bs.tab',\n relatedTarget: $this[0]\n })\n $this.trigger({\n type: 'shown.bs.tab',\n relatedTarget: $previous[0]\n })\n })\n }\n\n Tab.prototype.activate = function (element, container, callback) {\n var $active = container.find('> .active')\n var transition = callback\n && $.support.transition\n && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', false)\n\n element\n .addClass('active')\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if (element.parent('.dropdown-menu').length) {\n element\n .closest('li.dropdown')\n .addClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n }\n\n callback && callback()\n }\n\n $active.length && transition ?\n $active\n .one('bsTransitionEnd', next)\n .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n next()\n\n $active.removeClass('in')\n }\n\n\n // TAB PLUGIN DEFINITION\n // =====================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tab')\n\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tab\n\n $.fn.tab = Plugin\n $.fn.tab.Constructor = Tab\n\n\n // TAB NO CONFLICT\n // ===============\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n // TAB DATA-API\n // ============\n\n var clickHandler = function (e) {\n e.preventDefault()\n Plugin.call($(this), 'show')\n }\n\n $(document)\n .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n this.$target = target\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.4.1'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n","// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n if (old == CodeMirror.Init) old = false;\n if (!old == !val) return;\n if (val) setFullscreen(cm);\n else setNormal(cm);\n });\n\n function setFullscreen(cm) {\n var wrap = cm.getWrapperElement();\n cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n width: wrap.style.width, height: wrap.style.height};\n wrap.style.width = \"\";\n wrap.style.height = \"auto\";\n wrap.className += \" CodeMirror-fullscreen\";\n document.documentElement.style.overflow = \"hidden\";\n cm.refresh();\n }\n\n function setNormal(cm) {\n var wrap = cm.getWrapperElement();\n wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n document.documentElement.style.overflow = \"\";\n var info = cm.state.fullScreenRestore;\n wrap.style.width = info.width; wrap.style.height = info.height;\n window.scrollTo(info.scrollLeft, info.scrollTop);\n cm.refresh();\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.on(\"blur\", onBlur);\n cm.on(\"change\", onChange);\n cm.on(\"swapDoc\", onChange);\n CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function() { onComposition(cm) })\n onChange(cm);\n } else if (!val && prev) {\n cm.off(\"blur\", onBlur);\n cm.off(\"change\", onChange);\n cm.off(\"swapDoc\", onChange);\n CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose)\n clearPlaceholder(cm);\n var wrapper = cm.getWrapperElement();\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n }\n\n if (val && !cm.hasFocus()) onBlur(cm);\n });\n\n function clearPlaceholder(cm) {\n if (cm.state.placeholder) {\n cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n cm.state.placeholder = null;\n }\n }\n function setPlaceholder(cm) {\n clearPlaceholder(cm);\n var elt = cm.state.placeholder = document.createElement(\"pre\");\n elt.style.cssText = \"height: 0; overflow: visible\";\n elt.style.direction = cm.getOption(\"direction\");\n elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n var placeHolder = cm.getOption(\"placeholder\")\n if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n elt.appendChild(placeHolder)\n cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n }\n\n function onComposition(cm) {\n setTimeout(function() {\n var empty = false\n if (cm.lineCount() == 1) {\n var input = cm.getInputField()\n empty = input.nodeName == \"TEXTAREA\" ? !cm.getLine(0).length\n : !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent)\n }\n if (empty) setPlaceholder(cm)\n else clearPlaceholder(cm)\n }, 20)\n }\n\n function onBlur(cm) {\n if (isEmpty(cm)) setPlaceholder(cm);\n }\n function onChange(cm) {\n var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n if (empty) setPlaceholder(cm);\n else clearPlaceholder(cm);\n }\n\n function isEmpty(cm) {\n return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n // If we're not in Markdown mode, fall back to normal newlineAndIndent\n var eolState = cm.getStateAfter(pos.line);\n var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n if (inner.mode.name !== \"markdown\" && inner.mode.helperType !== \"markdown\") {\n cm.execCommand(\"newlineAndIndent\");\n return;\n } else {\n eolState = inner.state;\n }\n\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line), match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand(\"newlineAndIndent\");\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line)\n var endOfList = !/>\\s*$/.test(line)\n if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n line: pos.line, ch: 0\n }, {\n line: pos.line, ch: pos.ch + 1\n });\n replacements[i] = \"\\n\";\n } else {\n var indent = match[1], after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n replacements[i] = \"\\n\" + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n };\n\n // Auto-updating Markdown list numbers when a new item is added to the\n // middle of a list\n function incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line, lookAhead = 0, skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber, ch: 0\n }, {\n line: nextLineNumber, ch: nextLine.length\n });\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n return {\n startState: function() {\n return {\n base: CodeMirror.startState(base),\n overlay: CodeMirror.startState(overlay),\n basePos: 0, baseCur: null,\n overlayPos: 0, overlayCur: null,\n streamSeen: null\n };\n },\n copyState: function(state) {\n return {\n base: CodeMirror.copyState(base, state.base),\n overlay: CodeMirror.copyState(overlay, state.overlay),\n basePos: state.basePos, baseCur: null,\n overlayPos: state.overlayPos, overlayCur: null\n };\n },\n\n token: function(stream, state) {\n if (stream != state.streamSeen ||\n Math.min(state.basePos, state.overlayPos) < stream.start) {\n state.streamSeen = stream;\n state.basePos = state.overlayPos = stream.start;\n }\n\n if (stream.start == state.basePos) {\n state.baseCur = base.token(stream, state.base);\n state.basePos = stream.pos;\n }\n if (stream.start == state.overlayPos) {\n stream.pos = stream.start;\n state.overlayCur = overlay.token(stream, state.overlay);\n state.overlayPos = stream.pos;\n }\n stream.pos = Math.min(state.basePos, state.overlayPos);\n\n // state.overlay.combineTokens always takes precedence over combine,\n // unless set to null\n if (state.overlayCur == null) return state.baseCur;\n else if (state.baseCur != null &&\n state.overlay.combineTokens ||\n combine && state.overlay.combineTokens == null)\n return state.baseCur + \" \" + state.overlayCur;\n else return state.overlayCur;\n },\n\n indent: base.indent && function(state, textAfter, line) {\n return base.indent(state.base, textAfter, line);\n },\n electricChars: base.electricChars,\n\n innerMode: function(state) { return {state: state.base, mode: base}; },\n\n blankLine: function(state) {\n var baseToken, overlayToken;\n if (base.blankLine) baseToken = base.blankLine(state.base);\n if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n return overlayToken == null ?\n baseToken :\n (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n }\n };\n};\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n var prev = old && old != CodeMirror.Init;\n if (val && !prev) {\n cm.state.markedSelection = [];\n cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n reset(cm);\n cm.on(\"cursorActivity\", onCursorActivity);\n cm.on(\"change\", onChange);\n } else if (!val && prev) {\n cm.off(\"cursorActivity\", onCursorActivity);\n cm.off(\"change\", onChange);\n clear(cm);\n cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n }\n });\n\n function onCursorActivity(cm) {\n if (cm.state.markedSelection)\n cm.operation(function() { update(cm); });\n }\n\n function onChange(cm) {\n if (cm.state.markedSelection && cm.state.markedSelection.length)\n cm.operation(function() { clear(cm); });\n }\n\n var CHUNK_SIZE = 8;\n var Pos = CodeMirror.Pos;\n var cmp = CodeMirror.cmpPos;\n\n function coverRange(cm, from, to, addAt) {\n if (cmp(from, to) == 0) return;\n var array = cm.state.markedSelection;\n var cls = cm.state.markedSelectionStyle;\n for (var line = from.line;;) {\n var start = line == from.line ? from : Pos(line, 0);\n var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n var end = atEnd ? to : Pos(endLine, 0);\n var mark = cm.markText(start, end, {className: cls});\n if (addAt == null) array.push(mark);\n else array.splice(addAt++, 0, mark);\n if (atEnd) break;\n line = endLine;\n }\n }\n\n function clear(cm) {\n var array = cm.state.markedSelection;\n for (var i = 0; i < array.length; ++i) array[i].clear();\n array.length = 0;\n }\n\n function reset(cm) {\n clear(cm);\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++)\n coverRange(cm, ranges[i].from(), ranges[i].to());\n }\n\n function update(cm) {\n if (!cm.somethingSelected()) return clear(cm);\n if (cm.listSelections().length > 1) return reset(cm);\n\n var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n var array = cm.state.markedSelection;\n if (!array.length) return coverRange(cm, from, to);\n\n var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n return reset(cm);\n\n while (cmp(from, coverStart.from) > 0) {\n array.shift().clear();\n coverStart = array[0].find();\n }\n if (cmp(from, coverStart.from) < 0) {\n if (coverStart.to.line - from.line < CHUNK_SIZE) {\n array.shift().clear();\n coverRange(cm, from, coverStart.to, 0);\n } else {\n coverRange(cm, from, coverStart.from, 0);\n }\n }\n\n while (cmp(to, coverEnd.to) < 0) {\n array.pop().clear();\n coverEnd = array[array.length - 1].find();\n }\n if (cmp(to, coverEnd.to) > 0) {\n if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n array.pop().clear();\n coverRange(cm, coverEnd.from, to);\n } else {\n coverRange(cm, coverEnd.to, to);\n }\n }\n }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n// This is CodeMirror (https://codemirror.net/5), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\/(\\d+)/.exec(userAgent);\n var chrome_version = chrome && +chrome[1];\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt(doc) {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = doc.activeElement;\n } catch(e) {\n activeElement = doc.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function doc(cm) { return cm.display.wrapper.ownerDocument }\n\n function win(cm) { return doc(cm).defaultView }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n\n // Add a span to a line.\n function addMarkedSpan(line, span, op) {\n var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {\n line.markedSpans.push(span);\n } else {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n if (inThisOp) { inThisOp.add(line.markedSpans); }\n }\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n if (lineView.rest) {\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX(doc) {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft)) }\n return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft\n }\n function pageScrollY(doc) {\n if (chrome && android) { return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop)) }\n return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var ref = visualLine(lineObj);\n var widgets = ref.widgets;\n var height = 0;\n if (widgets) { for (var i = 0; i < widgets.length; ++i) { if (widgets[i].above)\n { height += widgetHeight(widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY(doc(cm)));\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX(doc(cm)));\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX(doc(cm));\n top -= pageScrollY(doc(cm));\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n var customCursor = cm.options.$customCursor;\n if (customCursor) { primary = true; }\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (customCursor) {\n var head = customCursor(cm, range);\n if (head) { drawSelectionCursor(cm, head, curFragment); }\n } else if (collapsed || cm.options.showCursorWhenSelecting) {\n drawSelectionCursor(cm, range.head, curFragment);\n }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n var charPos = charCoords(cm, head, \"div\", null, null);\n var width = charPos.right - charPos.left;\n cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n }\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.hasFocus()) {\n cm.display.input.focus();\n if (!cm.state.focused) { onFocus(cm); }\n }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n if (cm.state.focused) { onBlur(cm); }\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n var oldHeight = display.lineDiv.getBoundingClientRect().top;\n var mustScroll = 0;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n oldHeight += cur.line.height;\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n if (oldHeight < viewTop) { mustScroll -= diff; }\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n var doc = display.wrapper.ownerDocument;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.scrollTop = 0;\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.visibility = this.vert.style.visibility = \"hidden\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.visibility = \"\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.visibility = \"hidden\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId, // Unique ID\n markArrays: null // Used by addMarkedSpan\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt(doc(cm));\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt(doc(cm));\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = win(cm).getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(snapshot.activeElt.ownerDocument)) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var doc = snapshot.activeElt.ownerDocument;\n var sel = doc.defaultView.getSelection(), range = doc.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n // Send an event to consumers responding to changes in gutter width.\n signalLater(display, \"gutterChanged\", display);\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n // See #6982. FIXME remove when this has been fixed for a while in Chrome\n if (chrome && chrome_version >= 105) { d.wrapper.style.clipPath = \"inset(0px)\"; }\n\n // This attribute is respected by automatic translation systems such as Google Translate,\n // and may also be respected by tools used by human translators.\n d.wrapper.setAttribute('translate', 'no');\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n // On Chrome 102, viewport updates somehow stop wheel-based\n // scrolling. Turning off pointer events during the scroll seems\n // to avoid the issue.\n if (chrome && chrome_version == 102) {\n if (cm.display.chromeScrollHack == null) { cm.display.sizer.style.pointerEvents = \"none\"; }\n else { clearTimeout(cm.display.chromeScrollHack); }\n cm.display.chromeScrollHack = setTimeout(function () {\n cm.display.chromeScrollHack = null;\n cm.display.sizer.style.pointerEvents = \"\";\n }, 100);\n }\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n var pixelsPerUnit = wheelPixelsPerUnit;\n if (e.deltaMode === 0) {\n dx = e.deltaX;\n dy = e.deltaY;\n pixelsPerUnit = 1;\n }\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && pixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && pixelsPerUnit != null) {\n var pixels = dy * pixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20 && e.deltaMode !== 0) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n cm.options.direction = doc.direction;\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(prev) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = prev ? prev.undoDepth : Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n if (lineSep === '') { return lines.join('') }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head || ranges[i].anchor)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt(doc(cm));\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n win(cm).focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(doc(cm)); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n if (cm.state.delayingBlurEvent) {\n if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n else { delayBlurEvent(cm); }\n }\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { return display.input.focus(); }, 20);\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n if (ie) { delayBlurEvent(cm); }\n var display = cm.display, doc$1 = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc$1.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc$1.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc$1.sel.primary();\n ourIndex = doc$1.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc$1, new Selection([ourRange], 0), sel_mouse);\n startSel = doc$1.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc$1, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc$1, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc$1.sel;\n } else {\n replaceOneSelection(doc$1, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc$1, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc$1, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc$1, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc$1, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc$1, anchor), head));\n setSelection(doc$1, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt(doc(cm));\n extendTo(cur);\n var visible = visibleLines(display, doc$1);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc$1.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus())\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n { indented = indentLine(cm, range.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"on\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"on\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){win(this).focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty())\n { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range.from() : range.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse)\n { return dir < 0 ? range.from() : range.to() }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt(doc(this)) },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n if (isNaN(ch)) {\n next = null;\n } else {\n var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n div.contentEditable = true;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n disableBrowserMagic(te);\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = activeElt(div.ownerDocument);\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = activeElt(this.div.ownerDocument) == this.div;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || activeElt(this.div.ownerDocument) != this.div)\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var this$1 = this;\n\n var input = this;\n if (this.selectionInEditor())\n { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n this.resetting = false;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n var opts = this.cm.options;\n disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing && typing) { return }\n var cm = this.cm;\n this.resetting = true;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n this.resetting = false;\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt(this.textarea.ownerDocument) != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || this.resetting || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = te.ownerDocument.defaultView.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { te.ownerDocument.defaultView.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt(textarea.ownerDocument);\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.65.14\";\n\n return CodeMirror;\n\n})));\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?«»“”‘’]))/i\n\nCodeMirror.defineMode(\"gfm\", function(config, modeConfig) {\n var codeDepth = 0;\n function blankLine(state) {\n state.code = false;\n return null;\n }\n var gfmOverlay = {\n startState: function() {\n return {\n code: false,\n codeBlock: false,\n ateSpace: false\n };\n },\n copyState: function(s) {\n return {\n code: s.code,\n codeBlock: s.codeBlock,\n ateSpace: s.ateSpace\n };\n },\n token: function(stream, state) {\n state.combineTokens = null;\n\n // Hack to prevent formatting override inside code blocks (block and inline)\n if (state.codeBlock) {\n if (stream.match(/^```+/)) {\n state.codeBlock = false;\n return null;\n }\n stream.skipToEnd();\n return null;\n }\n if (stream.sol()) {\n state.code = false;\n }\n if (stream.sol() && stream.match(/^```+/)) {\n stream.skipToEnd();\n state.codeBlock = true;\n return null;\n }\n // If this block is changed, it may need to be updated in Markdown mode\n if (stream.peek() === '`') {\n stream.next();\n var before = stream.pos;\n stream.eatWhile('`');\n var difference = 1 + stream.pos - before;\n if (!state.code) {\n codeDepth = difference;\n state.code = true;\n } else {\n if (difference === codeDepth) { // Must be exact\n state.code = false;\n }\n }\n return null;\n } else if (state.code) {\n stream.next();\n return null;\n }\n // Check if space. If so, links can be formatted later on\n if (stream.eatSpace()) {\n state.ateSpace = true;\n return null;\n }\n if (stream.sol() || state.ateSpace) {\n state.ateSpace = false;\n if (modeConfig.gitHubSpice !== false) {\n if(stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n // User/Project@SHA\n // User@SHA\n // SHA\n state.combineTokens = true;\n return \"link\";\n } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n // User/Project#Num\n // User#Num\n // #Num\n state.combineTokens = true;\n return \"link\";\n }\n }\n }\n if (stream.match(urlRE) &&\n stream.string.slice(stream.start - 2, stream.start) != \"](\" &&\n (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n // URLs\n // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n state.combineTokens = true;\n return \"link\";\n }\n stream.next();\n return null;\n },\n blankLine: blankLine\n };\n\n var markdownConfig = {\n taskLists: true,\n strikethrough: true,\n emoji: true\n };\n for (var attr in modeConfig) {\n markdownConfig[attr] = modeConfig[attr];\n }\n markdownConfig.name = \"markdown\";\n return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n\n}, \"markdown\");\n\n CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n var htmlModeMissing = htmlMode.name == \"null\"\n\n function getMode(name) {\n if (CodeMirror.findModeByName) {\n var found = CodeMirror.findModeByName(name);\n if (found) name = found.mime || found.mimes[0];\n }\n var mode = CodeMirror.getMode(cmCfg, name);\n return mode.name == \"null\" ? null : mode;\n }\n\n // Should characters that affect highlighting be highlighted separate?\n // Does not include characters that will be output (such as `1.` and `-` for lists)\n if (modeCfg.highlightFormatting === undefined)\n modeCfg.highlightFormatting = false;\n\n // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n // Excess `>` will emit `error` token.\n if (modeCfg.maxBlockquoteDepth === undefined)\n modeCfg.maxBlockquoteDepth = 0;\n\n // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n // Turn on strikethrough syntax\n if (modeCfg.strikethrough === undefined)\n modeCfg.strikethrough = false;\n\n if (modeCfg.emoji === undefined)\n modeCfg.emoji = false;\n\n if (modeCfg.fencedCodeBlockHighlighting === undefined)\n modeCfg.fencedCodeBlockHighlighting = true;\n\n if (modeCfg.fencedCodeBlockDefaultMode === undefined)\n modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n\n if (modeCfg.xml === undefined)\n modeCfg.xml = true;\n\n // Allow token types to be overridden by user-provided token types.\n if (modeCfg.tokenTypeOverrides === undefined)\n modeCfg.tokenTypeOverrides = {};\n\n var tokenTypes = {\n header: \"header\",\n code: \"comment\",\n quote: \"quote\",\n list1: \"variable-2\",\n list2: \"variable-3\",\n list3: \"keyword\",\n hr: \"hr\",\n image: \"image\",\n imageAltText: \"image-alt-text\",\n imageMarker: \"image-marker\",\n formatting: \"formatting\",\n linkInline: \"link\",\n linkEmail: \"link\",\n linkText: \"link\",\n linkHref: \"string\",\n em: \"em\",\n strong: \"strong\",\n strikethrough: \"strikethrough\",\n emoji: \"builtin\"\n };\n\n for (var tokenType in tokenTypes) {\n if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n }\n }\n\n var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n , listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n , taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n , setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/\n , textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n , fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/\n , linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n , punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n , expandedTab = \" \" // CommonMark specifies tab as 4 spaces\n\n function switchInline(stream, state, f) {\n state.f = state.inline = f;\n return f(stream, state);\n }\n\n function switchBlock(stream, state, f) {\n state.f = state.block = f;\n return f(stream, state);\n }\n\n function lineIsEmpty(line) {\n return !line || !/\\S/.test(line.string)\n }\n\n // Blocks\n\n function blankLine(state) {\n // Reset linkTitle state\n state.linkTitle = false;\n state.linkHref = false;\n state.linkText = false;\n // Reset EM state\n state.em = false;\n // Reset STRONG state\n state.strong = false;\n // Reset strikethrough state\n state.strikethrough = false;\n // Reset state.quote\n state.quote = 0;\n // Reset state.indentedCode\n state.indentedCode = false;\n if (state.f == htmlBlock) {\n var exit = htmlModeMissing\n if (!exit) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)\n }\n if (exit) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n // Mark this line as blank\n state.prevLine = state.thisLine\n state.thisLine = {stream: null}\n return null;\n }\n\n function blockNormal(stream, state) {\n var firstTokenOnLine = stream.column() === state.indentation;\n var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n var prevLineIsIndentedCode = state.indentedCode;\n var prevLineIsHr = state.prevLine.hr;\n var prevLineIsList = state.list !== false;\n var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n state.indentedCode = false;\n\n var lineIndentation = state.indentation;\n // compute once per line (on first token)\n if (state.indentationDiff === null) {\n state.indentationDiff = state.indentation;\n if (prevLineIsList) {\n state.list = null;\n // While this list item's marker's indentation is less than the deepest\n // list item's content's indentation,pop the deepest list item\n // indentation off the stack, and update block indentation state\n while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n state.listStack.pop();\n if (state.listStack.length) {\n state.indentation = state.listStack[state.listStack.length - 1];\n // less than the first list's indent -> the line is no longer a list\n } else {\n state.list = false;\n }\n }\n if (state.list !== false) {\n state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n }\n }\n }\n\n // not comprehensive (currently only for setext detection purposes)\n var allowsInlineContinuation = (\n !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n (!prevLineIsList || !prevLineIsIndentedCode) &&\n !state.prevLine.fencedCodeEnd\n );\n\n var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n var match = null;\n if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n state.prevLine.header || prevLineLineIsEmpty)) {\n stream.skipToEnd();\n state.indentedCode = true;\n return tokenTypes.code;\n } else if (stream.eatSpace()) {\n return null;\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n state.quote = 0;\n state.header = match[1].length;\n state.thisLine.header = true;\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n state.f = state.inline;\n return getType(state);\n } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n stream.eatSpace();\n return getType(state);\n } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n var listType = match[1] ? \"ol\" : \"ul\";\n\n state.indentation = lineIndentation + stream.current().length;\n state.list = true;\n state.quote = 0;\n\n // Add this list item's content's indentation to the stack\n state.listStack.push(state.indentation);\n // Reset inline styles which shouldn't propagate across list items\n state.em = false;\n state.strong = false;\n state.code = false;\n state.strikethrough = false;\n\n if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n state.taskList = true;\n }\n state.f = state.inline;\n if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n return getType(state);\n } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n state.quote = 0;\n state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n // try switching mode\n state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode );\n if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n state.f = state.block = local;\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n state.code = -1\n return getType(state);\n // SETEXT has lowest block-scope precedence after HR, so check it after\n // the others (code, blockquote, list...)\n } else if (\n // if setext set, indicates line after ---/===\n state.setext || (\n // line before ---/===\n (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n !state.code && !isHr && !linkDefRE.test(stream.string) &&\n (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n )\n ) {\n if ( !state.setext ) {\n state.header = match[0].charAt(0) == '=' ? 1 : 2;\n state.setext = state.header;\n } else {\n state.header = state.setext;\n // has no effect on type so we can reset it now\n state.setext = 0;\n stream.skipToEnd();\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n }\n state.thisLine.header = true;\n state.f = state.inline;\n return getType(state);\n } else if (isHr) {\n stream.skipToEnd();\n state.hr = true;\n state.thisLine.hr = true;\n return tokenTypes.hr;\n } else if (stream.peek() === '[') {\n return switchInline(stream, state, footnoteLink);\n }\n\n return switchInline(stream, state, state.inline);\n }\n\n function htmlBlock(stream, state) {\n var style = htmlMode.token(stream, state.htmlState);\n if (!htmlModeMissing) {\n var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n (!inner.state.context && inner.state.tokenize.isInText)) ||\n (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n state.f = inlineNormal;\n state.block = blockNormal;\n state.htmlState = null;\n }\n }\n return style;\n }\n\n function local(stream, state) {\n var currListInd = state.listStack[state.listStack.length - 1] || 0;\n var hasExitedList = state.indentation < currListInd;\n var maxFencedEndInd = currListInd + 3;\n if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n var returnType;\n if (!hasExitedList) returnType = getType(state)\n state.localMode = state.localState = null;\n state.block = blockNormal;\n state.f = inlineNormal;\n state.fencedEndRE = null;\n state.code = 0\n state.thisLine.fencedCodeEnd = true;\n if (hasExitedList) return switchBlock(stream, state, state.block);\n return returnType;\n } else if (state.localMode) {\n return state.localMode.token(stream, state.localState);\n } else {\n stream.skipToEnd();\n return tokenTypes.code;\n }\n }\n\n // Inline\n function getType(state) {\n var styles = [];\n\n if (state.formatting) {\n styles.push(tokenTypes.formatting);\n\n if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n for (var i = 0; i < state.formatting.length; i++) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n if (state.formatting[i] === \"header\") {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n }\n\n // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n // Add `error` instead if the maximum blockquote nesting depth is passed\n if (state.formatting[i] === \"quote\") {\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n } else {\n styles.push(\"error\");\n }\n }\n }\n }\n\n if (state.taskOpen) {\n styles.push(\"meta\");\n return styles.length ? styles.join(' ') : null;\n }\n if (state.taskClosed) {\n styles.push(\"property\");\n return styles.length ? styles.join(' ') : null;\n }\n\n if (state.linkHref) {\n styles.push(tokenTypes.linkHref, \"url\");\n } else { // Only apply inline styles to non-url text\n if (state.strong) { styles.push(tokenTypes.strong); }\n if (state.em) { styles.push(tokenTypes.em); }\n if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n if (state.emoji) { styles.push(tokenTypes.emoji); }\n if (state.linkText) { styles.push(tokenTypes.linkText); }\n if (state.code) { styles.push(tokenTypes.code); }\n if (state.image) { styles.push(tokenTypes.image); }\n if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n }\n\n if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n if (state.quote) {\n styles.push(tokenTypes.quote);\n\n // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n styles.push(tokenTypes.quote + \"-\" + state.quote);\n } else {\n styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n }\n }\n\n if (state.list !== false) {\n var listMod = (state.listStack.length - 1) % 3;\n if (!listMod) {\n styles.push(tokenTypes.list1);\n } else if (listMod === 1) {\n styles.push(tokenTypes.list2);\n } else {\n styles.push(tokenTypes.list3);\n }\n }\n\n if (state.trailingSpaceNewLine) {\n styles.push(\"trailing-space-new-line\");\n } else if (state.trailingSpace) {\n styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n }\n\n return styles.length ? styles.join(' ') : null;\n }\n\n function handleText(stream, state) {\n if (stream.match(textRE, true)) {\n return getType(state);\n }\n return undefined;\n }\n\n function inlineNormal(stream, state) {\n var style = state.text(stream, state);\n if (typeof style !== 'undefined')\n return style;\n\n if (state.list) { // List marker (*, +, -, 1., etc)\n state.list = null;\n return getType(state);\n }\n\n if (state.taskList) {\n var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n if (taskOpen) state.taskOpen = true;\n else state.taskClosed = true;\n if (modeCfg.highlightFormatting) state.formatting = \"task\";\n state.taskList = false;\n return getType(state);\n }\n\n state.taskOpen = false;\n state.taskClosed = false;\n\n if (state.header && stream.match(/^#+$/, true)) {\n if (modeCfg.highlightFormatting) state.formatting = \"header\";\n return getType(state);\n }\n\n var ch = stream.next();\n\n // Matches link titles present on next line\n if (state.linkTitle) {\n state.linkTitle = false;\n var matchCh = ch;\n if (ch === '(') {\n matchCh = ')';\n }\n matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n if (stream.match(new RegExp(regex), true)) {\n return tokenTypes.linkHref;\n }\n }\n\n // If this block is changed, it may need to be updated in GFM mode\n if (ch === '`') {\n var previousFormatting = state.formatting;\n if (modeCfg.highlightFormatting) state.formatting = \"code\";\n stream.eatWhile('`');\n var count = stream.current().length\n if (state.code == 0 && (!state.quote || count == 1)) {\n state.code = count\n return getType(state)\n } else if (count == state.code) { // Must be exact\n var t = getType(state)\n state.code = 0\n return t\n } else {\n state.formatting = previousFormatting\n return getType(state)\n }\n } else if (state.code) {\n return getType(state);\n }\n\n if (ch === '\\\\') {\n stream.next();\n if (modeCfg.highlightFormatting) {\n var type = getType(state);\n var formattingEscape = tokenTypes.formatting + \"-escape\";\n return type ? type + \" \" + formattingEscape : formattingEscape;\n }\n }\n\n if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n state.imageMarker = true;\n state.image = true;\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n state.imageMarker = false;\n state.imageAltText = true\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n return getType(state);\n }\n\n if (ch === ']' && state.imageAltText) {\n if (modeCfg.highlightFormatting) state.formatting = \"image\";\n var type = getType(state);\n state.imageAltText = false;\n state.image = false;\n state.inline = state.f = linkHref;\n return type;\n }\n\n if (ch === '[' && !state.image) {\n if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n state.linkText = true;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n return getType(state);\n }\n\n if (ch === ']' && state.linkText) {\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n state.linkText = false;\n state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n return type;\n }\n\n if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n state.f = state.inline = linkInline;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkEmail;\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n var end = stream.string.indexOf(\">\", stream.pos);\n if (end != -1) {\n var atts = stream.string.substring(stream.start, end);\n if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n }\n stream.backUp(1);\n state.htmlState = CodeMirror.startState(htmlMode);\n return switchBlock(stream, state, htmlBlock);\n }\n\n if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n state.md_inside = false;\n return \"tag\";\n } else if (ch === \"*\" || ch === \"_\") {\n var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n while (len < 3 && stream.eat(ch)) len++\n var after = stream.peek() || \" \"\n // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n var setEm = null, setStrong = null\n if (len % 2) { // Em\n if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setEm = true\n else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setEm = false\n }\n if (len > 1) { // Strong\n if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n setStrong = true\n else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n setStrong = false\n }\n if (setStrong != null || setEm != null) {\n if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n if (setEm === true) state.em = ch\n if (setStrong === true) state.strong = ch\n var t = getType(state)\n if (setEm === false) state.em = false\n if (setStrong === false) state.strong = false\n return t\n }\n } else if (ch === ' ') {\n if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(1);\n }\n }\n }\n\n if (modeCfg.strikethrough) {\n if (ch === '~' && stream.eatWhile(ch)) {\n if (state.strikethrough) {// Remove strikethrough\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n var t = getType(state);\n state.strikethrough = false;\n return t;\n } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n state.strikethrough = true;\n if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n return getType(state);\n }\n } else if (ch === ' ') {\n if (stream.match('~~', true)) { // Probably surrounded by space\n if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n return getType(state);\n } else { // Not surrounded by spaces, back up pointer\n stream.backUp(2);\n }\n }\n }\n }\n\n if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n state.emoji = true;\n if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n var retType = getType(state);\n state.emoji = false;\n return retType;\n }\n\n if (ch === ' ') {\n if (stream.match(/^ +$/, false)) {\n state.trailingSpace++;\n } else if (state.trailingSpace) {\n state.trailingSpaceNewLine = true;\n }\n }\n\n return getType(state);\n }\n\n function linkInline(stream, state) {\n var ch = stream.next();\n\n if (ch === \">\") {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var type = getType(state);\n if (type){\n type += \" \";\n } else {\n type = \"\";\n }\n return type + tokenTypes.linkInline;\n }\n\n stream.match(/^[^>]+/, true);\n\n return tokenTypes.linkInline;\n }\n\n function linkHref(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n var ch = stream.next();\n if (ch === '(' || ch === '[') {\n state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n state.linkHref = true;\n return getType(state);\n }\n return 'error';\n }\n\n var linkRE = {\n \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n }\n\n function getLinkHrefInside(endChar) {\n return function(stream, state) {\n var ch = stream.next();\n\n if (ch === endChar) {\n state.f = state.inline = inlineNormal;\n if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n var returnState = getType(state);\n state.linkHref = false;\n return returnState;\n }\n\n stream.match(linkRE[endChar])\n state.linkHref = true;\n return getType(state);\n };\n }\n\n function footnoteLink(stream, state) {\n if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n state.f = footnoteLinkInside;\n stream.next(); // Consume [\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n state.linkText = true;\n return getType(state);\n }\n return switchInline(stream, state, inlineNormal);\n }\n\n function footnoteLinkInside(stream, state) {\n if (stream.match(']:', true)) {\n state.f = state.inline = footnoteUrl;\n if (modeCfg.highlightFormatting) state.formatting = \"link\";\n var returnType = getType(state);\n state.linkText = false;\n return returnType;\n }\n\n stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n return tokenTypes.linkText;\n }\n\n function footnoteUrl(stream, state) {\n // Check if space, and return NULL if so (to avoid marking the space)\n if(stream.eatSpace()){\n return null;\n }\n // Match URL\n stream.match(/^[^\\s]+/, true);\n // Check for link title\n if (stream.peek() === undefined) { // End of line, set flag to check next line\n state.linkTitle = true;\n } else { // More content on line, check if link title\n stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\.)+\"|'(?:[^'\\\\]|\\\\.)+'|\\((?:[^)\\\\]|\\\\.)+\\)))?/, true);\n }\n state.f = state.inline = inlineNormal;\n return tokenTypes.linkHref + \" url\";\n }\n\n var mode = {\n startState: function() {\n return {\n f: blockNormal,\n\n prevLine: {stream: null},\n thisLine: {stream: null},\n\n block: blockNormal,\n htmlState: null,\n indentation: 0,\n\n inline: inlineNormal,\n text: handleText,\n\n formatting: false,\n linkText: false,\n linkHref: false,\n linkTitle: false,\n code: 0,\n em: false,\n strong: false,\n header: 0,\n setext: 0,\n hr: false,\n taskList: false,\n list: false,\n listStack: [],\n quote: 0,\n trailingSpace: 0,\n trailingSpaceNewLine: false,\n strikethrough: false,\n emoji: false,\n fencedEndRE: null\n };\n },\n\n copyState: function(s) {\n return {\n f: s.f,\n\n prevLine: s.prevLine,\n thisLine: s.thisLine,\n\n block: s.block,\n htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n indentation: s.indentation,\n\n localMode: s.localMode,\n localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n inline: s.inline,\n text: s.text,\n formatting: false,\n linkText: s.linkText,\n linkTitle: s.linkTitle,\n linkHref: s.linkHref,\n code: s.code,\n em: s.em,\n strong: s.strong,\n strikethrough: s.strikethrough,\n emoji: s.emoji,\n header: s.header,\n setext: s.setext,\n hr: s.hr,\n taskList: s.taskList,\n list: s.list,\n listStack: s.listStack.slice(0),\n quote: s.quote,\n indentedCode: s.indentedCode,\n trailingSpace: s.trailingSpace,\n trailingSpaceNewLine: s.trailingSpaceNewLine,\n md_inside: s.md_inside,\n fencedEndRE: s.fencedEndRE\n };\n },\n\n token: function(stream, state) {\n\n // Reset state.formatting\n state.formatting = false;\n\n if (stream != state.thisLine.stream) {\n state.header = 0;\n state.hr = false;\n\n if (stream.match(/^\\s*$/, true)) {\n blankLine(state);\n return null;\n }\n\n state.prevLine = state.thisLine\n state.thisLine = {stream: stream}\n\n // Reset state.taskList\n state.taskList = false;\n\n // Reset state.trailingSpace\n state.trailingSpace = 0;\n state.trailingSpaceNewLine = false;\n\n if (!state.localState) {\n state.f = state.block;\n if (state.f != htmlBlock) {\n var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n state.indentation = indentation;\n state.indentationDiff = null;\n if (indentation > 0) return null;\n }\n }\n }\n return state.f(stream, state);\n },\n\n innerMode: function(state) {\n if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n if (state.localState) return {state: state.localState, mode: state.localMode};\n return {state: state, mode: mode};\n },\n\n indent: function(state, textAfter, line) {\n if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n return CodeMirror.Pass\n },\n\n blankLine: blankLine,\n\n getType: getType,\n\n blockCommentStart: \"\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n fold: \"markdown\"\n };\n return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.modeInfo = [\n {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\", \"cbl\"]},\n {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\", \"cs\"]},\n {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists\\.txt$/},\n {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n {name: \"Embedded JavaScript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history)\\.md$/i},\n {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"], alias: [\"jl\"]},\n {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\", \"wl\", \"wls\"]},\n {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\"], alias: [\"objective-c\", \"objc\"]},\n {name: \"Objective-C++\", mime: \"text/x-objectivec++\", mode: \"clike\", ext: [\"mm\"], alias: [\"objective-c++\", \"objc++\"]},\n {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n {name: \"PostgreSQL\", mime: \"text/x-pgsql\", mode: \"sql\"},\n {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n {name: \"TiddlyWiki\", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]},\n {name: \"WebAssembly\", mime: \"text/webassembly\", mode: \"wast\", ext: [\"wat\", \"wast\"]},\n ];\n // Ensure all modes have a mime property for backwards compatibility\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mimes) info.mime = info.mimes[0];\n }\n\n CodeMirror.findModeByMIME = function(mime) {\n mime = mime.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.mime == mime) return info;\n if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n if (info.mimes[j] == mime) return info;\n }\n if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n };\n\n CodeMirror.findModeByExtension = function(ext) {\n ext = ext.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.ext) for (var j = 0; j < info.ext.length; j++)\n if (info.ext[j] == ext) return info;\n }\n };\n\n CodeMirror.findModeByFileName = function(filename) {\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.file && info.file.test(filename)) return info;\n }\n var dot = filename.lastIndexOf(\".\");\n var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n if (ext) return CodeMirror.findModeByExtension(ext);\n };\n\n CodeMirror.findModeByName = function(name) {\n name = name.toLowerCase();\n for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n var info = CodeMirror.modeInfo[i];\n if (info.name.toLowerCase() == name) return info;\n if (info.alias) for (var j = 0; j < info.alias.length; j++)\n if (info.alias[j].toLowerCase() == name) return info;\n }\n };\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/5/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function lower(tagName) {\n return tagName && tagName.toLowerCase();\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName || \"\";\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(lower(parentTagName)) ||\n !config.contextGrabbers[lower(parentTagName)].hasOwnProperty(lower(nextTagName))) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(lower(state.context.tagName)))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(lower(tagName))) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /$/,\n blockCommentStart: \"\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n },\n\n xmlCurrentTag: function(state) {\n return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n },\n\n xmlCurrentContext: function(state) {\n var context = []\n for (var cx = state.context; cx; cx = cx.prev)\n context.push(cx.tagName)\n return context.reverse()\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","/*!\n * dist/inputmask\n * https://github.com/RobinHerbots/Inputmask\n * Copyright (c) 2010 - 2023 Robin Herbots\n * Licensed under the MIT license\n * Version: 5.0.8\n */\n!function(e, t) {\n if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = t(); else if (\"function\" == typeof define && define.amd) define([], t); else {\n var i = t();\n for (var n in i) (\"object\" == typeof exports ? exports : e)[n] = i[n];\n }\n}(\"undefined\" != typeof self ? self : this, (function() {\n return function() {\n \"use strict\";\n var e = {\n 8741: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var i = !(\"undefined\" == typeof window || !window.document || !window.document.createElement);\n t.default = i;\n },\n 3976: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var n = i(2839), a = {\n _maxTestPos: 500,\n placeholder: \"_\",\n optionalmarker: [ \"[\", \"]\" ],\n quantifiermarker: [ \"{\", \"}\" ],\n groupmarker: [ \"(\", \")\" ],\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n regex: null,\n oncomplete: function() {},\n onincomplete: function() {},\n oncleared: function() {},\n repeat: 0,\n greedy: !1,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n insertModeVisual: !0,\n clearIncomplete: !1,\n alias: null,\n onKeyDown: function() {},\n onBeforeMask: null,\n onBeforePaste: function(e, t) {\n return \"function\" == typeof t.onBeforeMask ? t.onBeforeMask.call(this, e, t) : e;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: function() {},\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n _radixDance: !1,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n ignorables: [ n.keys.Backspace, n.keys.Tab, n.keys.Pause, n.keys.Escape, n.keys.PageUp, n.keys.PageDown, n.keys.End, n.keys.Home, n.keys.ArrowLeft, n.keys.ArrowUp, n.keys.ArrowRight, n.keys.ArrowDown, n.keys.Insert, n.keys.Delete, n.keys.ContextMenu, n.keys.F1, n.keys.F2, n.keys.F3, n.keys.F4, n.keys.F5, n.keys.F6, n.keys.F7, n.keys.F8, n.keys.F9, n.keys.F10, n.keys.F11, n.keys.F12, n.keys.Process, n.keys.Unidentified, n.keys.Shift, n.keys.Control, n.keys.Alt, n.keys.Tab, n.keys.AltGraph, n.keys.CapsLock ],\n isComplete: null,\n preValidation: null,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"text\",\n importDataAttributes: !0,\n shiftPositions: !0,\n usePrototypeDefinitions: !0,\n validationEventTimeOut: 3e3,\n substitutes: {}\n };\n t.default = a;\n },\n 7392: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n t.default = {\n 9: {\n validator: \"[0-9\\uff10-\\uff19]\",\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9\\uff10-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n }\n };\n },\n 253: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, i) {\n if (void 0 === i) return e.__data ? e.__data[t] : null;\n e.__data = e.__data || {}, e.__data[t] = i;\n };\n },\n 3776: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.Event = void 0, t.off = function(e, t) {\n var i, n;\n f(this[0]) && e && (i = this[0].eventRegistry, n = this[0], e.split(\" \").forEach((function(e) {\n var a = l(e.split(\".\"), 2);\n (function(e, n) {\n var a, r, o = [];\n if (e.length > 0) if (void 0 === t) for (a = 0, r = i[e][n].length; a < r; a++) o.push({\n ev: e,\n namespace: n && n.length > 0 ? n : \"global\",\n handler: i[e][n][a]\n }); else o.push({\n ev: e,\n namespace: n && n.length > 0 ? n : \"global\",\n handler: t\n }); else if (n.length > 0) for (var s in i) for (var l in i[s]) if (l === n) if (void 0 === t) for (a = 0, \n r = i[s][l].length; a < r; a++) o.push({\n ev: s,\n namespace: l,\n handler: i[s][l][a]\n }); else o.push({\n ev: s,\n namespace: l,\n handler: t\n });\n return o;\n })(a[0], a[1]).forEach((function(e) {\n var t = e.ev, a = e.handler;\n !function(e, t, a) {\n if (e in i == 1) if (n.removeEventListener ? n.removeEventListener(e, a, !1) : n.detachEvent && n.detachEvent(\"on\".concat(e), a), \n \"global\" === t) for (var r in i[e]) i[e][r].splice(i[e][r].indexOf(a), 1); else i[e][t].splice(i[e][t].indexOf(a), 1);\n }(t, e.namespace, a);\n }));\n })));\n return this;\n }, t.on = function(e, t) {\n if (f(this[0])) {\n var i = this[0].eventRegistry, n = this[0];\n e.split(\" \").forEach((function(e) {\n var a = l(e.split(\".\"), 2), r = a[0], o = a[1];\n !function(e, a) {\n n.addEventListener ? n.addEventListener(e, t, !1) : n.attachEvent && n.attachEvent(\"on\".concat(e), t), \n i[e] = i[e] || {}, i[e][a] = i[e][a] || [], i[e][a].push(t);\n }(r, void 0 === o ? \"global\" : o);\n }));\n }\n return this;\n }, t.trigger = function(e) {\n var t = arguments;\n if (f(this[0])) for (var i = this[0].eventRegistry, n = this[0], r = \"string\" == typeof e ? e.split(\" \") : [ e.type ], s = 0; s < r.length; s++) {\n var l = r[s].split(\".\"), c = l[0], u = l[1] || \"global\";\n if (void 0 !== document && \"global\" === u) {\n var d, p = {\n bubbles: !0,\n cancelable: !0,\n composed: !0,\n detail: arguments[1]\n };\n if (document.createEvent) {\n try {\n if (\"input\" === c) p.inputType = \"insertText\", d = new InputEvent(c, p); else d = new CustomEvent(c, p);\n } catch (e) {\n (d = document.createEvent(\"CustomEvent\")).initCustomEvent(c, p.bubbles, p.cancelable, p.detail);\n }\n e.type && (0, a.default)(d, e), n.dispatchEvent(d);\n } else (d = document.createEventObject()).eventType = c, d.detail = arguments[1], \n e.type && (0, a.default)(d, e), n.fireEvent(\"on\" + d.eventType, d);\n } else if (void 0 !== i[c]) {\n arguments[0] = arguments[0].type ? arguments[0] : o.default.Event(arguments[0]), \n arguments[0].detail = arguments.slice(1);\n var h = i[c];\n (\"global\" === u ? Object.values(h).flat() : h[u]).forEach((function(e) {\n return e.apply(n, t);\n }));\n }\n }\n return this;\n };\n var n, a = u(i(600)), r = u(i(9380)), o = u(i(4963)), s = u(i(8741));\n function l(e, t) {\n return function(e) {\n if (Array.isArray(e)) return e;\n }(e) || function(e, t) {\n var i = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (null != i) {\n var n, a, r, o, s = [], l = !0, c = !1;\n try {\n if (r = (i = i.call(e)).next, 0 === t) {\n if (Object(i) !== i) return;\n l = !1;\n } else for (;!(l = (n = r.call(i)).done) && (s.push(n.value), s.length !== t); l = !0) ;\n } catch (e) {\n c = !0, a = e;\n } finally {\n try {\n if (!l && null != i.return && (o = i.return(), Object(o) !== o)) return;\n } finally {\n if (c) throw a;\n }\n }\n return s;\n }\n }(e, t) || function(e, t) {\n if (!e) return;\n if (\"string\" == typeof e) return c(e, t);\n var i = Object.prototype.toString.call(e).slice(8, -1);\n \"Object\" === i && e.constructor && (i = e.constructor.name);\n if (\"Map\" === i || \"Set\" === i) return Array.from(e);\n if (\"Arguments\" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return c(e, t);\n }(e, t) || function() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function c(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var i = 0, n = new Array(t); i < t; i++) n[i] = e[i];\n return n;\n }\n function u(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n function f(e) {\n return e instanceof Element;\n }\n t.Event = n, \"function\" == typeof r.default.CustomEvent ? t.Event = n = r.default.CustomEvent : s.default && (t.Event = n = function(e, t) {\n t = t || {\n bubbles: !1,\n cancelable: !1,\n composed: !0,\n detail: void 0\n };\n var i = document.createEvent(\"CustomEvent\");\n return i.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), i;\n }, n.prototype = r.default.Event.prototype);\n },\n 600: function(e, t) {\n function i(e) {\n return i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, i(e);\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function e() {\n var t, n, a, r, o, s, l = arguments[0] || {}, c = 1, u = arguments.length, f = !1;\n \"boolean\" == typeof l && (f = l, l = arguments[c] || {}, c++);\n \"object\" !== i(l) && \"function\" != typeof l && (l = {});\n for (;c < u; c++) if (null != (t = arguments[c])) for (n in t) a = l[n], l !== (r = t[n]) && (f && r && (\"[object Object]\" === Object.prototype.toString.call(r) || (o = Array.isArray(r))) ? (o ? (o = !1, \n s = a && Array.isArray(a) ? a : []) : s = a && \"[object Object]\" === Object.prototype.toString.call(a) ? a : {}, \n l[n] = e(f, s, r)) : void 0 !== r && (l[n] = r));\n return l;\n };\n },\n 4963: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var n = s(i(600)), a = s(i(9380)), r = s(i(253)), o = i(3776);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = a.default.document;\n function c(e) {\n return e instanceof c ? e : this instanceof c ? void (null != e && e !== a.default && (this[0] = e.nodeName ? e : void 0 !== e[0] && e[0].nodeName ? e[0] : l.querySelector(e), \n void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new c(e);\n }\n c.prototype = {\n on: o.on,\n off: o.off,\n trigger: o.trigger\n }, c.extend = n.default, c.data = r.default, c.Event = o.Event;\n var u = c;\n t.default = u;\n },\n 9845: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.mobile = t.iphone = t.ie = void 0;\n var n, a = (n = i(9380)) && n.__esModule ? n : {\n default: n\n };\n var r = a.default.navigator && a.default.navigator.userAgent || \"\", o = r.indexOf(\"MSIE \") > 0 || r.indexOf(\"Trident/\") > 0, s = navigator.userAgentData && navigator.userAgentData.mobile || a.default.navigator && a.default.navigator.maxTouchPoints || \"ontouchstart\" in a.default, l = /iphone/i.test(r);\n t.iphone = l, t.mobile = s, t.ie = o;\n },\n 7184: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e) {\n return e.replace(i, \"\\\\$1\");\n };\n var i = new RegExp(\"(\\\\\" + [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ].join(\"|\\\\\") + \")\", \"gim\");\n },\n 6030: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventHandlers = void 0;\n var n = i(8711), a = i(2839), r = i(9845), o = i(7215), s = i(7760), l = i(4713);\n function c(e, t) {\n var i = \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (!i) {\n if (Array.isArray(e) || (i = function(e, t) {\n if (!e) return;\n if (\"string\" == typeof e) return u(e, t);\n var i = Object.prototype.toString.call(e).slice(8, -1);\n \"Object\" === i && e.constructor && (i = e.constructor.name);\n if (\"Map\" === i || \"Set\" === i) return Array.from(e);\n if (\"Arguments\" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return u(e, t);\n }(e)) || t && e && \"number\" == typeof e.length) {\n i && (e = i);\n var n = 0, a = function() {};\n return {\n s: a,\n n: function() {\n return n >= e.length ? {\n done: !0\n } : {\n done: !1,\n value: e[n++]\n };\n },\n e: function(e) {\n throw e;\n },\n f: a\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var r, o = !0, s = !1;\n return {\n s: function() {\n i = i.call(e);\n },\n n: function() {\n var e = i.next();\n return o = e.done, e;\n },\n e: function(e) {\n s = !0, r = e;\n },\n f: function() {\n try {\n o || null == i.return || i.return();\n } finally {\n if (s) throw r;\n }\n }\n };\n }\n function u(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var i = 0, n = new Array(t); i < t; i++) n[i] = e[i];\n return n;\n }\n var f = {\n keyEvent: function(e, t, i, c, u) {\n var d = this.inputmask, p = d.opts, h = d.dependencyLib, v = d.maskset, m = this, g = h(m), y = e.key, k = n.caret.call(d, m), b = p.onKeyDown.call(this, e, n.getBuffer.call(d), k, p);\n if (void 0 !== b) return b;\n if (y === a.keys.Backspace || y === a.keys.Delete || r.iphone && y === a.keys.BACKSPACE_SAFARI || e.ctrlKey && y === a.keys.x && !(\"oncut\" in m)) e.preventDefault(), \n o.handleRemove.call(d, m, y, k), (0, s.writeBuffer)(m, n.getBuffer.call(d, !0), v.p, e, m.inputmask._valueGet() !== n.getBuffer.call(d).join(\"\")); else if (y === a.keys.End || y === a.keys.PageDown) {\n e.preventDefault();\n var x = n.seekNext.call(d, n.getLastValidPosition.call(d));\n n.caret.call(d, m, e.shiftKey ? k.begin : x, x, !0);\n } else y === a.keys.Home && !e.shiftKey || y === a.keys.PageUp ? (e.preventDefault(), \n n.caret.call(d, m, 0, e.shiftKey ? k.begin : 0, !0)) : p.undoOnEscape && y === a.keys.Escape && !0 !== e.altKey ? ((0, \n s.checkVal)(m, !0, !1, d.undoValue.split(\"\")), g.trigger(\"click\")) : y !== a.keys.Insert || e.shiftKey || e.ctrlKey || void 0 !== d.userOptions.insertMode ? !0 === p.tabThrough && y === a.keys.Tab ? !0 === e.shiftKey ? (k.end = n.seekPrevious.call(d, k.end, !0), \n !0 === l.getTest.call(d, k.end - 1).match.static && k.end--, k.begin = n.seekPrevious.call(d, k.end, !0), \n k.begin >= 0 && k.end > 0 && (e.preventDefault(), n.caret.call(d, m, k.begin, k.end))) : (k.begin = n.seekNext.call(d, k.begin, !0), \n k.end = n.seekNext.call(d, k.begin, !0), k.end < v.maskLength && k.end--, k.begin <= v.maskLength && (e.preventDefault(), \n n.caret.call(d, m, k.begin, k.end))) : e.shiftKey || p.insertModeVisual && !1 === p.insertMode && (y === a.keys.ArrowRight ? setTimeout((function() {\n var e = n.caret.call(d, m);\n n.caret.call(d, m, e.begin);\n }), 0) : y === a.keys.ArrowLeft && setTimeout((function() {\n var e = n.translatePosition.call(d, m.inputmask.caretPos.begin);\n n.translatePosition.call(d, m.inputmask.caretPos.end);\n d.isRTL ? n.caret.call(d, m, e + (e === v.maskLength ? 0 : 1)) : n.caret.call(d, m, e - (0 === e ? 0 : 1));\n }), 0)) : o.isSelection.call(d, k) ? p.insertMode = !p.insertMode : (p.insertMode = !p.insertMode, \n n.caret.call(d, m, k.begin, k.begin));\n return d.isComposing = y == a.keys.Process || y == a.keys.Unidentified, d.ignorable = p.ignorables.includes(y), \n f.keypressEvent.call(this, e, t, i, c, u);\n },\n keypressEvent: function(e, t, i, r, l) {\n var c = this.inputmask || this, u = c.opts, f = c.dependencyLib, d = c.maskset, p = c.el, h = f(p), v = e.key;\n if (!0 === t || e.ctrlKey && e.altKey || !(e.ctrlKey || e.metaKey || c.ignorable)) {\n if (v) {\n var m, g = t ? {\n begin: l,\n end: l\n } : n.caret.call(c, p);\n v = u.substitutes[v] || v, d.writeOutBuffer = !0;\n var y = o.isValid.call(c, g, v, r, void 0, void 0, void 0, t);\n if (!1 !== y && (n.resetMaskSet.call(c, !0), m = void 0 !== y.caret ? y.caret : n.seekNext.call(c, y.pos.begin ? y.pos.begin : y.pos), \n d.p = m), m = u.numericInput && void 0 === y.caret ? n.seekPrevious.call(c, m) : m, \n !1 !== i && (setTimeout((function() {\n u.onKeyValidation.call(p, v, y);\n }), 0), d.writeOutBuffer && !1 !== y)) {\n var k = n.getBuffer.call(c);\n (0, s.writeBuffer)(p, k, m, e, !0 !== t);\n }\n if (e.preventDefault(), t) return !1 !== y && (y.forwardPosition = m), y;\n }\n } else v === a.keys.Enter && c.undoValue !== c._valueGet(!0) && (c.undoValue = c._valueGet(!0), \n setTimeout((function() {\n h.trigger(\"change\");\n }), 0));\n },\n pasteEvent: function(e) {\n var t, i = this.inputmask, a = i.opts, r = i._valueGet(!0), o = n.caret.call(i, this);\n i.isRTL && (t = o.end, o.end = n.translatePosition.call(i, o.begin), o.begin = n.translatePosition.call(i, t));\n var l = r.substr(0, o.begin), u = r.substr(o.end, r.length);\n if (l == (i.isRTL ? n.getBufferTemplate.call(i).slice().reverse() : n.getBufferTemplate.call(i)).slice(0, o.begin).join(\"\") && (l = \"\"), \n u == (i.isRTL ? n.getBufferTemplate.call(i).slice().reverse() : n.getBufferTemplate.call(i)).slice(o.end).join(\"\") && (u = \"\"), \n window.clipboardData && window.clipboardData.getData) r = l + window.clipboardData.getData(\"Text\") + u; else {\n if (!e.clipboardData || !e.clipboardData.getData) return !0;\n r = l + e.clipboardData.getData(\"text/plain\") + u;\n }\n var f = r;\n if (i.isRTL) {\n f = f.split(\"\");\n var d, p = c(n.getBufferTemplate.call(i));\n try {\n for (p.s(); !(d = p.n()).done; ) {\n var h = d.value;\n f[0] === h && f.shift();\n }\n } catch (e) {\n p.e(e);\n } finally {\n p.f();\n }\n f = f.join(\"\");\n }\n if (\"function\" == typeof a.onBeforePaste) {\n if (!1 === (f = a.onBeforePaste.call(i, f, a))) return !1;\n f || (f = r);\n }\n (0, s.checkVal)(this, !0, !1, f.toString().split(\"\"), e), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var t = this.inputmask, i = t.opts, o = t.dependencyLib;\n var c, u = this, d = u.inputmask._valueGet(!0), p = (t.isRTL ? n.getBuffer.call(t).slice().reverse() : n.getBuffer.call(t)).join(\"\"), h = n.caret.call(t, u, void 0, void 0, !0);\n if (p !== d) {\n if (c = function(e, a, r) {\n for (var o, s, c, u = e.substr(0, r.begin).split(\"\"), f = e.substr(r.begin).split(\"\"), d = a.substr(0, r.begin).split(\"\"), p = a.substr(r.begin).split(\"\"), h = u.length >= d.length ? u.length : d.length, v = f.length >= p.length ? f.length : p.length, m = \"\", g = [], y = \"~\"; u.length < h; ) u.push(y);\n for (;d.length < h; ) d.push(y);\n for (;f.length < v; ) f.unshift(y);\n for (;p.length < v; ) p.unshift(y);\n var k = u.concat(f), b = d.concat(p);\n for (s = 0, o = k.length; s < o; s++) switch (c = l.getPlaceholder.call(t, n.translatePosition.call(t, s)), \n m) {\n case \"insertText\":\n b[s - 1] === k[s] && r.begin == k.length - 1 && g.push(k[s]), s = o;\n break;\n\n case \"insertReplacementText\":\n case \"deleteContentBackward\":\n k[s] === y ? r.end++ : s = o;\n break;\n\n default:\n k[s] !== b[s] && (k[s + 1] !== y && k[s + 1] !== c && void 0 !== k[s + 1] || (b[s] !== c || b[s + 1] !== y) && b[s] !== y ? b[s + 1] === y && b[s] === k[s + 1] ? (m = \"insertText\", \n g.push(k[s]), r.begin--, r.end--) : k[s] !== c && k[s] !== y && (k[s + 1] === y || b[s] !== k[s] && b[s + 1] === k[s + 1]) ? (m = \"insertReplacementText\", \n g.push(k[s]), r.begin--) : k[s] === y ? (m = \"deleteContentBackward\", (n.isMask.call(t, n.translatePosition.call(t, s), !0) || b[s] === i.radixPoint) && r.end++) : s = o : (m = \"insertText\", \n g.push(k[s]), r.begin--, r.end--));\n }\n return {\n action: m,\n data: g,\n caret: r\n };\n }(d, p, h), (u.inputmask.shadowRoot || u.ownerDocument).activeElement !== u && u.focus(), \n (0, s.writeBuffer)(u, n.getBuffer.call(t)), n.caret.call(t, u, h.begin, h.end, !0), \n !r.mobile && t.skipNextInsert && \"insertText\" === e.inputType && \"insertText\" === c.action && t.isComposing) return !1;\n switch (\"insertCompositionText\" === e.inputType && \"insertText\" === c.action && t.isComposing ? t.skipNextInsert = !0 : t.skipNextInsert = !1, \n c.action) {\n case \"insertText\":\n case \"insertReplacementText\":\n c.data.forEach((function(e, i) {\n var n = new o.Event(\"keypress\");\n n.key = e, t.ignorable = !1, f.keypressEvent.call(u, n);\n })), setTimeout((function() {\n t.$el.trigger(\"keyup\");\n }), 0);\n break;\n\n case \"deleteContentBackward\":\n var v = new o.Event(\"keydown\");\n v.key = a.keys.Backspace, f.keyEvent.call(u, v);\n break;\n\n default:\n (0, s.applyInputValue)(u, d), n.caret.call(t, u, h.begin, h.end, !0);\n }\n e.preventDefault();\n }\n },\n setValueEvent: function(e) {\n var t = this.inputmask, i = this, a = e && e.detail ? e.detail[0] : arguments[1];\n void 0 === a && (a = i.inputmask._valueGet(!0)), (0, s.applyInputValue)(i, a), (e.detail && void 0 !== e.detail[1] || void 0 !== arguments[2]) && n.caret.call(t, i, e.detail ? e.detail[1] : arguments[2]);\n },\n focusEvent: function(e) {\n var t = this.inputmask, i = t.opts, a = null == t ? void 0 : t._valueGet();\n i.showMaskOnFocus && a !== n.getBuffer.call(t).join(\"\") && (0, s.writeBuffer)(this, n.getBuffer.call(t), n.seekNext.call(t, n.getLastValidPosition.call(t))), \n !0 !== i.positionCaretOnTab || !1 !== t.mouseEnter || o.isComplete.call(t, n.getBuffer.call(t)) && -1 !== n.getLastValidPosition.call(t) || f.clickEvent.apply(this, [ e, !0 ]), \n t.undoValue = null == t ? void 0 : t._valueGet(!0);\n },\n invalidEvent: function(e) {\n this.inputmask.validationEvent = !0;\n },\n mouseleaveEvent: function() {\n var e = this.inputmask, t = e.opts, i = this;\n e.mouseEnter = !1, t.clearMaskOnLostFocus && (i.inputmask.shadowRoot || i.ownerDocument).activeElement !== i && (0, \n s.HandleNativePlaceholder)(i, e.originalPlaceholder);\n },\n clickEvent: function(e, t) {\n var i = this.inputmask;\n i.clicked++;\n var a = this;\n if ((a.inputmask.shadowRoot || a.ownerDocument).activeElement === a) {\n var r = n.determineNewCaretPosition.call(i, n.caret.call(i, a), t);\n void 0 !== r && n.caret.call(i, a, r);\n }\n },\n cutEvent: function(e) {\n var t = this.inputmask, i = t.maskset, r = this, l = n.caret.call(t, r), c = t.isRTL ? n.getBuffer.call(t).slice(l.end, l.begin) : n.getBuffer.call(t).slice(l.begin, l.end), u = t.isRTL ? c.reverse().join(\"\") : c.join(\"\");\n window.navigator.clipboard ? window.navigator.clipboard.writeText(u) : window.clipboardData && window.clipboardData.getData && window.clipboardData.setData(\"Text\", u), \n o.handleRemove.call(t, r, a.keys.Delete, l), (0, s.writeBuffer)(r, n.getBuffer.call(t), i.p, e, t.undoValue !== t._valueGet(!0));\n },\n blurEvent: function(e) {\n var t = this.inputmask, i = t.opts, a = t.dependencyLib;\n t.clicked = 0;\n var r = a(this), l = this;\n if (l.inputmask) {\n (0, s.HandleNativePlaceholder)(l, t.originalPlaceholder);\n var c = l.inputmask._valueGet(), u = n.getBuffer.call(t).slice();\n \"\" !== c && (i.clearMaskOnLostFocus && (-1 === n.getLastValidPosition.call(t) && c === n.getBufferTemplate.call(t).join(\"\") ? u = [] : s.clearOptionalTail.call(t, u)), \n !1 === o.isComplete.call(t, u) && (setTimeout((function() {\n r.trigger(\"incomplete\");\n }), 0), i.clearIncomplete && (n.resetMaskSet.call(t), u = i.clearMaskOnLostFocus ? [] : n.getBufferTemplate.call(t).slice())), \n (0, s.writeBuffer)(l, u, void 0, e)), t.undoValue !== t._valueGet(!0) && (t.undoValue = t._valueGet(!0), \n r.trigger(\"change\"));\n }\n },\n mouseenterEvent: function() {\n var e = this.inputmask, t = e.opts.showMaskOnHover, i = this;\n if (e.mouseEnter = !0, (i.inputmask.shadowRoot || i.ownerDocument).activeElement !== i) {\n var a = (e.isRTL ? n.getBufferTemplate.call(e).slice().reverse() : n.getBufferTemplate.call(e)).join(\"\");\n t && (0, s.HandleNativePlaceholder)(i, a);\n }\n },\n submitEvent: function() {\n var e = this.inputmask, t = e.opts;\n e.undoValue !== e._valueGet(!0) && e.$el.trigger(\"change\"), -1 === n.getLastValidPosition.call(e) && e._valueGet && e._valueGet() === n.getBufferTemplate.call(e).join(\"\") && e._valueSet(\"\"), \n t.clearIncomplete && !1 === o.isComplete.call(e, n.getBuffer.call(e)) && e._valueSet(\"\"), \n t.removeMaskOnSubmit && (e._valueSet(e.unmaskedvalue(), !0), setTimeout((function() {\n (0, s.writeBuffer)(e.el, n.getBuffer.call(e));\n }), 0));\n },\n resetEvent: function() {\n var e = this.inputmask;\n e.refreshValue = !0, setTimeout((function() {\n (0, s.applyInputValue)(e.el, e._valueGet(!0));\n }), 0);\n }\n };\n t.EventHandlers = f;\n },\n 9716: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventRuler = void 0;\n var n, a = (n = i(2394)) && n.__esModule ? n : {\n default: n\n }, r = i(2839), o = i(8711), s = i(7760);\n var l = {\n on: function(e, t, i) {\n var n = e.inputmask.dependencyLib, l = function(t) {\n t.originalEvent && (t = t.originalEvent || t, arguments[0] = t);\n var l, c = this, u = c.inputmask, f = u ? u.opts : void 0;\n if (void 0 === u && \"FORM\" !== this.nodeName) {\n var d = n.data(c, \"_inputmask_opts\");\n n(c).off(), d && new a.default(d).mask(c);\n } else {\n if ([ \"submit\", \"reset\", \"setvalue\" ].includes(t.type) || \"FORM\" === this.nodeName || !(c.disabled || c.readOnly && !(\"keydown\" === t.type && t.ctrlKey && t.key === r.keys.c || !1 === f.tabThrough && t.key === r.keys.Tab))) {\n switch (t.type) {\n case \"input\":\n if (!0 === u.skipInputEvent) return u.skipInputEvent = !1, t.preventDefault();\n break;\n\n case \"click\":\n case \"focus\":\n return u.validationEvent ? (u.validationEvent = !1, e.blur(), (0, s.HandleNativePlaceholder)(e, (u.isRTL ? o.getBufferTemplate.call(u).slice().reverse() : o.getBufferTemplate.call(u)).join(\"\")), \n setTimeout((function() {\n e.focus();\n }), f.validationEventTimeOut), !1) : (l = arguments, void setTimeout((function() {\n e.inputmask && i.apply(c, l);\n }), 0));\n }\n var p = i.apply(c, arguments);\n return !1 === p && (t.preventDefault(), t.stopPropagation()), p;\n }\n t.preventDefault();\n }\n };\n [ \"submit\", \"reset\" ].includes(t) ? (l = l.bind(e), null !== e.form && n(e.form).on(t, l)) : n(e).on(t, l), \n e.inputmask.events[t] = e.inputmask.events[t] || [], e.inputmask.events[t].push(l);\n },\n off: function(e, t) {\n if (e.inputmask && e.inputmask.events) {\n var i = e.inputmask.dependencyLib, n = e.inputmask.events;\n for (var a in t && ((n = [])[t] = e.inputmask.events[t]), n) {\n for (var r = n[a]; r.length > 0; ) {\n var o = r.pop();\n [ \"submit\", \"reset\" ].includes(a) ? null !== e.form && i(e.form).off(a, o) : i(e).off(a, o);\n }\n delete e.inputmask.events[a];\n }\n }\n }\n };\n t.EventRuler = l;\n },\n 219: function(e, t, i) {\n var n = d(i(2394)), a = i(2839), r = d(i(7184)), o = i(8711), s = i(4713);\n function l(e, t) {\n return function(e) {\n if (Array.isArray(e)) return e;\n }(e) || function(e, t) {\n var i = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (null != i) {\n var n, a, r, o, s = [], l = !0, c = !1;\n try {\n if (r = (i = i.call(e)).next, 0 === t) {\n if (Object(i) !== i) return;\n l = !1;\n } else for (;!(l = (n = r.call(i)).done) && (s.push(n.value), s.length !== t); l = !0) ;\n } catch (e) {\n c = !0, a = e;\n } finally {\n try {\n if (!l && null != i.return && (o = i.return(), Object(o) !== o)) return;\n } finally {\n if (c) throw a;\n }\n }\n return s;\n }\n }(e, t) || function(e, t) {\n if (!e) return;\n if (\"string\" == typeof e) return c(e, t);\n var i = Object.prototype.toString.call(e).slice(8, -1);\n \"Object\" === i && e.constructor && (i = e.constructor.name);\n if (\"Map\" === i || \"Set\" === i) return Array.from(e);\n if (\"Arguments\" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return c(e, t);\n }(e, t) || function() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function c(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var i = 0, n = new Array(t); i < t; i++) n[i] = e[i];\n return n;\n }\n function u(e) {\n return u = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, u(e);\n }\n function f(e, t) {\n for (var i = 0; i < t.length; i++) {\n var n = t[i];\n n.enumerable = n.enumerable || !1, n.configurable = !0, \"value\" in n && (n.writable = !0), \n Object.defineProperty(e, (a = n.key, r = void 0, r = function(e, t) {\n if (\"object\" !== u(e) || null === e) return e;\n var i = e[Symbol.toPrimitive];\n if (void 0 !== i) {\n var n = i.call(e, t || \"default\");\n if (\"object\" !== u(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === t ? String : Number)(e);\n }(a, \"string\"), \"symbol\" === u(r) ? r : String(r)), n);\n }\n var a, r;\n }\n function d(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var p = n.default.dependencyLib, h = function() {\n function e(t, i, n) {\n !function(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, e), this.mask = t, this.format = i, this.opts = n, this._date = new Date(1, 0, 1), \n this.initDateObject(t, this.opts);\n }\n var t, i, n;\n return t = e, (i = [ {\n key: \"date\",\n get: function() {\n return void 0 === this._date && (this._date = new Date(1, 0, 1), this.initDateObject(void 0, this.opts)), \n this._date;\n }\n }, {\n key: \"initDateObject\",\n value: function(e, t) {\n var i;\n for (P(t).lastIndex = 0; i = P(t).exec(this.format); ) {\n var n = new RegExp(\"\\\\d+$\").exec(i[0]), a = n ? i[0][0] + \"x\" : i[0], r = void 0;\n if (void 0 !== e) {\n if (n) {\n var o = P(t).lastIndex, s = E(i.index, t);\n P(t).lastIndex = o, r = e.slice(0, e.indexOf(s.nextMatch[0]));\n } else r = e.slice(0, g[a] && g[a][4] || a.length);\n e = e.slice(r.length);\n }\n Object.prototype.hasOwnProperty.call(g, a) && this.setValue(this, r, a, g[a][2], g[a][1]);\n }\n }\n }, {\n key: \"setValue\",\n value: function(e, t, i, n, a) {\n if (void 0 !== t && (e[n] = \"ampm\" === n ? t : t.replace(/[^0-9]/g, \"0\"), e[\"raw\" + n] = t.replace(/\\s/g, \"_\")), \n void 0 !== a) {\n var r = e[n];\n (\"day\" === n && 29 === parseInt(r) || \"month\" === n && 2 === parseInt(r)) && (29 !== parseInt(e.day) || 2 !== parseInt(e.month) || \"\" !== e.year && void 0 !== e.year || e._date.setFullYear(2012, 1, 29)), \n \"day\" === n && (m = !0, 0 === parseInt(r) && (r = 1)), \"month\" === n && (m = !0), \n \"year\" === n && (m = !0, r.length < 4 && (r = M(r, 4, !0))), \"\" === r || isNaN(r) || a.call(e._date, r), \n \"ampm\" === n && a.call(e._date, r);\n }\n }\n }, {\n key: \"reset\",\n value: function() {\n this._date = new Date(1, 0, 1);\n }\n }, {\n key: \"reInit\",\n value: function() {\n this._date = void 0, this.date;\n }\n } ]) && f(t.prototype, i), n && f(t, n), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e;\n }(), v = (new Date).getFullYear(), m = !1, g = {\n d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n return M(Date.prototype.getDate.call(this), 2);\n } ],\n ddd: [ \"\" ],\n dddd: [ \"\" ],\n m: [ \"[1-9]|1[012]\", function(e) {\n var t = e ? parseInt(e) : 0;\n return t > 0 && t--, Date.prototype.setMonth.call(this, t);\n }, \"month\", function() {\n return Date.prototype.getMonth.call(this) + 1;\n } ],\n mm: [ \"0[1-9]|1[012]\", function(e) {\n var t = e ? parseInt(e) : 0;\n return t > 0 && t--, Date.prototype.setMonth.call(this, t);\n }, \"month\", function() {\n return M(Date.prototype.getMonth.call(this) + 1, 2);\n } ],\n mmm: [ \"\" ],\n mmmm: [ \"\" ],\n yy: [ \"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\n return M(Date.prototype.getFullYear.call(this), 2);\n } ],\n yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n return M(Date.prototype.getFullYear.call(this), 4);\n } ],\n h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n return M(Date.prototype.getHours.call(this), 2);\n } ],\n hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return Date.prototype.getHours;\n } ],\n H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n return M(Date.prototype.getHours.call(this), 2);\n } ],\n Hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return function() {\n return M(Date.prototype.getHours.call(this), e);\n };\n } ],\n M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n return M(Date.prototype.getMinutes.call(this), 2);\n } ],\n s: [ \"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds ],\n ss: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n return M(Date.prototype.getSeconds.call(this), 2);\n } ],\n l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return M(Date.prototype.getMilliseconds.call(this), 3);\n }, 3 ],\n L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return M(Date.prototype.getMilliseconds.call(this), 2);\n }, 2 ],\n t: [ \"[ap]\", k, \"ampm\", b, 1 ],\n tt: [ \"[ap]m\", k, \"ampm\", b, 2 ],\n T: [ \"[AP]\", k, \"ampm\", b, 1 ],\n TT: [ \"[AP]M\", k, \"ampm\", b, 2 ],\n Z: [ \".*\", void 0, \"Z\", function() {\n var e = this.toString().match(/\\((.+)\\)/)[1];\n e.includes(\" \") && (e = (e = e.replace(\"-\", \" \").toUpperCase()).split(\" \").map((function(e) {\n return l(e, 1)[0];\n })).join(\"\"));\n return e;\n } ],\n o: [ \"\" ],\n S: [ \"\" ]\n }, y = {\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n function k(e) {\n var t = this.getHours();\n e.toLowerCase().includes(\"p\") ? this.setHours(t + 12) : e.toLowerCase().includes(\"a\") && t >= 12 && this.setHours(t - 12);\n }\n function b() {\n var e = this.getHours();\n return (e = e || 12) >= 12 ? \"PM\" : \"AM\";\n }\n function x(e) {\n var t = new RegExp(\"\\\\d+$\").exec(e[0]);\n if (t && void 0 !== t[0]) {\n var i = g[e[0][0] + \"x\"].slice(\"\");\n return i[0] = i[0](t[0]), i[3] = i[3](t[0]), i;\n }\n if (g[e[0]]) return g[e[0]];\n }\n function P(e) {\n if (!e.tokenizer) {\n var t = [], i = [];\n for (var n in g) if (/\\.*x$/.test(n)) {\n var a = n[0] + \"\\\\d+\";\n -1 === i.indexOf(a) && i.push(a);\n } else -1 === t.indexOf(n[0]) && t.push(n[0]);\n e.tokenizer = \"(\" + (i.length > 0 ? i.join(\"|\") + \"|\" : \"\") + t.join(\"+|\") + \")+?|.\", \n e.tokenizer = new RegExp(e.tokenizer, \"g\");\n }\n return e.tokenizer;\n }\n function w(e, t, i) {\n if (!m) return !0;\n if (void 0 === e.rawday || !isFinite(e.rawday) && new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day || \"29\" == e.day && (!isFinite(e.rawyear) || void 0 === e.rawyear || \"\" === e.rawyear) || new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day) return t;\n if (\"29\" == e.day) {\n var n = E(t.pos, i);\n if (\"yyyy\" === n.targetMatch[0] && t.pos - n.targetMatchIndex == 2) return t.remove = t.pos + 1, \n t;\n } else if (\"02\" == e.month && \"30\" == e.day && void 0 !== t.c) return e.day = \"03\", \n e.date.setDate(3), e.date.setMonth(1), t.insert = [ {\n pos: t.pos,\n c: \"0\"\n }, {\n pos: t.pos + 1,\n c: t.c\n } ], t.caret = o.seekNext.call(this, t.pos + 1), t;\n return !1;\n }\n function S(e, t, i, n) {\n var a, o, s = \"\";\n for (P(i).lastIndex = 0; a = P(i).exec(e); ) {\n if (void 0 === t) if (o = x(a)) s += \"(\" + o[0] + \")\"; else switch (a[0]) {\n case \"[\":\n s += \"(\";\n break;\n\n case \"]\":\n s += \")?\";\n break;\n\n default:\n s += (0, r.default)(a[0]);\n } else if (o = x(a)) if (!0 !== n && o[3]) s += o[3].call(t.date); else o[2] ? s += t[\"raw\" + o[2]] : s += a[0]; else s += a[0];\n }\n return s;\n }\n function M(e, t, i) {\n for (e = String(e), t = t || 2; e.length < t; ) e = i ? e + \"0\" : \"0\" + e;\n return e;\n }\n function _(e, t, i) {\n return \"string\" == typeof e ? new h(e, t, i) : e && \"object\" === u(e) && Object.prototype.hasOwnProperty.call(e, \"date\") ? e : void 0;\n }\n function O(e, t) {\n return S(t.inputFormat, {\n date: e\n }, t);\n }\n function E(e, t) {\n var i, n, a = 0, r = 0;\n for (P(t).lastIndex = 0; n = P(t).exec(t.inputFormat); ) {\n var o = new RegExp(\"\\\\d+$\").exec(n[0]);\n if ((a += r = o ? parseInt(o[0]) : n[0].length) >= e + 1) {\n i = n, n = P(t).exec(t.inputFormat);\n break;\n }\n }\n return {\n targetMatchIndex: a - r,\n nextMatch: n,\n targetMatch: i\n };\n }\n n.default.extendAliases({\n datetime: {\n mask: function(e) {\n return e.numericInput = !1, g.S = e.i18n.ordinalSuffix.join(\"|\"), e.inputFormat = y[e.inputFormat] || e.inputFormat, \n e.displayFormat = y[e.displayFormat] || e.displayFormat || e.inputFormat, e.outputFormat = y[e.outputFormat] || e.outputFormat || e.inputFormat, \n e.placeholder = \"\" !== e.placeholder ? e.placeholder : e.inputFormat.replace(/[[\\]]/, \"\"), \n e.regex = S(e.inputFormat, void 0, e), e.min = _(e.min, e.inputFormat, e), e.max = _(e.max, e.inputFormat, e), \n null;\n },\n placeholder: \"\",\n inputFormat: \"isoDateTime\",\n displayFormat: null,\n outputFormat: null,\n min: null,\n max: null,\n skipOptionalPartCharacter: \"\",\n i18n: {\n dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n },\n preValidation: function(e, t, i, n, a, r, o, s) {\n if (s) return !0;\n if (isNaN(i) && e[t] !== i) {\n var l = E(t, a);\n if (l.nextMatch && l.nextMatch[0] === i && l.targetMatch[0].length > 1) {\n var c = g[l.targetMatch[0]][0];\n if (new RegExp(c).test(\"0\" + e[t - 1])) return e[t] = e[t - 1], e[t - 1] = \"0\", \n {\n fuzzy: !0,\n buffer: e,\n refreshFromBuffer: {\n start: t - 1,\n end: t + 1\n },\n pos: t + 1\n };\n }\n }\n return !0;\n },\n postValidation: function(e, t, i, n, a, r, o, l) {\n var c, u;\n if (o) return !0;\n if (!1 === n && (((c = E(t + 1, a)).targetMatch && c.targetMatchIndex === t && c.targetMatch[0].length > 1 && void 0 !== g[c.targetMatch[0]] || (c = E(t + 2, a)).targetMatch && c.targetMatchIndex === t + 1 && c.targetMatch[0].length > 1 && void 0 !== g[c.targetMatch[0]]) && (u = g[c.targetMatch[0]][0]), \n void 0 !== u && (void 0 !== r.validPositions[t + 1] && new RegExp(u).test(i + \"0\") ? (e[t] = i, \n e[t + 1] = \"0\", n = {\n pos: t + 2,\n caret: t\n }) : new RegExp(u).test(\"0\" + i) && (e[t] = \"0\", e[t + 1] = i, n = {\n pos: t + 2\n })), !1 === n)) return n;\n if (n.fuzzy && (e = n.buffer, t = n.pos), (c = E(t, a)).targetMatch && c.targetMatch[0] && void 0 !== g[c.targetMatch[0]]) {\n var f = g[c.targetMatch[0]];\n u = f[0];\n var d = e.slice(c.targetMatchIndex, c.targetMatchIndex + c.targetMatch[0].length);\n if (!1 === new RegExp(u).test(d.join(\"\")) && 2 === c.targetMatch[0].length && r.validPositions[c.targetMatchIndex] && r.validPositions[c.targetMatchIndex + 1] && (r.validPositions[c.targetMatchIndex + 1].input = \"0\"), \n \"year\" == f[2]) for (var p = s.getMaskTemplate.call(this, !1, 1, void 0, !0), h = t + 1; h < e.length; h++) e[h] = p[h], \n delete r.validPositions[h];\n }\n var m = n, y = _(e.join(\"\"), a.inputFormat, a);\n return m && !isNaN(y.date.getTime()) && (a.prefillYear && (m = function(e, t, i) {\n if (e.year !== e.rawyear) {\n var n = v.toString(), a = e.rawyear.replace(/[^0-9]/g, \"\"), r = n.slice(0, a.length), o = n.slice(a.length);\n if (2 === a.length && a === r) {\n var s = new Date(v, e.month - 1, e.day);\n e.day == s.getDate() && (!i.max || i.max.date.getTime() >= s.getTime()) && (e.date.setFullYear(v), \n e.year = n, t.insert = [ {\n pos: t.pos + 1,\n c: o[0]\n }, {\n pos: t.pos + 2,\n c: o[1]\n } ]);\n }\n }\n return t;\n }(y, m, a)), m = function(e, t, i, n, a) {\n if (!t) return t;\n if (t && i.min && !isNaN(i.min.date.getTime())) {\n var r;\n for (e.reset(), P(i).lastIndex = 0; r = P(i).exec(i.inputFormat); ) {\n var o;\n if ((o = x(r)) && o[3]) {\n for (var s = o[1], l = e[o[2]], c = i.min[o[2]], u = i.max ? i.max[o[2]] : c, f = [], d = !1, p = 0; p < c.length; p++) void 0 !== n.validPositions[p + r.index] || d ? (f[p] = l[p], \n d = d || l[p] > c[p]) : (f[p] = c[p], \"year\" === o[2] && l.length - 1 == p && c != u && (f = (parseInt(f.join(\"\")) + 1).toString().split(\"\")), \n \"ampm\" === o[2] && c != u && i.min.date.getTime() > e.date.getTime() && (f[p] = u[p]));\n s.call(e._date, f.join(\"\"));\n }\n }\n t = i.min.date.getTime() <= e.date.getTime(), e.reInit();\n }\n return t && i.max && (isNaN(i.max.date.getTime()) || (t = i.max.date.getTime() >= e.date.getTime())), \n t;\n }(y, m = w.call(this, y, m, a), a, r)), void 0 !== t && m && n.pos !== t ? {\n buffer: S(a.inputFormat, y, a).split(\"\"),\n refreshFromBuffer: {\n start: t,\n end: n.pos\n },\n pos: n.caret || n.pos\n } : m;\n },\n onKeyDown: function(e, t, i, n) {\n e.ctrlKey && e.key === a.keys.ArrowRight && (this.inputmask._valueSet(O(new Date, n)), \n p(this).trigger(\"setvalue\"));\n },\n onUnMask: function(e, t, i) {\n return t ? S(i.outputFormat, _(e, i.inputFormat, i), i, !0) : t;\n },\n casing: function(e, t, i, n) {\n return 0 == t.nativeDef.indexOf(\"[ap]\") ? e.toLowerCase() : 0 == t.nativeDef.indexOf(\"[AP]\") ? e.toUpperCase() : e;\n },\n onBeforeMask: function(e, t) {\n return \"[object Date]\" === Object.prototype.toString.call(e) && (e = O(e, t)), e;\n },\n insertMode: !1,\n insertModeVisual: !1,\n shiftPositions: !1,\n keepStatic: !1,\n inputmode: \"numeric\",\n prefillYear: !0\n }\n });\n },\n 3851: function(e, t, i) {\n var n, a = (n = i(2394)) && n.__esModule ? n : {\n default: n\n }, r = i(8711), o = i(4713);\n a.default.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n casing: \"upper\"\n }\n });\n var s = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\n function l(e, t, i, n, a) {\n return i - 1 > -1 && \".\" !== t.buffer[i - 1] ? (e = t.buffer[i - 1] + e, e = i - 2 > -1 && \".\" !== t.buffer[i - 2] ? t.buffer[i - 2] + e : \"0\" + e) : e = \"00\" + e, \n s.test(e);\n }\n a.default.extendAliases({\n cssunit: {\n regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n },\n url: {\n regex: \"(https?|ftp)://.*\",\n autoUnmask: !1,\n keepStatic: !1,\n tabThrough: !0\n },\n ip: {\n mask: \"i{1,3}.j{1,3}.k{1,3}.l{1,3}\",\n definitions: {\n i: {\n validator: l\n },\n j: {\n validator: l\n },\n k: {\n validator: l\n },\n l: {\n validator: l\n }\n },\n onUnMask: function(e, t, i) {\n return e;\n },\n inputmode: \"decimal\",\n substitutes: {\n \",\": \".\"\n }\n },\n email: {\n mask: function(e) {\n var t = e.separator, i = e.quantifier, n = \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\", a = n;\n if (t) for (var r = 0; r < i; r++) a += \"[\".concat(t).concat(n, \"]\");\n return a;\n },\n greedy: !1,\n casing: \"lower\",\n separator: null,\n quantifier: 5,\n skipOptionalPartCharacter: \"\",\n onBeforePaste: function(e, t) {\n return (e = e.toLowerCase()).replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\"\n }\n },\n onUnMask: function(e, t, i) {\n return e;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n },\n ssn: {\n mask: \"999-99-9999\",\n postValidation: function(e, t, i, n, a, s, l) {\n var c = o.getMaskTemplate.call(this, !0, r.getLastValidPosition.call(this), !0, !0);\n return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(c.join(\"\"));\n }\n }\n });\n },\n 207: function(e, t, i) {\n var n = s(i(2394)), a = s(i(7184)), r = i(8711), o = i(2839);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = n.default.dependencyLib;\n function c(e, t) {\n for (var i = \"\", a = 0; a < e.length; a++) n.default.prototype.definitions[e.charAt(a)] || t.definitions[e.charAt(a)] || t.optionalmarker[0] === e.charAt(a) || t.optionalmarker[1] === e.charAt(a) || t.quantifiermarker[0] === e.charAt(a) || t.quantifiermarker[1] === e.charAt(a) || t.groupmarker[0] === e.charAt(a) || t.groupmarker[1] === e.charAt(a) || t.alternatormarker === e.charAt(a) ? i += \"\\\\\" + e.charAt(a) : i += e.charAt(a);\n return i;\n }\n function u(e, t, i, n) {\n if (e.length > 0 && t > 0 && (!i.digitsOptional || n)) {\n var a = e.indexOf(i.radixPoint), r = !1;\n i.negationSymbol.back === e[e.length - 1] && (r = !0, e.length--), -1 === a && (e.push(i.radixPoint), \n a = e.length - 1);\n for (var o = 1; o <= t; o++) isFinite(e[a + o]) || (e[a + o] = \"0\");\n }\n return r && e.push(i.negationSymbol.back), e;\n }\n function f(e, t) {\n var i = 0;\n for (var n in \"+\" === e && (i = r.seekNext.call(this, t.validPositions.length - 1)), \n t.tests) if ((n = parseInt(n)) >= i) for (var a = 0, o = t.tests[n].length; a < o; a++) if ((void 0 === t.validPositions[n] || \"-\" === e) && t.tests[n][a].match.def === e) return n + (void 0 !== t.validPositions[n] && \"-\" !== e ? 1 : 0);\n return i;\n }\n function d(e, t) {\n for (var i = -1, n = 0, a = t.validPositions.length; n < a; n++) {\n var r = t.validPositions[n];\n if (r && r.match.def === e) {\n i = n;\n break;\n }\n }\n return i;\n }\n function p(e, t, i, n, a) {\n var r = t.buffer ? t.buffer.indexOf(a.radixPoint) : -1, o = (-1 !== r || n && a.jitMasking) && new RegExp(a.definitions[9].validator).test(e);\n return a._radixDance && -1 !== r && o && null == t.validPositions[r] ? {\n insert: {\n pos: r === i ? r + 1 : r,\n c: a.radixPoint\n },\n pos: i\n } : o;\n }\n n.default.extendAliases({\n numeric: {\n mask: function(e) {\n e.repeat = 0, e.groupSeparator === e.radixPoint && e.digits && \"0\" !== e.digits && (\".\" === e.radixPoint ? e.groupSeparator = \",\" : \",\" === e.radixPoint ? e.groupSeparator = \".\" : e.groupSeparator = \"\"), \n \" \" === e.groupSeparator && (e.skipOptionalPartCharacter = void 0), e.placeholder.length > 1 && (e.placeholder = e.placeholder.charAt(0)), \n \"radixFocus\" === e.positionCaretOnClick && \"\" === e.placeholder && (e.positionCaretOnClick = \"lvp\");\n var t = \"0\", i = e.radixPoint;\n !0 === e.numericInput && void 0 === e.__financeInput ? (t = \"1\", e.positionCaretOnClick = \"radixFocus\" === e.positionCaretOnClick ? \"lvp\" : e.positionCaretOnClick, \n e.digitsOptional = !1, isNaN(e.digits) && (e.digits = 2), e._radixDance = !1, i = \",\" === e.radixPoint ? \"?\" : \"!\", \n \"\" !== e.radixPoint && void 0 === e.definitions[i] && (e.definitions[i] = {}, e.definitions[i].validator = \"[\" + e.radixPoint + \"]\", \n e.definitions[i].placeholder = e.radixPoint, e.definitions[i].static = !0, e.definitions[i].generated = !0)) : (e.__financeInput = !1, \n e.numericInput = !0);\n var n, r = \"[+]\";\n if (r += c(e.prefix, e), \"\" !== e.groupSeparator ? (void 0 === e.definitions[e.groupSeparator] && (e.definitions[e.groupSeparator] = {}, \n e.definitions[e.groupSeparator].validator = \"[\" + e.groupSeparator + \"]\", e.definitions[e.groupSeparator].placeholder = e.groupSeparator, \n e.definitions[e.groupSeparator].static = !0, e.definitions[e.groupSeparator].generated = !0), \n r += e._mask(e)) : r += \"9{+}\", void 0 !== e.digits && 0 !== e.digits) {\n var o = e.digits.toString().split(\",\");\n isFinite(o[0]) && o[1] && isFinite(o[1]) ? r += i + t + \"{\" + e.digits + \"}\" : (isNaN(e.digits) || parseInt(e.digits) > 0) && (e.digitsOptional || e.jitMasking ? (n = r + i + t + \"{0,\" + e.digits + \"}\", \n e.keepStatic = !0) : r += i + t + \"{\" + e.digits + \"}\");\n } else e.inputmode = \"numeric\";\n return r += c(e.suffix, e), r += \"[-]\", n && (r = [ n + c(e.suffix, e) + \"[-]\", r ]), \n e.greedy = !1, function(e) {\n void 0 === e.parseMinMaxOptions && (null !== e.min && (e.min = e.min.toString().replace(new RegExp((0, \n a.default)(e.groupSeparator), \"g\"), \"\"), \",\" === e.radixPoint && (e.min = e.min.replace(e.radixPoint, \".\")), \n e.min = isFinite(e.min) ? parseFloat(e.min) : NaN, isNaN(e.min) && (e.min = Number.MIN_VALUE)), \n null !== e.max && (e.max = e.max.toString().replace(new RegExp((0, a.default)(e.groupSeparator), \"g\"), \"\"), \n \",\" === e.radixPoint && (e.max = e.max.replace(e.radixPoint, \".\")), e.max = isFinite(e.max) ? parseFloat(e.max) : NaN, \n isNaN(e.max) && (e.max = Number.MAX_VALUE)), e.parseMinMaxOptions = \"done\");\n }(e), \"\" !== e.radixPoint && e.substituteRadixPoint && (e.substitutes[\".\" == e.radixPoint ? \",\" : \".\"] = e.radixPoint), \n r;\n },\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"999){+|1}\";\n },\n digits: \"*\",\n digitsOptional: !0,\n enforceDigitsOnBlur: !1,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n _radixDance: !0,\n groupSeparator: \"\",\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n prefix: \"\",\n suffix: \"\",\n min: null,\n max: null,\n SetMaxOnOverflow: !1,\n step: 1,\n inputType: \"text\",\n unmaskAsNumber: !1,\n roundingFN: Math.round,\n inputmode: \"decimal\",\n shortcuts: {\n k: \"1000\",\n m: \"1000000\"\n },\n placeholder: \"0\",\n greedy: !1,\n rightAlign: !0,\n insertMode: !0,\n autoUnmask: !1,\n skipOptionalPartCharacter: \"\",\n usePrototypeDefinitions: !1,\n stripLeadingZeroes: !0,\n substituteRadixPoint: !0,\n definitions: {\n 0: {\n validator: p\n },\n 1: {\n validator: p,\n definitionSymbol: \"9\"\n },\n 9: {\n validator: \"[0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]\",\n definitionSymbol: \"*\"\n },\n \"+\": {\n validator: function(e, t, i, n, a) {\n return a.allowMinus && (\"-\" === e || e === a.negationSymbol.front);\n }\n },\n \"-\": {\n validator: function(e, t, i, n, a) {\n return a.allowMinus && e === a.negationSymbol.back;\n }\n }\n },\n preValidation: function(e, t, i, n, a, r, o, s) {\n if (!1 !== a.__financeInput && i === a.radixPoint) return !1;\n var l = e.indexOf(a.radixPoint), c = t;\n if (t = function(e, t, i, n, a) {\n return a._radixDance && a.numericInput && t !== a.negationSymbol.back && e <= i && (i > 0 || t == a.radixPoint) && (void 0 === n.validPositions[e - 1] || n.validPositions[e - 1].input !== a.negationSymbol.back) && (e -= 1), \n e;\n }(t, i, l, r, a), \"-\" === i || i === a.negationSymbol.front) {\n if (!0 !== a.allowMinus) return !1;\n var u = !1, p = d(\"+\", r), h = d(\"-\", r);\n return -1 !== p && (u = [ p, h ]), !1 !== u ? {\n remove: u,\n caret: c - a.negationSymbol.back.length\n } : {\n insert: [ {\n pos: f.call(this, \"+\", r),\n c: a.negationSymbol.front,\n fromIsValid: !0\n }, {\n pos: f.call(this, \"-\", r),\n c: a.negationSymbol.back,\n fromIsValid: void 0\n } ],\n caret: c + a.negationSymbol.back.length\n };\n }\n if (i === a.groupSeparator) return {\n caret: c\n };\n if (s) return !0;\n if (-1 !== l && !0 === a._radixDance && !1 === n && i === a.radixPoint && void 0 !== a.digits && (isNaN(a.digits) || parseInt(a.digits) > 0) && l !== t) return {\n caret: a._radixDance && t === l - 1 ? l + 1 : l\n };\n if (!1 === a.__financeInput) if (n) {\n if (a.digitsOptional) return {\n rewritePosition: o.end\n };\n if (!a.digitsOptional) {\n if (o.begin > l && o.end <= l) return i === a.radixPoint ? {\n insert: {\n pos: l + 1,\n c: \"0\",\n fromIsValid: !0\n },\n rewritePosition: l\n } : {\n rewritePosition: l + 1\n };\n if (o.begin < l) return {\n rewritePosition: o.begin - 1\n };\n }\n } else if (!a.showMaskOnHover && !a.showMaskOnFocus && !a.digitsOptional && a.digits > 0 && \"\" === this.__valueGet.call(this.el)) return {\n rewritePosition: l\n };\n return {\n rewritePosition: t\n };\n },\n postValidation: function(e, t, i, n, a, r, o) {\n if (!1 === n) return n;\n if (o) return !0;\n if (null !== a.min || null !== a.max) {\n var s = a.onUnMask(e.slice().reverse().join(\"\"), void 0, l.extend({}, a, {\n unmaskAsNumber: !0\n }));\n if (null !== a.min && s < a.min && (s.toString().length > a.min.toString().length || s < 0)) return !1;\n if (null !== a.max && s > a.max) return !!a.SetMaxOnOverflow && {\n refreshFromBuffer: !0,\n buffer: u(a.max.toString().replace(\".\", a.radixPoint).split(\"\"), a.digits, a).reverse()\n };\n }\n return n;\n },\n onUnMask: function(e, t, i) {\n if (\"\" === t && !0 === i.nullable) return t;\n var n = e.replace(i.prefix, \"\");\n return n = (n = n.replace(i.suffix, \"\")).replace(new RegExp((0, a.default)(i.groupSeparator), \"g\"), \"\"), \n \"\" !== i.placeholder.charAt(0) && (n = n.replace(new RegExp(i.placeholder.charAt(0), \"g\"), \"0\")), \n i.unmaskAsNumber ? (\"\" !== i.radixPoint && -1 !== n.indexOf(i.radixPoint) && (n = n.replace(a.default.call(this, i.radixPoint), \".\")), \n n = (n = n.replace(new RegExp(\"^\" + (0, a.default)(i.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n a.default)(i.negationSymbol.back) + \"$\"), \"\"), Number(n)) : n;\n },\n isComplete: function(e, t) {\n var i = (t.numericInput ? e.slice().reverse() : e).join(\"\");\n return i = (i = (i = (i = (i = i.replace(new RegExp(\"^\" + (0, a.default)(t.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n a.default)(t.negationSymbol.back) + \"$\"), \"\")).replace(t.prefix, \"\")).replace(t.suffix, \"\")).replace(new RegExp((0, \n a.default)(t.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"), \",\" === t.radixPoint && (i = i.replace((0, \n a.default)(t.radixPoint), \".\")), isFinite(i);\n },\n onBeforeMask: function(e, t) {\n var i = t.radixPoint || \",\";\n isFinite(t.digits) && (t.digits = parseInt(t.digits)), \"number\" != typeof e && \"number\" !== t.inputType || \"\" === i || (e = e.toString().replace(\".\", i));\n var n = \"-\" === e.charAt(0) || e.charAt(0) === t.negationSymbol.front, r = e.split(i), o = r[0].replace(/[^\\-0-9]/g, \"\"), s = r.length > 1 ? r[1].replace(/[^0-9]/g, \"\") : \"\", l = r.length > 1;\n e = o + (\"\" !== s ? i + s : s);\n var c = 0;\n if (\"\" !== i && (c = t.digitsOptional ? t.digits < s.length ? t.digits : s.length : t.digits, \n \"\" !== s || !t.digitsOptional)) {\n var f = Math.pow(10, c || 1);\n e = e.replace((0, a.default)(i), \".\"), isNaN(parseFloat(e)) || (e = (t.roundingFN(parseFloat(e) * f) / f).toFixed(c)), \n e = e.toString().replace(\".\", i);\n }\n if (0 === t.digits && -1 !== e.indexOf(i) && (e = e.substring(0, e.indexOf(i))), \n null !== t.min || null !== t.max) {\n var d = e.toString().replace(i, \".\");\n null !== t.min && d < t.min ? e = t.min.toString().replace(\".\", i) : null !== t.max && d > t.max && (e = t.max.toString().replace(\".\", i));\n }\n return n && \"-\" !== e.charAt(0) && (e = \"-\" + e), u(e.toString().split(\"\"), c, t, l).join(\"\");\n },\n onBeforeWrite: function(e, t, i, n) {\n function r(e, t) {\n if (!1 !== n.__financeInput || t) {\n var i = e.indexOf(n.radixPoint);\n -1 !== i && e.splice(i, 1);\n }\n if (\"\" !== n.groupSeparator) for (;-1 !== (i = e.indexOf(n.groupSeparator)); ) e.splice(i, 1);\n return e;\n }\n var o, s;\n if (n.stripLeadingZeroes && (s = function(e, t) {\n var i = new RegExp(\"(^\" + (\"\" !== t.negationSymbol.front ? (0, a.default)(t.negationSymbol.front) + \"?\" : \"\") + (0, \n a.default)(t.prefix) + \")(.*)(\" + (0, a.default)(t.suffix) + (\"\" != t.negationSymbol.back ? (0, \n a.default)(t.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(e.slice().reverse().join(\"\")), n = i ? i[2] : \"\", r = !1;\n return n && (n = n.split(t.radixPoint.charAt(0))[0], r = new RegExp(\"^[0\" + t.groupSeparator + \"]*\").exec(n)), \n !(!r || !(r[0].length > 1 || r[0].length > 0 && r[0].length < n.length)) && r;\n }(t, n))) for (var c = t.join(\"\").lastIndexOf(s[0].split(\"\").reverse().join(\"\")) - (s[0] == s.input ? 0 : 1), f = s[0] == s.input ? 1 : 0, d = s[0].length - f; d > 0; d--) delete this.maskset.validPositions[c + d], \n delete t[c + d];\n if (e) switch (e.type) {\n case \"blur\":\n case \"checkval\":\n if (null !== n.min) {\n var p = n.onUnMask(t.slice().reverse().join(\"\"), void 0, l.extend({}, n, {\n unmaskAsNumber: !0\n }));\n if (null !== n.min && p < n.min) return {\n refreshFromBuffer: !0,\n buffer: u(n.min.toString().replace(\".\", n.radixPoint).split(\"\"), n.digits, n).reverse()\n };\n }\n if (t[t.length - 1] === n.negationSymbol.front) {\n var h = new RegExp(\"(^\" + (\"\" != n.negationSymbol.front ? (0, a.default)(n.negationSymbol.front) + \"?\" : \"\") + (0, \n a.default)(n.prefix) + \")(.*)(\" + (0, a.default)(n.suffix) + (\"\" != n.negationSymbol.back ? (0, \n a.default)(n.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(r(t.slice(), !0).reverse().join(\"\"));\n 0 == (h ? h[2] : \"\") && (o = {\n refreshFromBuffer: !0,\n buffer: [ 0 ]\n });\n } else if (\"\" !== n.radixPoint) {\n t.indexOf(n.radixPoint) === n.suffix.length && (o && o.buffer ? o.buffer.splice(0, 1 + n.suffix.length) : (t.splice(0, 1 + n.suffix.length), \n o = {\n refreshFromBuffer: !0,\n buffer: r(t)\n }));\n }\n if (n.enforceDigitsOnBlur) {\n var v = (o = o || {}) && o.buffer || t.slice().reverse();\n o.refreshFromBuffer = !0, o.buffer = u(v, n.digits, n, !0).reverse();\n }\n }\n return o;\n },\n onKeyDown: function(e, t, i, n) {\n var a, r = l(this);\n if (3 != e.location) {\n var s, c = e.key;\n if ((s = n.shortcuts && n.shortcuts[c]) && s.length > 1) return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) * parseInt(s)), \n r.trigger(\"setvalue\"), !1;\n }\n if (e.ctrlKey) switch (e.key) {\n case o.keys.ArrowUp:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(n.step)), \n r.trigger(\"setvalue\"), !1;\n\n case o.keys.ArrowDown:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(n.step)), \n r.trigger(\"setvalue\"), !1;\n }\n if (!e.shiftKey && (e.key === o.keys.Delete || e.key === o.keys.Backspace || e.key === o.keys.BACKSPACE_SAFARI) && i.begin !== t.length) {\n if (t[e.key === o.keys.Delete ? i.begin - 1 : i.end] === n.negationSymbol.front) return a = t.slice().reverse(), \n \"\" !== n.negationSymbol.front && a.shift(), \"\" !== n.negationSymbol.back && a.pop(), \n r.trigger(\"setvalue\", [ a.join(\"\"), i.begin ]), !1;\n if (!0 === n._radixDance) {\n var f = t.indexOf(n.radixPoint);\n if (n.digitsOptional) {\n if (0 === f) return (a = t.slice().reverse()).pop(), r.trigger(\"setvalue\", [ a.join(\"\"), i.begin >= a.length ? a.length : i.begin ]), \n !1;\n } else if (-1 !== f && (i.begin < f || i.end < f || e.key === o.keys.Delete && (i.begin === f || i.begin - 1 === f))) {\n var d = void 0;\n return i.begin === i.end && (e.key === o.keys.Backspace || e.key === o.keys.BACKSPACE_SAFARI ? i.begin++ : e.key === o.keys.Delete && i.begin - 1 === f && (d = l.extend({}, i), \n i.begin--, i.end--)), (a = t.slice().reverse()).splice(a.length - i.begin, i.begin - i.end + 1), \n a = u(a, n.digits, n).join(\"\"), d && (i = d), r.trigger(\"setvalue\", [ a, i.begin >= a.length ? f + 1 : i.begin ]), \n !1;\n }\n }\n }\n }\n },\n currency: {\n prefix: \"\",\n groupSeparator: \",\",\n alias: \"numeric\",\n digits: 2,\n digitsOptional: !1\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n inputmode: \"numeric\",\n digits: 0\n },\n percentage: {\n alias: \"numeric\",\n min: 0,\n max: 100,\n suffix: \" %\",\n digits: 0,\n allowMinus: !1\n },\n indianns: {\n alias: \"numeric\",\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"99){*|1}(\" + e.groupSeparator + \"999){1|1}\";\n },\n groupSeparator: \",\",\n radixPoint: \".\",\n placeholder: \"0\",\n digits: 2,\n digitsOptional: !1\n }\n });\n },\n 9380: function(e, t, i) {\n var n;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var a = ((n = i(8741)) && n.__esModule ? n : {\n default: n\n }).default ? window : {};\n t.default = a;\n },\n 7760: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.HandleNativePlaceholder = function(e, t) {\n var i = e ? e.inputmask : this;\n if (s.ie) {\n if (e.inputmask._valueGet() !== t && (e.placeholder !== t || \"\" === e.placeholder)) {\n var n = r.getBuffer.call(i).slice(), a = e.inputmask._valueGet();\n if (a !== t) {\n var o = r.getLastValidPosition.call(i);\n -1 === o && a === r.getBufferTemplate.call(i).join(\"\") ? n = [] : -1 !== o && u.call(i, n), \n d(e, n);\n }\n }\n } else e.placeholder !== t && (e.placeholder = t, \"\" === e.placeholder && e.removeAttribute(\"placeholder\"));\n }, t.applyInputValue = c, t.checkVal = f, t.clearOptionalTail = u, t.unmaskedvalue = function(e) {\n var t = e ? e.inputmask : this, i = t.opts, n = t.maskset;\n if (e) {\n if (void 0 === e.inputmask) return e.value;\n e.inputmask && e.inputmask.refreshValue && c(e, e.inputmask._valueGet(!0));\n }\n for (var a = [], o = n.validPositions, s = 0, l = o.length; s < l; s++) o[s] && o[s].match && (1 != o[s].match.static || Array.isArray(n.metadata) && !0 !== o[s].generatedInput) && a.push(o[s].input);\n var u = 0 === a.length ? \"\" : (t.isRTL ? a.reverse() : a).join(\"\");\n if (\"function\" == typeof i.onUnMask) {\n var f = (t.isRTL ? r.getBuffer.call(t).slice().reverse() : r.getBuffer.call(t)).join(\"\");\n u = i.onUnMask.call(t, f, u, i);\n }\n return u;\n }, t.writeBuffer = d;\n var n = i(2839), a = i(4713), r = i(8711), o = i(7215), s = i(9845), l = i(6030);\n function c(e, t) {\n var i = e ? e.inputmask : this, n = i.opts;\n e.inputmask.refreshValue = !1, \"function\" == typeof n.onBeforeMask && (t = n.onBeforeMask.call(i, t, n) || t), \n f(e, !0, !1, t = (t || \"\").toString().split(\"\")), i.undoValue = i._valueGet(!0), \n (n.clearMaskOnLostFocus || n.clearIncomplete) && e.inputmask._valueGet() === r.getBufferTemplate.call(i).join(\"\") && -1 === r.getLastValidPosition.call(i) && e.inputmask._valueSet(\"\");\n }\n function u(e) {\n e.length = 0;\n for (var t, i = a.getMaskTemplate.call(this, !0, 0, !0, void 0, !0); void 0 !== (t = i.shift()); ) e.push(t);\n return e;\n }\n function f(e, t, i, n, s) {\n var c = e ? e.inputmask : this, u = c.maskset, f = c.opts, p = c.dependencyLib, h = n.slice(), v = \"\", m = -1, g = void 0, y = f.skipOptionalPartCharacter;\n f.skipOptionalPartCharacter = \"\", r.resetMaskSet.call(c), u.tests = {}, m = f.radixPoint ? r.determineNewCaretPosition.call(c, {\n begin: 0,\n end: 0\n }, !1, !1 === f.__financeInput ? \"radixFocus\" : void 0).begin : 0, u.p = m, c.caretPos = {\n begin: m\n };\n var k = [], b = c.caretPos;\n if (h.forEach((function(e, t) {\n if (void 0 !== e) {\n var n = new p.Event(\"_checkval\");\n n.key = e, v += e;\n var o = r.getLastValidPosition.call(c, void 0, !0);\n !function(e, t) {\n for (var i = a.getMaskTemplate.call(c, !0, 0).slice(e, r.seekNext.call(c, e, !1, !1)).join(\"\").replace(/'/g, \"\"), n = i.indexOf(t); n > 0 && \" \" === i[n - 1]; ) n--;\n var o = 0 === n && !r.isMask.call(c, e) && (a.getTest.call(c, e).match.nativeDef === t.charAt(0) || !0 === a.getTest.call(c, e).match.static && a.getTest.call(c, e).match.nativeDef === \"'\" + t.charAt(0) || \" \" === a.getTest.call(c, e).match.nativeDef && (a.getTest.call(c, e + 1).match.nativeDef === t.charAt(0) || !0 === a.getTest.call(c, e + 1).match.static && a.getTest.call(c, e + 1).match.nativeDef === \"'\" + t.charAt(0)));\n if (!o && n > 0 && !r.isMask.call(c, e, !1, !0)) {\n var s = r.seekNext.call(c, e);\n c.caretPos.begin < s && (c.caretPos = {\n begin: s\n });\n }\n return o;\n }(m, v) ? (g = l.EventHandlers.keypressEvent.call(c, n, !0, !1, i, c.caretPos.begin)) && (m = c.caretPos.begin + 1, \n v = \"\") : g = l.EventHandlers.keypressEvent.call(c, n, !0, !1, i, o + 1), g ? (void 0 !== g.pos && u.validPositions[g.pos] && !0 === u.validPositions[g.pos].match.static && void 0 === u.validPositions[g.pos].alternation && (k.push(g.pos), \n c.isRTL || (g.forwardPosition = g.pos + 1)), d.call(c, void 0, r.getBuffer.call(c), g.forwardPosition, n, !1), \n c.caretPos = {\n begin: g.forwardPosition,\n end: g.forwardPosition\n }, b = c.caretPos) : void 0 === u.validPositions[t] && h[t] === a.getPlaceholder.call(c, t) && r.isMask.call(c, t, !0) ? c.caretPos.begin++ : c.caretPos = b;\n }\n })), k.length > 0) {\n var x, P, w = r.seekNext.call(c, -1, void 0, !1);\n if (!o.isComplete.call(c, r.getBuffer.call(c)) && k.length <= w || o.isComplete.call(c, r.getBuffer.call(c)) && k.length > 0 && k.length !== w && 0 === k[0]) for (var S = w; void 0 !== (x = k.shift()); ) {\n var M = new p.Event(\"_checkval\");\n if ((P = u.validPositions[x]).generatedInput = !0, M.key = P.input, (g = l.EventHandlers.keypressEvent.call(c, M, !0, !1, i, S)) && void 0 !== g.pos && g.pos !== x && u.validPositions[g.pos] && !0 === u.validPositions[g.pos].match.static) k.push(g.pos); else if (!g) break;\n S++;\n }\n }\n t && d.call(c, e, r.getBuffer.call(c), g ? g.forwardPosition : c.caretPos.begin, s || new p.Event(\"checkval\"), s && (\"input\" === s.type && c.undoValue !== r.getBuffer.call(c).join(\"\") || \"paste\" === s.type)), \n f.skipOptionalPartCharacter = y;\n }\n function d(e, t, i, a, s) {\n var l = e ? e.inputmask : this, c = l.opts, u = l.dependencyLib;\n if (a && \"function\" == typeof c.onBeforeWrite) {\n var f = c.onBeforeWrite.call(l, a, t, i, c);\n if (f) {\n if (f.refreshFromBuffer) {\n var d = f.refreshFromBuffer;\n o.refreshFromBuffer.call(l, !0 === d ? d : d.start, d.end, f.buffer || t), t = r.getBuffer.call(l, !0);\n }\n void 0 !== i && (i = void 0 !== f.caret ? f.caret : i);\n }\n }\n if (void 0 !== e && (e.inputmask._valueSet(t.join(\"\")), void 0 === i || void 0 !== a && \"blur\" === a.type || r.caret.call(l, e, i, void 0, void 0, void 0 !== a && \"keydown\" === a.type && (a.key === n.keys.Delete || a.key === n.keys.Backspace)), \n !0 === s)) {\n var p = u(e), h = e.inputmask._valueGet();\n e.inputmask.skipInputEvent = !0, p.trigger(\"input\"), setTimeout((function() {\n h === r.getBufferTemplate.call(l).join(\"\") ? p.trigger(\"cleared\") : !0 === o.isComplete.call(l, t) && p.trigger(\"complete\");\n }), 0);\n }\n }\n },\n 2394: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var n = i(157), a = m(i(4963)), r = m(i(9380)), o = i(2391), s = i(4713), l = i(8711), c = i(7215), u = i(7760), f = i(9716), d = m(i(7392)), p = m(i(3976)), h = m(i(8741));\n function v(e) {\n return v = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, v(e);\n }\n function m(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var g = r.default.document, y = \"_inputmask_opts\";\n function k(e, t, i) {\n if (h.default) {\n if (!(this instanceof k)) return new k(e, t, i);\n this.dependencyLib = a.default, this.el = void 0, this.events = {}, this.maskset = void 0, \n !0 !== i && (\"[object Object]\" === Object.prototype.toString.call(e) ? t = e : (t = t || {}, \n e && (t.alias = e)), this.opts = a.default.extend(!0, {}, this.defaults, t), this.noMasksCache = t && void 0 !== t.definitions, \n this.userOptions = t || {}, b(this.opts.alias, t, this.opts)), this.refreshValue = !1, \n this.undoValue = void 0, this.$el = void 0, this.skipInputEvent = !1, this.validationEvent = !1, \n this.ignorable = !1, this.maxLength, this.mouseEnter = !1, this.clicked = 0, this.originalPlaceholder = void 0, \n this.isComposing = !1, this.hasAlternator = !1;\n }\n }\n function b(e, t, i) {\n var n = k.prototype.aliases[e];\n return n ? (n.alias && b(n.alias, void 0, i), a.default.extend(!0, i, n), a.default.extend(!0, i, t), \n !0) : (null === i.mask && (i.mask = e), !1);\n }\n k.prototype = {\n dataAttribute: \"data-inputmask\",\n defaults: p.default,\n definitions: d.default,\n aliases: {},\n masksCache: {},\n get isRTL() {\n return this.opts.isRTL || this.opts.numericInput;\n },\n mask: function(e) {\n var t = this;\n return \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), \n (e = e.nodeName ? [ e ] : Array.isArray(e) ? e : [].slice.call(e)).forEach((function(e, i) {\n var s = a.default.extend(!0, {}, t.opts);\n if (function(e, t, i, n) {\n function o(t, a) {\n var o = \"\" === n ? t : n + \"-\" + t;\n null !== (a = void 0 !== a ? a : e.getAttribute(o)) && (\"string\" == typeof a && (0 === t.indexOf(\"on\") ? a = r.default[a] : \"false\" === a ? a = !1 : \"true\" === a && (a = !0)), \n i[t] = a);\n }\n if (!0 === t.importDataAttributes) {\n var s, l, c, u, f = e.getAttribute(n);\n if (f && \"\" !== f && (f = f.replace(/'/g, '\"'), l = JSON.parse(\"{\" + f + \"}\")), \n l) for (u in c = void 0, l) if (\"alias\" === u.toLowerCase()) {\n c = l[u];\n break;\n }\n for (s in o(\"alias\", c), i.alias && b(i.alias, i, t), t) {\n if (l) for (u in c = void 0, l) if (u.toLowerCase() === s.toLowerCase()) {\n c = l[u];\n break;\n }\n o(s, c);\n }\n }\n a.default.extend(!0, t, i), (\"rtl\" === e.dir || t.rightAlign) && (e.style.textAlign = \"right\");\n (\"rtl\" === e.dir || t.numericInput) && (e.dir = \"ltr\", e.removeAttribute(\"dir\"), \n t.isRTL = !0);\n return Object.keys(i).length;\n }(e, s, a.default.extend(!0, {}, t.userOptions), t.dataAttribute)) {\n var l = (0, o.generateMaskSet)(s, t.noMasksCache);\n void 0 !== l && (void 0 !== e.inputmask && (e.inputmask.opts.autoUnmask = !0, e.inputmask.remove()), \n e.inputmask = new k(void 0, void 0, !0), e.inputmask.opts = s, e.inputmask.noMasksCache = t.noMasksCache, \n e.inputmask.userOptions = a.default.extend(!0, {}, t.userOptions), e.inputmask.el = e, \n e.inputmask.$el = (0, a.default)(e), e.inputmask.maskset = l, a.default.data(e, y, t.userOptions), \n n.mask.call(e.inputmask));\n }\n })), e && e[0] && e[0].inputmask || this;\n },\n option: function(e, t) {\n return \"string\" == typeof e ? this.opts[e] : \"object\" === v(e) ? (a.default.extend(this.userOptions, e), \n this.el && !0 !== t && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n void 0 === this.el || void 0 !== e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n u.checkVal.call(this, void 0, !1, !1, t), \"function\" == typeof this.opts.onBeforeWrite && this.opts.onBeforeWrite.call(this, void 0, l.getBuffer.call(this), 0, this.opts);\n }\n return u.unmaskedvalue.call(this, this.el);\n },\n remove: function() {\n if (this.el) {\n a.default.data(this.el, y, null);\n var e = this.opts.autoUnmask ? (0, u.unmaskedvalue)(this.el) : this._valueGet(this.opts.autoUnmask);\n e !== l.getBufferTemplate.call(this).join(\"\") ? this._valueSet(e, this.opts.autoUnmask) : this._valueSet(\"\"), \n f.EventRuler.off(this.el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el), \"value\") && this.__valueGet && Object.defineProperty(this.el, \"value\", {\n get: this.__valueGet,\n set: this.__valueSet,\n configurable: !0\n }) : g.__lookupGetter__ && this.el.__lookupGetter__(\"value\") && this.__valueGet && (this.el.__defineGetter__(\"value\", this.__valueGet), \n this.el.__defineSetter__(\"value\", this.__valueSet)), this.el.inputmask = void 0;\n }\n return this.el;\n },\n getemptymask: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n (this.isRTL ? l.getBufferTemplate.call(this).reverse() : l.getBufferTemplate.call(this)).join(\"\");\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n c.isComplete.call(this, l.getBuffer.call(this));\n },\n getmetadata: function() {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n Array.isArray(this.maskset.metadata)) {\n var e = s.getMaskTemplate.call(this, !0, 0, !1).join(\"\");\n return this.maskset.metadata.forEach((function(t) {\n return t.mask !== e || (e = t, !1);\n })), e;\n }\n return this.maskset.metadata;\n },\n isValid: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n u.checkVal.call(this, void 0, !0, !1, t);\n } else e = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n for (var i = l.getBuffer.call(this), n = l.determineLastRequiredPosition.call(this), a = i.length - 1; a > n && !l.isMask.call(this, a); a--) ;\n return i.splice(n, a + 1 - n), c.isComplete.call(this, i) && e === (this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\"));\n },\n format: function(e, t) {\n this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache);\n var i = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n u.checkVal.call(this, void 0, !0, !1, i);\n var n = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n return t ? {\n value: n,\n metadata: this.getmetadata()\n } : n;\n },\n setValue: function(e) {\n this.el && (0, a.default)(this.el).trigger(\"setvalue\", [ e ]);\n },\n analyseMask: o.analyseMask\n }, k.extendDefaults = function(e) {\n a.default.extend(!0, k.prototype.defaults, e);\n }, k.extendDefinitions = function(e) {\n a.default.extend(!0, k.prototype.definitions, e);\n }, k.extendAliases = function(e) {\n a.default.extend(!0, k.prototype.aliases, e);\n }, k.format = function(e, t, i) {\n return k(t).format(e, i);\n }, k.unmask = function(e, t) {\n return k(t).unmaskedvalue(e);\n }, k.isValid = function(e, t) {\n return k(t).isValid(e);\n }, k.remove = function(e) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask && e.inputmask.remove();\n }));\n }, k.setValue = function(e, t) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask ? e.inputmask.setValue(t) : (0, a.default)(e).trigger(\"setvalue\", [ t ]);\n }));\n }, k.dependencyLib = a.default, r.default.Inputmask = k;\n var x = k;\n t.default = x;\n },\n 5296: function(e, t, i) {\n function n(e) {\n return n = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, n(e);\n }\n var a = h(i(9380)), r = h(i(2394)), o = h(i(8741));\n function s(e, t) {\n for (var i = 0; i < t.length; i++) {\n var a = t[i];\n a.enumerable = a.enumerable || !1, a.configurable = !0, \"value\" in a && (a.writable = !0), \n Object.defineProperty(e, (r = a.key, o = void 0, o = function(e, t) {\n if (\"object\" !== n(e) || null === e) return e;\n var i = e[Symbol.toPrimitive];\n if (void 0 !== i) {\n var a = i.call(e, t || \"default\");\n if (\"object\" !== n(a)) return a;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === t ? String : Number)(e);\n }(r, \"string\"), \"symbol\" === n(o) ? o : String(o)), a);\n }\n var r, o;\n }\n function l(e) {\n var t = f();\n return function() {\n var i, a = p(e);\n if (t) {\n var r = p(this).constructor;\n i = Reflect.construct(a, arguments, r);\n } else i = a.apply(this, arguments);\n return function(e, t) {\n if (t && (\"object\" === n(t) || \"function\" == typeof t)) return t;\n if (void 0 !== t) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return function(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n }(e);\n }(this, i);\n };\n }\n function c(e) {\n var t = \"function\" == typeof Map ? new Map : void 0;\n return c = function(e) {\n if (null === e || (i = e, -1 === Function.toString.call(i).indexOf(\"[native code]\"))) return e;\n var i;\n if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== t) {\n if (t.has(e)) return t.get(e);\n t.set(e, n);\n }\n function n() {\n return u(e, arguments, p(this).constructor);\n }\n return n.prototype = Object.create(e.prototype, {\n constructor: {\n value: n,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), d(n, e);\n }, c(e);\n }\n function u(e, t, i) {\n return u = f() ? Reflect.construct.bind() : function(e, t, i) {\n var n = [ null ];\n n.push.apply(n, t);\n var a = new (Function.bind.apply(e, n));\n return i && d(a, i.prototype), a;\n }, u.apply(null, arguments);\n }\n function f() {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), \n !0;\n } catch (e) {\n return !1;\n }\n }\n function d(e, t) {\n return d = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {\n return e.__proto__ = t, e;\n }, d(e, t);\n }\n function p(e) {\n return p = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {\n return e.__proto__ || Object.getPrototypeOf(e);\n }, p(e);\n }\n function h(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var v = a.default.document;\n if (o.default && v && v.head && v.head.attachShadow && a.default.customElements && void 0 === a.default.customElements.get(\"input-mask\")) {\n var m = function(e) {\n !function(e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), t && d(e, t);\n }(o, e);\n var t, i, n, a = l(o);\n function o() {\n var e;\n !function(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, o);\n var t = (e = a.call(this)).getAttributeNames(), i = e.attachShadow({\n mode: \"closed\"\n }), n = v.createElement(\"input\");\n for (var s in n.type = \"text\", i.appendChild(n), t) Object.prototype.hasOwnProperty.call(t, s) && n.setAttribute(t[s], e.getAttribute(t[s]));\n var l = new r.default;\n return l.dataAttribute = \"\", l.mask(n), n.inputmask.shadowRoot = i, e;\n }\n return t = o, i && s(t.prototype, i), n && s(t, n), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), t;\n }(c(HTMLElement));\n a.default.customElements.define(\"input-mask\", m);\n }\n },\n 2839: function(e, t) {\n function i(e, t) {\n return function(e) {\n if (Array.isArray(e)) return e;\n }(e) || function(e, t) {\n var i = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (null != i) {\n var n, a, r, o, s = [], l = !0, c = !1;\n try {\n if (r = (i = i.call(e)).next, 0 === t) {\n if (Object(i) !== i) return;\n l = !1;\n } else for (;!(l = (n = r.call(i)).done) && (s.push(n.value), s.length !== t); l = !0) ;\n } catch (e) {\n c = !0, a = e;\n } finally {\n try {\n if (!l && null != i.return && (o = i.return(), Object(o) !== o)) return;\n } finally {\n if (c) throw a;\n }\n }\n return s;\n }\n }(e, t) || function(e, t) {\n if (!e) return;\n if (\"string\" == typeof e) return n(e, t);\n var i = Object.prototype.toString.call(e).slice(8, -1);\n \"Object\" === i && e.constructor && (i = e.constructor.name);\n if (\"Map\" === i || \"Set\" === i) return Array.from(e);\n if (\"Arguments\" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return n(e, t);\n }(e, t) || function() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function n(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var i = 0, n = new Array(t); i < t; i++) n[i] = e[i];\n return n;\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.keys = t.keyCode = void 0, t.toKey = function(e, t) {\n return r[e] || (t ? String.fromCharCode(e) : String.fromCharCode(e).toLowerCase());\n }, t.toKeyCode = function(e) {\n return a[e];\n };\n var a = {\n AltGraph: 18,\n ArrowDown: 40,\n ArrowLeft: 37,\n ArrowRight: 39,\n ArrowUp: 38,\n Backspace: 8,\n BACKSPACE_SAFARI: 127,\n CapsLock: 20,\n Delete: 46,\n End: 35,\n Enter: 13,\n Escape: 27,\n Home: 36,\n Insert: 45,\n PageDown: 34,\n PageUp: 33,\n Space: 32,\n Tab: 9,\n c: 67,\n x: 88,\n z: 90,\n Shift: 16,\n Control: 17,\n Alt: 18,\n Pause: 19,\n Meta_LEFT: 91,\n Meta_RIGHT: 92,\n ContextMenu: 93,\n Process: 229,\n Unidentified: 229,\n F1: 112,\n F2: 113,\n F3: 114,\n F4: 115,\n F5: 116,\n F6: 117,\n F7: 118,\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123\n };\n t.keyCode = a;\n var r = Object.entries(a).reduce((function(e, t) {\n var n = i(t, 2), a = n[0], r = n[1];\n return e[r] = void 0 === e[r] ? a : e[r], e;\n }), {}), o = Object.entries(a).reduce((function(e, t) {\n var n = i(t, 2), a = n[0];\n n[1];\n return e[a] = \"Space\" === a ? \" \" : a, e;\n }), {});\n t.keys = o;\n },\n 2391: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.analyseMask = function(e, t, i) {\n var n, o, s, l, c, u, f = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, d = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, p = !1, h = new a.default, v = [], m = [], g = !1;\n function y(e, n, a) {\n a = void 0 !== a ? a : e.matches.length;\n var o = e.matches[a - 1];\n if (t) {\n if (0 === n.indexOf(\"[\") || p && /\\\\d|\\\\s|\\\\w|\\\\p/i.test(n) || \".\" === n) {\n var s = i.casing ? \"i\" : \"\";\n /^\\\\p\\{.*}$/i.test(n) && (s += \"u\"), e.matches.splice(a++, 0, {\n fn: new RegExp(n, s),\n static: !1,\n optionality: !1,\n newBlockMarker: void 0 === o ? \"master\" : o.def !== n,\n casing: null,\n def: n,\n placeholder: void 0,\n nativeDef: n\n });\n } else p && (n = n[n.length - 1]), n.split(\"\").forEach((function(t, n) {\n o = e.matches[a - 1], e.matches.splice(a++, 0, {\n fn: /[a-z]/i.test(i.staticDefinitionSymbol || t) ? new RegExp(\"[\" + (i.staticDefinitionSymbol || t) + \"]\", i.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === o ? \"master\" : o.def !== t && !0 !== o.static,\n casing: null,\n def: i.staticDefinitionSymbol || t,\n placeholder: void 0 !== i.staticDefinitionSymbol ? t : void 0,\n nativeDef: (p ? \"'\" : \"\") + t\n });\n }));\n p = !1;\n } else {\n var l = i.definitions && i.definitions[n] || i.usePrototypeDefinitions && r.default.prototype.definitions[n];\n l && !p ? e.matches.splice(a++, 0, {\n fn: l.validator ? \"string\" == typeof l.validator ? new RegExp(l.validator, i.casing ? \"i\" : \"\") : new function() {\n this.test = l.validator;\n } : new RegExp(\".\"),\n static: l.static || !1,\n optionality: l.optional || !1,\n defOptionality: l.optional || !1,\n newBlockMarker: void 0 === o || l.optional ? \"master\" : o.def !== (l.definitionSymbol || n),\n casing: l.casing,\n def: l.definitionSymbol || n,\n placeholder: l.placeholder,\n nativeDef: n,\n generated: l.generated\n }) : (e.matches.splice(a++, 0, {\n fn: /[a-z]/i.test(i.staticDefinitionSymbol || n) ? new RegExp(\"[\" + (i.staticDefinitionSymbol || n) + \"]\", i.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === o ? \"master\" : o.def !== n && !0 !== o.static,\n casing: null,\n def: i.staticDefinitionSymbol || n,\n placeholder: void 0 !== i.staticDefinitionSymbol ? n : void 0,\n nativeDef: (p ? \"'\" : \"\") + n\n }), p = !1);\n }\n }\n function k() {\n if (v.length > 0) {\n if (y(l = v[v.length - 1], o), l.isAlternator) {\n c = v.pop();\n for (var e = 0; e < c.matches.length; e++) c.matches[e].isGroup && (c.matches[e].isGroup = !1);\n v.length > 0 ? (l = v[v.length - 1]).matches.push(c) : h.matches.push(c);\n }\n } else y(h, o);\n }\n function b(e) {\n var t = new a.default(!0);\n return t.openGroup = !1, t.matches = e, t;\n }\n function x() {\n if ((s = v.pop()).openGroup = !1, void 0 !== s) if (v.length > 0) {\n if ((l = v[v.length - 1]).matches.push(s), l.isAlternator) {\n for (var e = (c = v.pop()).matches[0].matches ? c.matches[0].matches.length : 1, t = 0; t < c.matches.length; t++) c.matches[t].isGroup = !1, \n c.matches[t].alternatorGroup = !1, null === i.keepStatic && e < (c.matches[t].matches ? c.matches[t].matches.length : 1) && (i.keepStatic = !0), \n e = c.matches[t].matches ? c.matches[t].matches.length : 1;\n v.length > 0 ? (l = v[v.length - 1]).matches.push(c) : h.matches.push(c);\n }\n } else h.matches.push(s); else k();\n }\n function P(e) {\n var t = e.pop();\n return t.isQuantifier && (t = b([ e.pop(), t ])), t;\n }\n t && (i.optionalmarker[0] = void 0, i.optionalmarker[1] = void 0);\n for (;n = t ? d.exec(e) : f.exec(e); ) {\n if (o = n[0], t) {\n switch (o.charAt(0)) {\n case \"?\":\n o = \"{0,1}\";\n break;\n\n case \"+\":\n case \"*\":\n o = \"{\" + o + \"}\";\n break;\n\n case \"|\":\n if (0 === v.length) {\n var w = b(h.matches);\n w.openGroup = !0, v.push(w), h.matches = [], g = !0;\n }\n }\n switch (o) {\n case \"\\\\d\":\n o = \"[0-9]\";\n break;\n\n case \"\\\\p\":\n o += d.exec(e)[0], o += d.exec(e)[0];\n }\n }\n if (p) k(); else switch (o.charAt(0)) {\n case \"$\":\n case \"^\":\n t || k();\n break;\n\n case i.escapeChar:\n p = !0, t && k();\n break;\n\n case i.optionalmarker[1]:\n case i.groupmarker[1]:\n x();\n break;\n\n case i.optionalmarker[0]:\n v.push(new a.default(!1, !0));\n break;\n\n case i.groupmarker[0]:\n v.push(new a.default(!0));\n break;\n\n case i.quantifiermarker[0]:\n var S = new a.default(!1, !1, !0), M = (o = o.replace(/[{}?]/g, \"\")).split(\"|\"), _ = M[0].split(\",\"), O = isNaN(_[0]) ? _[0] : parseInt(_[0]), E = 1 === _.length ? O : isNaN(_[1]) ? _[1] : parseInt(_[1]), T = isNaN(M[1]) ? M[1] : parseInt(M[1]);\n \"*\" !== O && \"+\" !== O || (O = \"*\" === E ? 0 : 1), S.quantifier = {\n min: O,\n max: E,\n jit: T\n };\n var j = v.length > 0 ? v[v.length - 1].matches : h.matches;\n (n = j.pop()).isGroup || (n = b([ n ])), j.push(n), j.push(S);\n break;\n\n case i.alternatormarker:\n if (v.length > 0) {\n var A = (l = v[v.length - 1]).matches[l.matches.length - 1];\n u = l.openGroup && (void 0 === A.matches || !1 === A.isGroup && !1 === A.isAlternator) ? v.pop() : P(l.matches);\n } else u = P(h.matches);\n if (u.isAlternator) v.push(u); else if (u.alternatorGroup ? (c = v.pop(), u.alternatorGroup = !1) : c = new a.default(!1, !1, !1, !0), \n c.matches.push(u), v.push(c), u.openGroup) {\n u.openGroup = !1;\n var D = new a.default(!0);\n D.alternatorGroup = !0, v.push(D);\n }\n break;\n\n default:\n k();\n }\n }\n g && x();\n for (;v.length > 0; ) s = v.pop(), h.matches.push(s);\n h.matches.length > 0 && (!function e(n) {\n n && n.matches && n.matches.forEach((function(a, r) {\n var o = n.matches[r + 1];\n (void 0 === o || void 0 === o.matches || !1 === o.isQuantifier) && a && a.isGroup && (a.isGroup = !1, \n t || (y(a, i.groupmarker[0], 0), !0 !== a.openGroup && y(a, i.groupmarker[1]))), \n e(a);\n }));\n }(h), m.push(h));\n (i.numericInput || i.isRTL) && function e(t) {\n for (var n in t.matches = t.matches.reverse(), t.matches) if (Object.prototype.hasOwnProperty.call(t.matches, n)) {\n var a = parseInt(n);\n if (t.matches[n].isQuantifier && t.matches[a + 1] && t.matches[a + 1].isGroup) {\n var r = t.matches[n];\n t.matches.splice(n, 1), t.matches.splice(a + 1, 0, r);\n }\n void 0 !== t.matches[n].matches ? t.matches[n] = e(t.matches[n]) : t.matches[n] = ((o = t.matches[n]) === i.optionalmarker[0] ? o = i.optionalmarker[1] : o === i.optionalmarker[1] ? o = i.optionalmarker[0] : o === i.groupmarker[0] ? o = i.groupmarker[1] : o === i.groupmarker[1] && (o = i.groupmarker[0]), \n o);\n }\n var o;\n return t;\n }(m[0]);\n return m;\n }, t.generateMaskSet = function(e, t) {\n var i;\n function a(e, t) {\n var i = t.repeat, n = t.groupmarker, a = t.quantifiermarker, r = t.keepStatic;\n if (i > 0 || \"*\" === i || \"+\" === i) {\n var l = \"*\" === i ? 0 : \"+\" === i ? 1 : i;\n e = n[0] + e + n[1] + a[0] + l + \",\" + i + a[1];\n }\n if (!0 === r) {\n var c = e.match(new RegExp(\"(.)\\\\[([^\\\\]]*)\\\\]\", \"g\"));\n c && c.forEach((function(t, i) {\n var n = function(e, t) {\n return function(e) {\n if (Array.isArray(e)) return e;\n }(e) || function(e, t) {\n var i = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (null != i) {\n var n, a, r, o, s = [], l = !0, c = !1;\n try {\n if (r = (i = i.call(e)).next, 0 === t) {\n if (Object(i) !== i) return;\n l = !1;\n } else for (;!(l = (n = r.call(i)).done) && (s.push(n.value), s.length !== t); l = !0) ;\n } catch (e) {\n c = !0, a = e;\n } finally {\n try {\n if (!l && null != i.return && (o = i.return(), Object(o) !== o)) return;\n } finally {\n if (c) throw a;\n }\n }\n return s;\n }\n }(e, t) || function(e, t) {\n if (!e) return;\n if (\"string\" == typeof e) return s(e, t);\n var i = Object.prototype.toString.call(e).slice(8, -1);\n \"Object\" === i && e.constructor && (i = e.constructor.name);\n if (\"Map\" === i || \"Set\" === i) return Array.from(e);\n if (\"Arguments\" === i || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)) return s(e, t);\n }(e, t) || function() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }(t.split(\"[\"), 2), a = n[0], r = n[1];\n r = r.replace(\"]\", \"\"), e = e.replace(new RegExp(\"\".concat((0, o.default)(a), \"\\\\[\").concat((0, \n o.default)(r), \"\\\\]\")), a.charAt(0) === r.charAt(0) ? \"(\".concat(a, \"|\").concat(a).concat(r, \")\") : \"\".concat(a, \"[\").concat(r, \"]\"));\n }));\n }\n return e;\n }\n function l(e, i, o) {\n var s, l, c = !1;\n return null !== e && \"\" !== e || ((c = null !== o.regex) ? e = (e = o.regex).replace(/^(\\^)(.*)(\\$)$/, \"$2\") : (c = !0, \n e = \".*\")), 1 === e.length && !1 === o.greedy && 0 !== o.repeat && (o.placeholder = \"\"), \n e = a(e, o), l = c ? \"regex_\" + o.regex : o.numericInput ? e.split(\"\").reverse().join(\"\") : e, \n null !== o.keepStatic && (l = \"ks_\" + o.keepStatic + l), void 0 === r.default.prototype.masksCache[l] || !0 === t ? (s = {\n mask: e,\n maskToken: r.default.prototype.analyseMask(e, c, o),\n validPositions: [],\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n excludes: {},\n metadata: i,\n maskLength: void 0,\n jitOffset: {}\n }, !0 !== t && (r.default.prototype.masksCache[l] = s, s = n.default.extend(!0, {}, r.default.prototype.masksCache[l]))) : s = n.default.extend(!0, {}, r.default.prototype.masksCache[l]), \n s;\n }\n \"function\" == typeof e.mask && (e.mask = e.mask(e));\n if (Array.isArray(e.mask)) {\n if (e.mask.length > 1) {\n null === e.keepStatic && (e.keepStatic = !0);\n var c = e.groupmarker[0];\n return (e.isRTL ? e.mask.reverse() : e.mask).forEach((function(t) {\n c.length > 1 && (c += e.alternatormarker), void 0 !== t.mask && \"function\" != typeof t.mask ? c += t.mask : c += t;\n })), l(c += e.groupmarker[1], e.mask, e);\n }\n e.mask = e.mask.pop();\n }\n i = e.mask && void 0 !== e.mask.mask && \"function\" != typeof e.mask.mask ? l(e.mask.mask, e.mask, e) : l(e.mask, e.mask, e);\n null === e.keepStatic && (e.keepStatic = !1);\n return i;\n };\n var n = l(i(4963)), a = l(i(9695)), r = l(i(2394)), o = l(i(7184));\n function s(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var i = 0, n = new Array(t); i < t; i++) n[i] = e[i];\n return n;\n }\n function l(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n },\n 157: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.mask = function() {\n var e = this, t = this.opts, i = this.el, u = this.dependencyLib;\n o.EventRuler.off(i);\n var f = function(t, i) {\n \"textarea\" !== t.tagName.toLowerCase() && i.ignorables.push(n.keys.Enter);\n var s = t.getAttribute(\"type\"), l = \"input\" === t.tagName.toLowerCase() && i.supportsInputType.includes(s) || t.isContentEditable || \"textarea\" === t.tagName.toLowerCase();\n if (!l) if (\"input\" === t.tagName.toLowerCase()) {\n var c = document.createElement(\"input\");\n c.setAttribute(\"type\", s), l = \"text\" === c.type, c = null;\n } else l = \"partial\";\n return !1 !== l ? function(t) {\n var n, s;\n function l() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== a.getLastValidPosition.call(e) || !0 !== i.nullable ? (this.inputmask.shadowRoot || this.ownerDocument).activeElement === this && i.clearMaskOnLostFocus ? (e.isRTL ? r.clearOptionalTail.call(e, a.getBuffer.call(e).slice()).reverse() : r.clearOptionalTail.call(e, a.getBuffer.call(e).slice())).join(\"\") : n.call(this) : \"\" : n.call(this);\n }\n function c(e) {\n s.call(this, e), this.inputmask && (0, r.applyInputValue)(this, e);\n }\n if (!t.inputmask.__valueGet) {\n if (!0 !== i.noValuePatching) {\n if (Object.getOwnPropertyDescriptor) {\n var f = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t), \"value\") : void 0;\n f && f.get && f.set ? (n = f.get, s = f.set, Object.defineProperty(t, \"value\", {\n get: l,\n set: c,\n configurable: !0\n })) : \"input\" !== t.tagName.toLowerCase() && (n = function() {\n return this.textContent;\n }, s = function(e) {\n this.textContent = e;\n }, Object.defineProperty(t, \"value\", {\n get: l,\n set: c,\n configurable: !0\n }));\n } else document.__lookupGetter__ && t.__lookupGetter__(\"value\") && (n = t.__lookupGetter__(\"value\"), \n s = t.__lookupSetter__(\"value\"), t.__defineGetter__(\"value\", l), t.__defineSetter__(\"value\", c));\n t.inputmask.__valueGet = n, t.inputmask.__valueSet = s;\n }\n t.inputmask._valueGet = function(t) {\n return e.isRTL && !0 !== t ? n.call(this.el).split(\"\").reverse().join(\"\") : n.call(this.el);\n }, t.inputmask._valueSet = function(t, i) {\n s.call(this.el, null == t ? \"\" : !0 !== i && e.isRTL ? t.split(\"\").reverse().join(\"\") : t);\n }, void 0 === n && (n = function() {\n return this.value;\n }, s = function(e) {\n this.value = e;\n }, function(t) {\n if (u.valHooks && (void 0 === u.valHooks[t] || !0 !== u.valHooks[t].inputmaskpatch)) {\n var n = u.valHooks[t] && u.valHooks[t].get ? u.valHooks[t].get : function(e) {\n return e.value;\n }, o = u.valHooks[t] && u.valHooks[t].set ? u.valHooks[t].set : function(e, t) {\n return e.value = t, e;\n };\n u.valHooks[t] = {\n get: function(t) {\n if (t.inputmask) {\n if (t.inputmask.opts.autoUnmask) return t.inputmask.unmaskedvalue();\n var r = n(t);\n return -1 !== a.getLastValidPosition.call(e, void 0, void 0, t.inputmask.maskset.validPositions) || !0 !== i.nullable ? r : \"\";\n }\n return n(t);\n },\n set: function(e, t) {\n var i = o(e, t);\n return e.inputmask && (0, r.applyInputValue)(e, t), i;\n },\n inputmaskpatch: !0\n };\n }\n }(t.type), function(e) {\n o.EventRuler.on(e, \"mouseenter\", (function() {\n var e = this, t = e.inputmask._valueGet(!0);\n t != (e.inputmask.isRTL ? a.getBuffer.call(e.inputmask).slice().reverse() : a.getBuffer.call(e.inputmask)).join(\"\") && (0, \n r.applyInputValue)(e, t);\n }));\n }(t));\n }\n }(t) : t.inputmask = void 0, l;\n }(i, t);\n if (!1 !== f) {\n e.originalPlaceholder = i.placeholder, e.maxLength = void 0 !== i ? i.maxLength : void 0, \n -1 === e.maxLength && (e.maxLength = void 0), \"inputMode\" in i && null === i.getAttribute(\"inputmode\") && (i.inputMode = t.inputmode, \n i.setAttribute(\"inputmode\", t.inputmode)), !0 === f && (t.showMaskOnFocus = t.showMaskOnFocus && -1 === [ \"cc-number\", \"cc-exp\" ].indexOf(i.autocomplete), \n s.iphone && (t.insertModeVisual = !1, i.setAttribute(\"autocorrect\", \"off\")), o.EventRuler.on(i, \"submit\", c.EventHandlers.submitEvent), \n o.EventRuler.on(i, \"reset\", c.EventHandlers.resetEvent), o.EventRuler.on(i, \"blur\", c.EventHandlers.blurEvent), \n o.EventRuler.on(i, \"focus\", c.EventHandlers.focusEvent), o.EventRuler.on(i, \"invalid\", c.EventHandlers.invalidEvent), \n o.EventRuler.on(i, \"click\", c.EventHandlers.clickEvent), o.EventRuler.on(i, \"mouseleave\", c.EventHandlers.mouseleaveEvent), \n o.EventRuler.on(i, \"mouseenter\", c.EventHandlers.mouseenterEvent), o.EventRuler.on(i, \"paste\", c.EventHandlers.pasteEvent), \n o.EventRuler.on(i, \"cut\", c.EventHandlers.cutEvent), o.EventRuler.on(i, \"complete\", t.oncomplete), \n o.EventRuler.on(i, \"incomplete\", t.onincomplete), o.EventRuler.on(i, \"cleared\", t.oncleared), \n !0 !== t.inputEventOnly && o.EventRuler.on(i, \"keydown\", c.EventHandlers.keyEvent), \n (s.mobile || t.inputEventOnly) && i.removeAttribute(\"maxLength\"), o.EventRuler.on(i, \"input\", c.EventHandlers.inputFallBackEvent)), \n o.EventRuler.on(i, \"setvalue\", c.EventHandlers.setValueEvent), a.getBufferTemplate.call(e).join(\"\"), \n e.undoValue = e._valueGet(!0);\n var d = (i.inputmask.shadowRoot || i.ownerDocument).activeElement;\n if (\"\" !== i.inputmask._valueGet(!0) || !1 === t.clearMaskOnLostFocus || d === i) {\n (0, r.applyInputValue)(i, i.inputmask._valueGet(!0), t);\n var p = a.getBuffer.call(e).slice();\n !1 === l.isComplete.call(e, p) && t.clearIncomplete && a.resetMaskSet.call(e), t.clearMaskOnLostFocus && d !== i && (-1 === a.getLastValidPosition.call(e) ? p = [] : r.clearOptionalTail.call(e, p)), \n (!1 === t.clearMaskOnLostFocus || t.showMaskOnFocus && d === i || \"\" !== i.inputmask._valueGet(!0)) && (0, \n r.writeBuffer)(i, p), d === i && a.caret.call(e, i, a.seekNext.call(e, a.getLastValidPosition.call(e)));\n }\n }\n };\n var n = i(2839), a = i(8711), r = i(7760), o = i(9716), s = i(9845), l = i(7215), c = i(6030);\n },\n 9695: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, i, n) {\n this.matches = [], this.openGroup = e || !1, this.alternatorGroup = !1, this.isGroup = e || !1, \n this.isOptional = t || !1, this.isQuantifier = i || !1, this.isAlternator = n || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n };\n },\n 3194: function() {\n Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n value: function(e, t) {\n if (null == this) throw new TypeError('\"this\" is null or not defined');\n var i = Object(this), n = i.length >>> 0;\n if (0 === n) return !1;\n for (var a = 0 | t, r = Math.max(a >= 0 ? a : n - Math.abs(a), 0); r < n; ) {\n if (i[r] === e) return !0;\n r++;\n }\n return !1;\n }\n });\n },\n 9302: function() {\n var e = Function.bind.call(Function.call, Array.prototype.reduce), t = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable), i = Function.bind.call(Function.call, Array.prototype.concat), n = Object.keys;\n Object.entries || (Object.entries = function(a) {\n return e(n(a), (function(e, n) {\n return i(e, \"string\" == typeof n && t(a, n) ? [ [ n, a[n] ] ] : []);\n }), []);\n });\n },\n 7149: function() {\n function e(t) {\n return e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n }, e(t);\n }\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === e(\"test\".__proto__) ? function(e) {\n return e.__proto__;\n } : function(e) {\n return e.constructor.prototype;\n });\n },\n 4013: function() {\n String.prototype.includes || (String.prototype.includes = function(e, t) {\n return \"number\" != typeof t && (t = 0), !(t + e.length > this.length) && -1 !== this.indexOf(e, t);\n });\n },\n 8711: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.caret = function(e, t, i, n, a) {\n var r, o = this, s = this.opts;\n if (void 0 === t) return \"selectionStart\" in e && \"selectionEnd\" in e ? (t = e.selectionStart, \n i = e.selectionEnd) : window.getSelection ? (r = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== e && r.commonAncestorContainer !== e || (t = r.startOffset, \n i = r.endOffset) : document.selection && document.selection.createRange && (i = (t = 0 - (r = document.selection.createRange()).duplicate().moveStart(\"character\", -e.inputmask._valueGet().length)) + r.text.length), \n {\n begin: n ? t : c.call(o, t),\n end: n ? i : c.call(o, i)\n };\n if (Array.isArray(t) && (i = o.isRTL ? t[0] : t[1], t = o.isRTL ? t[1] : t[0]), \n void 0 !== t.begin && (i = o.isRTL ? t.begin : t.end, t = o.isRTL ? t.end : t.begin), \n \"number\" == typeof t) {\n t = n ? t : c.call(o, t), i = \"number\" == typeof (i = n ? i : c.call(o, i)) ? i : t;\n var l = parseInt(((e.ownerDocument.defaultView || window).getComputedStyle ? (e.ownerDocument.defaultView || window).getComputedStyle(e, null) : e.currentStyle).fontSize) * i;\n if (e.scrollLeft = l > e.scrollWidth ? l : 0, e.inputmask.caretPos = {\n begin: t,\n end: i\n }, s.insertModeVisual && !1 === s.insertMode && t === i && (a || i++), e === (e.inputmask.shadowRoot || e.ownerDocument).activeElement) if (\"setSelectionRange\" in e) e.setSelectionRange(t, i); else if (window.getSelection) {\n if (r = document.createRange(), void 0 === e.firstChild || null === e.firstChild) {\n var u = document.createTextNode(\"\");\n e.appendChild(u);\n }\n r.setStart(e.firstChild, t < e.inputmask._valueGet().length ? t : e.inputmask._valueGet().length), \n r.setEnd(e.firstChild, i < e.inputmask._valueGet().length ? i : e.inputmask._valueGet().length), \n r.collapse(!0);\n var f = window.getSelection();\n f.removeAllRanges(), f.addRange(r);\n } else e.createTextRange && ((r = e.createTextRange()).collapse(!0), r.moveEnd(\"character\", i), \n r.moveStart(\"character\", t), r.select());\n }\n }, t.determineLastRequiredPosition = function(e) {\n var t, i, r = this, s = r.maskset, l = r.dependencyLib, c = n.getMaskTemplate.call(r, !0, o.call(r), !0, !0), u = c.length, f = o.call(r), d = {}, p = s.validPositions[f], h = void 0 !== p ? p.locator.slice() : void 0;\n for (t = f + 1; t < c.length; t++) h = (i = n.getTestTemplate.call(r, t, h, t - 1)).locator.slice(), \n d[t] = l.extend(!0, {}, i);\n var v = p && void 0 !== p.alternation ? p.locator[p.alternation] : void 0;\n for (t = u - 1; t > f && (((i = d[t]).match.optionality || i.match.optionalQuantifier && i.match.newBlockMarker || v && (v !== d[t].locator[p.alternation] && 1 != i.match.static || !0 === i.match.static && i.locator[p.alternation] && a.checkAlternationMatch.call(r, i.locator[p.alternation].toString().split(\",\"), v.toString().split(\",\")) && \"\" !== n.getTests.call(r, t)[0].def)) && c[t] === n.getPlaceholder.call(r, t, i.match)); t--) u--;\n return e ? {\n l: u,\n def: d[u] ? d[u].match : void 0\n } : u;\n }, t.determineNewCaretPosition = function(e, t, i) {\n var a = this, c = a.maskset, u = a.opts;\n t && (a.isRTL ? e.end = e.begin : e.begin = e.end);\n if (e.begin === e.end) {\n switch (i = i || u.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"select\":\n e = {\n begin: 0,\n end: r.call(a).length\n };\n break;\n\n case \"ignore\":\n e.end = e.begin = l.call(a, o.call(a));\n break;\n\n case \"radixFocus\":\n if (a.clicked > 1 && 0 == c.validPositions.length) break;\n if (function(e) {\n if (\"\" !== u.radixPoint && 0 !== u.digits) {\n var t = c.validPositions;\n if (void 0 === t[e] || t[e].input === n.getPlaceholder.call(a, e)) {\n if (e < l.call(a, -1)) return !0;\n var i = r.call(a).indexOf(u.radixPoint);\n if (-1 !== i) {\n for (var o = 0, s = t.length; o < s; o++) if (t[o] && i < o && t[o].input !== n.getPlaceholder.call(a, o)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }(e.begin)) {\n var f = r.call(a).join(\"\").indexOf(u.radixPoint);\n e.end = e.begin = u.numericInput ? l.call(a, f) : f;\n break;\n }\n\n default:\n var d = e.begin, p = o.call(a, d, !0), h = l.call(a, -1 !== p || s.call(a, 0) ? p : -1);\n if (d <= h) e.end = e.begin = s.call(a, d, !1, !0) ? d : l.call(a, d); else {\n var v = c.validPositions[p], m = n.getTestTemplate.call(a, h, v ? v.match.locator : void 0, v), g = n.getPlaceholder.call(a, h, m.match);\n if (\"\" !== g && r.call(a)[h] !== g && !0 !== m.match.optionalQuantifier && !0 !== m.match.newBlockMarker || !s.call(a, h, u.keepStatic, !0) && m.match.def === g) {\n var y = l.call(a, h);\n (d >= y || d === h) && (h = y);\n }\n e.end = e.begin = h;\n }\n }\n return e;\n }\n }, t.getBuffer = r, t.getBufferTemplate = function() {\n var e = this.maskset;\n void 0 === e._buffer && (e._buffer = n.getMaskTemplate.call(this, !1, 1), void 0 === e.buffer && (e.buffer = e._buffer.slice()));\n return e._buffer;\n }, t.getLastValidPosition = o, t.isMask = s, t.resetMaskSet = function(e) {\n var t = this.maskset;\n t.buffer = void 0, !0 !== e && (t.validPositions = [], t.p = 0);\n }, t.seekNext = l, t.seekPrevious = function(e, t) {\n var i = this, a = e - 1;\n if (e <= 0) return 0;\n for (;a > 0 && (!0 === t && (!0 !== n.getTest.call(i, a).match.newBlockMarker || !s.call(i, a, void 0, !0)) || !0 !== t && !s.call(i, a, void 0, !0)); ) a--;\n return a;\n }, t.translatePosition = c;\n var n = i(4713), a = i(7215);\n function r(e) {\n var t = this, i = t.maskset;\n return void 0 !== i.buffer && !0 !== e || (i.buffer = n.getMaskTemplate.call(t, !0, o.call(t), !0), \n void 0 === i._buffer && (i._buffer = i.buffer.slice())), i.buffer;\n }\n function o(e, t, i) {\n var n = this.maskset, a = -1, r = -1, o = i || n.validPositions;\n void 0 === e && (e = -1);\n for (var s = 0, l = o.length; s < l; s++) o[s] && (t || !0 !== o[s].generatedInput) && (s <= e && (a = s), \n s >= e && (r = s));\n return -1 === a || a == e ? r : -1 == r || e - a < r - e ? a : r;\n }\n function s(e, t, i) {\n var a = this, r = this.maskset, o = n.getTestTemplate.call(a, e).match;\n if (\"\" === o.def && (o = n.getTest.call(a, e).match), !0 !== o.static) return o.fn;\n if (!0 === i && void 0 !== r.validPositions[e] && !0 !== r.validPositions[e].generatedInput) return !0;\n if (!0 !== t && e > -1) {\n if (i) {\n var s = n.getTests.call(a, e);\n return s.length > 1 + (\"\" === s[s.length - 1].match.def ? 1 : 0);\n }\n var l = n.determineTestTemplate.call(a, e, n.getTests.call(a, e)), c = n.getPlaceholder.call(a, e, l.match);\n return l.match.def !== c;\n }\n return !1;\n }\n function l(e, t, i) {\n var a = this;\n void 0 === i && (i = !0);\n for (var r = e + 1; \"\" !== n.getTest.call(a, r).match.def && (!0 === t && (!0 !== n.getTest.call(a, r).match.newBlockMarker || !s.call(a, r, void 0, !0)) || !0 !== t && !s.call(a, r, void 0, i)); ) r++;\n return r;\n }\n function c(e) {\n var t = this.opts, i = this.el;\n return !this.isRTL || \"number\" != typeof e || t.greedy && \"\" === t.placeholder || !i || (e = this._valueGet().length - e) < 0 && (e = 0), \n e;\n }\n },\n 4713: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.determineTestTemplate = c, t.getDecisionTaker = o, t.getMaskTemplate = function(e, t, i, n, a) {\n var r = this, o = this.opts, u = this.maskset, f = o.greedy;\n a && o.greedy && (o.greedy = !1, r.maskset.tests = {});\n t = t || 0;\n var p, h, v, m, g = [], y = 0;\n do {\n if (!0 === e && u.validPositions[y]) h = (v = a && u.validPositions[y].match.optionality && void 0 === u.validPositions[y + 1] && (!0 === u.validPositions[y].generatedInput || u.validPositions[y].input == o.skipOptionalPartCharacter && y > 0) ? c.call(r, y, d.call(r, y, p, y - 1)) : u.validPositions[y]).match, \n p = v.locator.slice(), g.push(!0 === i ? v.input : !1 === i ? h.nativeDef : s.call(r, y, h)); else {\n h = (v = l.call(r, y, p, y - 1)).match, p = v.locator.slice();\n var k = !0 !== n && (!1 !== o.jitMasking ? o.jitMasking : h.jit);\n (m = (m && h.static && h.def !== o.groupSeparator && null === h.fn || u.validPositions[y - 1] && h.static && h.def !== o.groupSeparator && null === h.fn) && u.tests[y]) || !1 === k || void 0 === k || \"number\" == typeof k && isFinite(k) && k > y ? g.push(!1 === i ? h.nativeDef : s.call(r, g.length, h)) : m = !1;\n }\n y++;\n } while (!0 !== h.static || \"\" !== h.def || t > y);\n \"\" === g[g.length - 1] && g.pop();\n !1 === i && void 0 !== u.maskLength || (u.maskLength = y - 1);\n return o.greedy = f, g;\n }, t.getPlaceholder = s, t.getTest = u, t.getTestTemplate = l, t.getTests = d, t.isSubsetOf = f;\n var n, a = (n = i(2394)) && n.__esModule ? n : {\n default: n\n };\n function r(e, t) {\n var i = (null != e.alternation ? e.mloc[o(e)] : e.locator).join(\"\");\n if (\"\" !== i) for (;i.length < t; ) i += \"0\";\n return i;\n }\n function o(e) {\n var t = e.locator[e.alternation];\n return \"string\" == typeof t && t.length > 0 && (t = t.split(\",\")[0]), void 0 !== t ? t.toString() : \"\";\n }\n function s(e, t, i) {\n var n = this.opts, a = this.maskset;\n if (void 0 !== (t = t || u.call(this, e).match).placeholder || !0 === i) return \"function\" == typeof t.placeholder ? t.placeholder(n) : t.placeholder;\n if (!0 === t.static) {\n if (e > -1 && void 0 === a.validPositions[e]) {\n var r, o = d.call(this, e), s = [];\n if (o.length > 1 + (\"\" === o[o.length - 1].match.def ? 1 : 0)) for (var l = 0; l < o.length; l++) if (\"\" !== o[l].match.def && !0 !== o[l].match.optionality && !0 !== o[l].match.optionalQuantifier && (!0 === o[l].match.static || void 0 === r || !1 !== o[l].match.fn.test(r.match.def, a, e, !0, n)) && (s.push(o[l]), \n !0 === o[l].match.static && (r = o[l]), s.length > 1 && /[0-9a-bA-Z]/.test(s[0].match.def))) return n.placeholder.charAt(e % n.placeholder.length);\n }\n return t.def;\n }\n return n.placeholder.charAt(e % n.placeholder.length);\n }\n function l(e, t, i) {\n return this.maskset.validPositions[e] || c.call(this, e, d.call(this, e, t ? t.slice() : t, i));\n }\n function c(e, t) {\n var i = this.opts, n = 0, a = function(e, t) {\n var i = 0, n = !1;\n t.forEach((function(e) {\n e.match.optionality && (0 !== i && i !== e.match.optionality && (n = !0), (0 === i || i > e.match.optionality) && (i = e.match.optionality));\n })), i && (0 == e || 1 == t.length ? i = 0 : n || (i = 0));\n return i;\n }(e, t);\n e = e > 0 ? e - 1 : 0;\n var o, s, l, c = r(u.call(this, e));\n i.greedy && t.length > 1 && \"\" === t[t.length - 1].match.def && (n = 1);\n for (var f = 0; f < t.length - n; f++) {\n var d = t[f];\n o = r(d, c.length);\n var p = Math.abs(o - c);\n (void 0 === s || \"\" !== o && p < s || l && !i.greedy && l.match.optionality && l.match.optionality - a > 0 && \"master\" === l.match.newBlockMarker && (!d.match.optionality || d.match.optionality - a < 1 || !d.match.newBlockMarker) || l && !i.greedy && l.match.optionalQuantifier && !d.match.optionalQuantifier) && (s = p, \n l = d);\n }\n return l;\n }\n function u(e, t) {\n var i = this.maskset;\n return i.validPositions[e] ? i.validPositions[e] : (t || d.call(this, e))[0];\n }\n function f(e, t, i) {\n function n(e) {\n for (var t, i = [], n = -1, a = 0, r = e.length; a < r; a++) if (\"-\" === e.charAt(a)) for (t = e.charCodeAt(a + 1); ++n < t; ) i.push(String.fromCharCode(n)); else n = e.charCodeAt(a), \n i.push(e.charAt(a));\n return i.join(\"\");\n }\n return e.match.def === t.match.nativeDef || !(!(i.regex || e.match.fn instanceof RegExp && t.match.fn instanceof RegExp) || !0 === e.match.static || !0 === t.match.static) && -1 !== n(t.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(n(e.match.fn.toString().replace(/[[\\]/]/g, \"\")));\n }\n function d(e, t, i) {\n var n, r, o = this, s = this.dependencyLib, l = this.maskset, u = this.opts, d = this.el, p = l.maskToken, h = t ? i : 0, v = t ? t.slice() : [ 0 ], m = [], g = !1, y = t ? t.join(\"\") : \"\";\n function k(t, i, r, s) {\n function c(r, s, p) {\n function v(e, t) {\n var i = 0 === t.matches.indexOf(e);\n return i || t.matches.every((function(n, a) {\n return !0 === n.isQuantifier ? i = v(e, t.matches[a - 1]) : Object.prototype.hasOwnProperty.call(n, \"matches\") && (i = v(e, n)), \n !i;\n })), i;\n }\n function x(e, t, i) {\n var n, a;\n if ((l.tests[e] || l.validPositions[e]) && (l.tests[e] || [ l.validPositions[e] ]).every((function(e, r) {\n if (e.mloc[t]) return n = e, !1;\n var o = void 0 !== i ? i : e.alternation, s = void 0 !== e.locator[o] ? e.locator[o].toString().indexOf(t) : -1;\n return (void 0 === a || s < a) && -1 !== s && (n = e, a = s), !0;\n })), n) {\n var r = n.locator[n.alternation];\n return (n.mloc[t] || n.mloc[r] || n.locator).slice((void 0 !== i ? i : n.alternation) + 1);\n }\n return void 0 !== i ? x(e, t) : void 0;\n }\n function P(e, t) {\n var i = e.alternation, n = void 0 === t || i === t.alternation && -1 === e.locator[i].toString().indexOf(t.locator[i]);\n if (!n && i > t.alternation) for (var a = t.alternation; a < i; a++) if (e.locator[a] !== t.locator[a]) {\n i = a, n = !0;\n break;\n }\n if (n) {\n e.mloc = e.mloc || {};\n var r = e.locator[i];\n if (void 0 !== r) {\n if (\"string\" == typeof r && (r = r.split(\",\")[0]), void 0 === e.mloc[r] && (e.mloc[r] = e.locator.slice()), \n void 0 !== t) {\n for (var o in t.mloc) \"string\" == typeof o && (o = o.split(\",\")[0]), void 0 === e.mloc[o] && (e.mloc[o] = t.mloc[o]);\n e.locator[i] = Object.keys(e.mloc).join(\",\");\n }\n return !0;\n }\n e.alternation = void 0;\n }\n return !1;\n }\n function w(e, t) {\n if (e.locator.length !== t.locator.length) return !1;\n for (var i = e.alternation + 1; i < e.locator.length; i++) if (e.locator[i] !== t.locator[i]) return !1;\n return !0;\n }\n if (h > e + u._maxTestPos) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + l.mask;\n if (h === e && void 0 === r.matches) {\n if (m.push({\n match: r,\n locator: s.reverse(),\n cd: y,\n mloc: {}\n }), !r.optionality || void 0 !== p || !(u.definitions && u.definitions[r.nativeDef] && u.definitions[r.nativeDef].optional || a.default.prototype.definitions[r.nativeDef] && a.default.prototype.definitions[r.nativeDef].optional)) return !0;\n g = !0, h = e;\n } else if (void 0 !== r.matches) {\n if (r.isGroup && p !== r) return function() {\n if (r = c(t.matches[t.matches.indexOf(r) + 1], s, p)) return !0;\n }();\n if (r.isOptional) return function() {\n var t = r, a = m.length;\n if (r = k(r, i, s, p), m.length > 0) {\n if (m.forEach((function(e, t) {\n t >= a && (e.match.optionality = e.match.optionality ? e.match.optionality + 1 : 1);\n })), n = m[m.length - 1].match, void 0 !== p || !v(n, t)) return r;\n g = !0, h = e;\n }\n }();\n if (r.isAlternator) return function() {\n o.hasAlternator = !0;\n var n, a, v, y = r, k = [], b = m.slice(), S = s.length, M = !1, _ = i.length > 0 ? i.shift() : -1;\n if (-1 === _ || \"string\" == typeof _) {\n var O, E = h, T = i.slice(), j = [];\n if (\"string\" == typeof _) j = _.split(\",\"); else for (O = 0; O < y.matches.length; O++) j.push(O.toString());\n if (void 0 !== l.excludes[e]) {\n for (var A = j.slice(), D = 0, B = l.excludes[e].length; D < B; D++) {\n var C = l.excludes[e][D].toString().split(\":\");\n s.length == C[1] && j.splice(j.indexOf(C[0]), 1);\n }\n 0 === j.length && (delete l.excludes[e], j = A);\n }\n (!0 === u.keepStatic || isFinite(parseInt(u.keepStatic)) && E >= u.keepStatic) && (j = j.slice(0, 1));\n for (var R = 0; R < j.length; R++) {\n O = parseInt(j[R]), m = [], i = \"string\" == typeof _ && x(h, O, S) || T.slice();\n var L = y.matches[O];\n if (L && c(L, [ O ].concat(s), p)) r = !0; else if (0 === R && (M = !0), L && L.matches && L.matches.length > y.matches[0].matches.length) break;\n n = m.slice(), h = E, m = [];\n for (var F = 0; F < n.length; F++) {\n var I = n[F], N = !1;\n I.match.jit = I.match.jit || M, I.alternation = I.alternation || S, P(I);\n for (var V = 0; V < k.length; V++) {\n var G = k[V];\n if (\"string\" != typeof _ || void 0 !== I.alternation && j.includes(I.locator[I.alternation].toString())) {\n if (I.match.nativeDef === G.match.nativeDef) {\n N = !0, P(G, I);\n break;\n }\n if (f(I, G, u)) {\n P(I, G) && (N = !0, k.splice(k.indexOf(G), 0, I));\n break;\n }\n if (f(G, I, u)) {\n P(G, I);\n break;\n }\n if (v = G, !0 === (a = I).match.static && !0 !== v.match.static && v.match.fn.test(a.match.def, l, e, !1, u, !1)) {\n w(I, G) || void 0 !== d.inputmask.userOptions.keepStatic ? P(I, G) && (N = !0, k.splice(k.indexOf(G), 0, I)) : u.keepStatic = !0;\n break;\n }\n }\n }\n N || k.push(I);\n }\n }\n m = b.concat(k), h = e, g = m.length > 0, r = k.length > 0, i = T.slice();\n } else r = c(y.matches[_] || t.matches[_], [ _ ].concat(s), p);\n if (r) return !0;\n }();\n if (r.isQuantifier && p !== t.matches[t.matches.indexOf(r) - 1]) return function() {\n for (var a = r, o = !1, f = i.length > 0 ? i.shift() : 0; f < (isNaN(a.quantifier.max) ? f + 1 : a.quantifier.max) && h <= e; f++) {\n var d = t.matches[t.matches.indexOf(a) - 1];\n if (r = c(d, [ f ].concat(s), d)) {\n if (m.forEach((function(t, i) {\n (n = b(d, t.match) ? t.match : m[m.length - 1].match).optionalQuantifier = f >= a.quantifier.min, \n n.jit = (f + 1) * (d.matches.indexOf(n) + 1) > a.quantifier.jit, n.optionalQuantifier && v(n, d) && (g = !0, \n h = e, u.greedy && null == l.validPositions[e - 1] && f > a.quantifier.min && -1 != [ \"*\", \"+\" ].indexOf(a.quantifier.max) && (m.pop(), \n y = void 0), o = !0, r = !1), !o && n.jit && (l.jitOffset[e] = d.matches.length - d.matches.indexOf(n));\n })), o) break;\n return !0;\n }\n }\n }();\n if (r = k(r, i, s, p)) return !0;\n } else h++;\n }\n for (var p = i.length > 0 ? i.shift() : 0; p < t.matches.length; p++) if (!0 !== t.matches[p].isQuantifier) {\n var v = c(t.matches[p], [ p ].concat(r), s);\n if (v && h === e) return v;\n if (h > e) break;\n }\n }\n function b(e, t) {\n var i = -1 != e.matches.indexOf(t);\n return i || e.matches.forEach((function(e, n) {\n void 0 === e.matches || i || (i = b(e, t));\n })), i;\n }\n if (e > -1) {\n if (void 0 === t) {\n for (var x, P = e - 1; void 0 === (x = l.validPositions[P] || l.tests[P]) && P > -1; ) P--;\n void 0 !== x && P > -1 && (v = function(e, t) {\n var i, n = [];\n return Array.isArray(t) || (t = [ t ]), t.length > 0 && (void 0 === t[0].alternation || !0 === u.keepStatic ? 0 === (n = c.call(o, e, t.slice()).locator.slice()).length && (n = t[0].locator.slice()) : t.forEach((function(e) {\n \"\" !== e.def && (0 === n.length ? (i = e.alternation, n = e.locator.slice()) : e.locator[i] && -1 === n[i].toString().indexOf(e.locator[i]) && (n[i] += \",\" + e.locator[i]));\n }))), n;\n }(P, x), y = v.join(\"\"), h = P);\n }\n if (l.tests[e] && l.tests[e][0].cd === y) return l.tests[e];\n for (var w = v.shift(); w < p.length; w++) {\n if (k(p[w], v, [ w ]) && h === e || h > e) break;\n }\n }\n return (0 === m.length || g) && m.push({\n match: {\n fn: null,\n static: !0,\n optionality: !1,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n mloc: {},\n cd: y\n }), void 0 !== t && l.tests[e] ? r = s.extend(!0, [], m) : (l.tests[e] = s.extend(!0, [], m), \n r = l.tests[e]), m.forEach((function(e) {\n e.match.optionality = e.match.defOptionality || !1;\n })), r;\n }\n },\n 7215: function(e, t, i) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.alternate = s, t.checkAlternationMatch = function(e, t, i) {\n for (var n, a = this.opts.greedy ? t : t.slice(0, 1), r = !1, o = void 0 !== i ? i.split(\",\") : [], s = 0; s < o.length; s++) -1 !== (n = e.indexOf(o[s])) && e.splice(n, 1);\n for (var l = 0; l < e.length; l++) if (a.includes(e[l])) {\n r = !0;\n break;\n }\n return r;\n }, t.handleRemove = function(e, t, i, o, l) {\n var c = this, u = this.maskset, f = this.opts;\n if ((f.numericInput || c.isRTL) && (t === a.keys.Backspace ? t = a.keys.Delete : t === a.keys.Delete && (t = a.keys.Backspace), \n c.isRTL)) {\n var d = i.end;\n i.end = i.begin, i.begin = d;\n }\n var p, h = r.getLastValidPosition.call(c, void 0, !0);\n i.end >= r.getBuffer.call(c).length && h >= i.end && (i.end = h + 1);\n t === a.keys.Backspace ? i.end - i.begin < 1 && (i.begin = r.seekPrevious.call(c, i.begin)) : t === a.keys.Delete && i.begin === i.end && (i.end = r.isMask.call(c, i.end, !0, !0) ? i.end + 1 : r.seekNext.call(c, i.end) + 1);\n if (!1 !== (p = v.call(c, i))) {\n if (!0 !== o && !1 !== f.keepStatic || null !== f.regex && -1 !== n.getTest.call(c, i.begin).match.def.indexOf(\"|\")) {\n var m = s.call(c, !0);\n if (m) {\n var g = void 0 !== m.caret ? m.caret : m.pos ? r.seekNext.call(c, m.pos.begin ? m.pos.begin : m.pos) : r.getLastValidPosition.call(c, -1, !0);\n (t !== a.keys.Delete || i.begin > g) && i.begin;\n }\n }\n !0 !== o && (u.p = t === a.keys.Delete ? i.begin + p : i.begin, u.p = r.determineNewCaretPosition.call(c, {\n begin: u.p,\n end: u.p\n }, !1, !1 === f.insertMode && t === a.keys.Backspace ? \"none\" : void 0).begin);\n }\n }, t.isComplete = c, t.isSelection = u, t.isValid = f, t.refreshFromBuffer = p, \n t.revalidateMask = v;\n var n = i(4713), a = i(2839), r = i(8711), o = i(6030);\n function s(e, t, i, a, o, l) {\n var c, u, d, p, h, v, m, g, y, k, b, x = this, P = this.dependencyLib, w = this.opts, S = x.maskset, M = P.extend(!0, [], S.validPositions), _ = P.extend(!0, {}, S.tests), O = !1, E = !1, T = void 0 !== o ? o : r.getLastValidPosition.call(x);\n if (l && (k = l.begin, b = l.end, l.begin > l.end && (k = l.end, b = l.begin)), \n -1 === T && void 0 === o) c = 0, u = (p = n.getTest.call(x, c)).alternation; else for (;T >= 0; T--) if ((d = S.validPositions[T]) && void 0 !== d.alternation) {\n if (T <= (e || 0) && p && p.locator[d.alternation] !== d.locator[d.alternation]) break;\n c = T, u = S.validPositions[c].alternation, p = d;\n }\n if (void 0 !== u) {\n m = parseInt(c), S.excludes[m] = S.excludes[m] || [], !0 !== e && S.excludes[m].push((0, \n n.getDecisionTaker)(p) + \":\" + p.alternation);\n var j = [], A = -1;\n for (h = m; h < r.getLastValidPosition.call(x, void 0, !0) + 1; h++) -1 === A && e <= h && void 0 !== t && (j.push(t), \n A = j.length - 1), (v = S.validPositions[h]) && !0 !== v.generatedInput && (void 0 === l || h < k || h >= b) && j.push(v.input), \n delete S.validPositions[h];\n for (-1 === A && void 0 !== t && (j.push(t), A = j.length - 1); void 0 !== S.excludes[m] && S.excludes[m].length < 10; ) {\n for (S.tests = {}, r.resetMaskSet.call(x, !0), O = !0, h = 0; h < j.length && (g = O.caret || r.getLastValidPosition.call(x, void 0, !0) + 1, \n y = j[h], O = f.call(x, g, y, !1, a, !0)); h++) h === A && (E = O), 1 == e && O && (E = {\n caretPos: h\n });\n if (O) break;\n if (r.resetMaskSet.call(x), p = n.getTest.call(x, m), S.validPositions = P.extend(!0, [], M), \n S.tests = P.extend(!0, {}, _), !S.excludes[m]) {\n E = s.call(x, e, t, i, a, m - 1, l);\n break;\n }\n var D = (0, n.getDecisionTaker)(p);\n if (-1 !== S.excludes[m].indexOf(D + \":\" + p.alternation)) {\n E = s.call(x, e, t, i, a, m - 1, l);\n break;\n }\n for (S.excludes[m].push(D + \":\" + p.alternation), h = m; h < r.getLastValidPosition.call(x, void 0, !0) + 1; h++) delete S.validPositions[h];\n }\n }\n return E && !1 === w.keepStatic || delete S.excludes[m], E;\n }\n function l(e, t, i) {\n var n = this.opts, r = this.maskset;\n switch (n.casing || t.casing) {\n case \"upper\":\n e = e.toUpperCase();\n break;\n\n case \"lower\":\n e = e.toLowerCase();\n break;\n\n case \"title\":\n var o = r.validPositions[i - 1];\n e = 0 === i || o && o.input === String.fromCharCode(a.keyCode.Space) ? e.toUpperCase() : e.toLowerCase();\n break;\n\n default:\n if (\"function\" == typeof n.casing) {\n var s = Array.prototype.slice.call(arguments);\n s.push(r.validPositions), e = n.casing.apply(this, s);\n }\n }\n return e;\n }\n function c(e) {\n var t = this, i = this.opts, a = this.maskset;\n if (\"function\" == typeof i.isComplete) return i.isComplete(e, i);\n if (\"*\" !== i.repeat) {\n var o = !1, s = r.determineLastRequiredPosition.call(t, !0), l = r.seekPrevious.call(t, s.l);\n if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {\n o = !0;\n for (var c = 0; c <= l; c++) {\n var u = n.getTestTemplate.call(t, c).match;\n if (!0 !== u.static && void 0 === a.validPositions[c] && !0 !== u.optionality && !0 !== u.optionalQuantifier || !0 === u.static && e[c] !== n.getPlaceholder.call(t, c, u)) {\n o = !1;\n break;\n }\n }\n }\n return o;\n }\n }\n function u(e) {\n var t = this.opts.insertMode ? 0 : 1;\n return this.isRTL ? e.begin - e.end > t : e.end - e.begin > t;\n }\n function f(e, t, i, a, o, d, m) {\n var g = this, y = this.dependencyLib, k = this.opts, b = g.maskset;\n i = !0 === i;\n var x = e;\n function P(e) {\n if (void 0 !== e) {\n if (void 0 !== e.remove && (Array.isArray(e.remove) || (e.remove = [ e.remove ]), \n e.remove.sort((function(e, t) {\n return g.isRTL ? e.pos - t.pos : t.pos - e.pos;\n })).forEach((function(e) {\n v.call(g, {\n begin: e,\n end: e + 1\n });\n })), e.remove = void 0), void 0 !== e.insert && (Array.isArray(e.insert) || (e.insert = [ e.insert ]), \n e.insert.sort((function(e, t) {\n return g.isRTL ? t.pos - e.pos : e.pos - t.pos;\n })).forEach((function(e) {\n \"\" !== e.c && f.call(g, e.pos, e.c, void 0 === e.strict || e.strict, void 0 !== e.fromIsValid ? e.fromIsValid : a);\n })), e.insert = void 0), e.refreshFromBuffer && e.buffer) {\n var t = e.refreshFromBuffer;\n p.call(g, !0 === t ? t : t.start, t.end, e.buffer), e.refreshFromBuffer = void 0;\n }\n void 0 !== e.rewritePosition && (x = e.rewritePosition, e = !0);\n }\n return e;\n }\n function w(t, i, o) {\n var s = !1;\n return n.getTests.call(g, t).every((function(c, f) {\n var d = c.match;\n if (r.getBuffer.call(g, !0), !1 !== (s = (!d.jit || void 0 !== b.validPositions[r.seekPrevious.call(g, t)]) && (null != d.fn ? d.fn.test(i, b, t, o, k, u.call(g, e)) : (i === d.def || i === k.skipOptionalPartCharacter) && \"\" !== d.def && {\n c: n.getPlaceholder.call(g, t, d, !0) || d.def,\n pos: t\n }))) {\n var p = void 0 !== s.c ? s.c : i, h = t;\n return p = p === k.skipOptionalPartCharacter && !0 === d.static ? n.getPlaceholder.call(g, t, d, !0) || d.def : p, \n !0 !== (s = P(s)) && void 0 !== s.pos && s.pos !== t && (h = s.pos), !0 !== s && void 0 === s.pos && void 0 === s.c ? !1 : (!1 === v.call(g, e, y.extend({}, c, {\n input: l.call(g, p, d, h)\n }), a, h) && (s = !1), !1);\n }\n return !0;\n })), s;\n }\n void 0 !== e.begin && (x = g.isRTL ? e.end : e.begin);\n var S = !0, M = y.extend(!0, {}, b.validPositions);\n if (!1 === k.keepStatic && void 0 !== b.excludes[x] && !0 !== o && !0 !== a) for (var _ = x; _ < (g.isRTL ? e.begin : e.end); _++) void 0 !== b.excludes[_] && (b.excludes[_] = void 0, \n delete b.tests[_]);\n if (\"function\" == typeof k.preValidation && !0 !== a && !0 !== d && (S = P(S = k.preValidation.call(g, r.getBuffer.call(g), x, t, u.call(g, e), k, b, e, i || o))), \n !0 === S) {\n if (S = w(x, t, i), (!i || !0 === a) && !1 === S && !0 !== d) {\n var O = b.validPositions[x];\n if (!O || !0 !== O.match.static || O.match.def !== t && t !== k.skipOptionalPartCharacter) {\n if (k.insertMode || void 0 === b.validPositions[r.seekNext.call(g, x)] || e.end > x) {\n var E = !1;\n if (b.jitOffset[x] && void 0 === b.validPositions[r.seekNext.call(g, x)] && !1 !== (S = f.call(g, x + b.jitOffset[x], t, !0, !0)) && (!0 !== o && (S.caret = x), \n E = !0), e.end > x && (b.validPositions[x] = void 0), !E && !r.isMask.call(g, x, k.keepStatic && 0 === x)) for (var T = x + 1, j = r.seekNext.call(g, x, !1, 0 !== x); T <= j; T++) if (!1 !== (S = w(T, t, i))) {\n S = h.call(g, x, void 0 !== S.pos ? S.pos : T) || S, x = T;\n break;\n }\n }\n } else S = {\n caret: r.seekNext.call(g, x)\n };\n }\n g.hasAlternator && !0 !== o && !i && (!1 === S && k.keepStatic && (c.call(g, r.getBuffer.call(g)) || 0 === x) ? S = s.call(g, x, t, i, a, void 0, e) : (u.call(g, e) && b.tests[x] && b.tests[x].length > 1 && k.keepStatic || 1 == S && !0 !== k.numericInput && b.tests[x] && b.tests[x].length > 1 && r.getLastValidPosition.call(g, void 0, !0) > x) && (S = s.call(g, !0))), \n !0 === S && (S = {\n pos: x\n });\n }\n if (\"function\" == typeof k.postValidation && !0 !== a && !0 !== d) {\n var A = k.postValidation.call(g, r.getBuffer.call(g, !0), void 0 !== e.begin ? g.isRTL ? e.end : e.begin : e, t, S, k, b, i, m);\n void 0 !== A && (S = !0 === A ? S : A);\n }\n S && void 0 === S.pos && (S.pos = x), !1 === S || !0 === d ? (r.resetMaskSet.call(g, !0), \n b.validPositions = y.extend(!0, [], M)) : h.call(g, void 0, x, !0);\n var D = P(S);\n void 0 !== g.maxLength && (r.getBuffer.call(g).length > g.maxLength && !a && (r.resetMaskSet.call(g, !0), \n b.validPositions = y.extend(!0, [], M), D = !1));\n return D;\n }\n function d(e, t, i) {\n for (var a = this.maskset, r = !1, o = n.getTests.call(this, e), s = 0; s < o.length; s++) {\n if (o[s].match && (o[s].match.nativeDef === t.match[i.shiftPositions ? \"def\" : \"nativeDef\"] && (!i.shiftPositions || !t.match.static) || o[s].match.nativeDef === t.match.nativeDef || i.regex && !o[s].match.static && o[s].match.fn.test(t.input, a, e, !1, i))) {\n r = !0;\n break;\n }\n if (o[s].match && o[s].match.def === t.match.nativeDef) {\n r = void 0;\n break;\n }\n }\n return !1 === r && void 0 !== a.jitOffset[e] && (r = d.call(this, e + a.jitOffset[e], t, i)), \n r;\n }\n function p(e, t, i) {\n var n, a, s = this, l = this.maskset, c = this.opts, u = this.dependencyLib, f = c.skipOptionalPartCharacter, d = s.isRTL ? i.slice().reverse() : i;\n if (c.skipOptionalPartCharacter = \"\", !0 === e) r.resetMaskSet.call(s), l.tests = {}, \n e = 0, t = i.length, a = r.determineNewCaretPosition.call(s, {\n begin: 0,\n end: 0\n }, !1).begin; else {\n for (n = e; n < t; n++) delete l.validPositions[n];\n a = e;\n }\n var p = new u.Event(\"keypress\");\n for (n = e; n < t; n++) {\n p.key = d[n].toString(), s.ignorable = !1;\n var h = o.EventHandlers.keypressEvent.call(s, p, !0, !1, !1, a);\n !1 !== h && void 0 !== h && (a = h.forwardPosition);\n }\n c.skipOptionalPartCharacter = f;\n }\n function h(e, t, i) {\n var a = this, o = this.maskset, s = this.dependencyLib;\n if (void 0 === e) for (e = t - 1; e > 0 && !o.validPositions[e]; e--) ;\n for (var l = e; l < t; l++) {\n if (void 0 === o.validPositions[l] && !r.isMask.call(a, l, !1)) if (0 == l ? n.getTest.call(a, l) : o.validPositions[l - 1]) {\n var c = n.getTests.call(a, l).slice();\n \"\" === c[c.length - 1].match.def && c.pop();\n var u, d = n.determineTestTemplate.call(a, l, c);\n if (d && (!0 !== d.match.jit || \"master\" === d.match.newBlockMarker && (u = o.validPositions[l + 1]) && !0 === u.match.optionalQuantifier) && ((d = s.extend({}, d, {\n input: n.getPlaceholder.call(a, l, d.match, !0) || d.match.def\n })).generatedInput = !0, v.call(a, l, d, !0), !0 !== i)) {\n var p = o.validPositions[t].input;\n return o.validPositions[t] = void 0, f.call(a, t, p, !0, !0);\n }\n }\n }\n }\n function v(e, t, i, a) {\n var o = this, s = this.maskset, l = this.opts, c = this.dependencyLib;\n function u(e, t, i) {\n var n = t[e];\n if (void 0 !== n && !0 === n.match.static && !0 !== n.match.optionality && (void 0 === t[0] || void 0 === t[0].alternation)) {\n var a = i.begin <= e - 1 ? t[e - 1] && !0 === t[e - 1].match.static && t[e - 1] : t[e - 1], r = i.end > e + 1 ? t[e + 1] && !0 === t[e + 1].match.static && t[e + 1] : t[e + 1];\n return a && r;\n }\n return !1;\n }\n var p = 0, h = void 0 !== e.begin ? e.begin : e, v = void 0 !== e.end ? e.end : e, m = !0;\n if (e.begin > e.end && (h = e.end, v = e.begin), a = void 0 !== a ? a : h, void 0 === i && (h !== v || l.insertMode && void 0 !== s.validPositions[a] || void 0 === t || t.match.optionalQuantifier || t.match.optionality)) {\n var g, y = c.extend(!0, {}, s.validPositions), k = r.getLastValidPosition.call(o, void 0, !0);\n for (s.p = h, g = k; g >= h; g--) delete s.validPositions[g], void 0 === t && delete s.tests[g + 1];\n var b, x, P = a, w = P;\n for (t && (s.validPositions[a] = c.extend(!0, {}, t), w++, P++), g = t ? v : v - 1; g <= k; g++) {\n if (void 0 !== (b = y[g]) && !0 !== b.generatedInput && (g >= v || g >= h && u(g, y, {\n begin: h,\n end: v\n }))) {\n for (;\"\" !== n.getTest.call(o, w).match.def; ) {\n if (!1 !== (x = d.call(o, w, b, l)) || \"+\" === b.match.def) {\n \"+\" === b.match.def && r.getBuffer.call(o, !0);\n var S = f.call(o, w, b.input, \"+\" !== b.match.def, !0);\n if (m = !1 !== S, P = (S.pos || w) + 1, !m && x) break;\n } else m = !1;\n if (m) {\n void 0 === t && b.match.static && g === e.begin && p++;\n break;\n }\n if (!m && r.getBuffer.call(o), w > s.maskLength) break;\n w++;\n }\n \"\" == n.getTest.call(o, w).match.def && (m = !1), w = P;\n }\n if (!m) break;\n }\n if (!m) return s.validPositions = c.extend(!0, [], y), r.resetMaskSet.call(o, !0), \n !1;\n } else t && n.getTest.call(o, a).match.cd === t.match.cd && (s.validPositions[a] = c.extend(!0, {}, t));\n return r.resetMaskSet.call(o, !0), p;\n }\n }\n }, t = {};\n function i(n) {\n var a = t[n];\n if (void 0 !== a) return a.exports;\n var r = t[n] = {\n exports: {}\n };\n return e[n](r, r.exports, i), r.exports;\n }\n var n = {};\n return function() {\n var e, t = n;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0, i(7149), i(3194), i(9302), i(4013), i(3851), i(219), i(207), \n i(5296);\n var a = ((e = i(2394)) && e.__esModule ? e : {\n default: e\n }).default;\n t.default = a;\n }(), n;\n }();\n}));","/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"\" +\n\t\t\t\"\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented\n// as part of Sizzle so let's maintain them in the 3.x line\n// for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces \";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"