{"version":3,"file":"js/774-ea45036eba6111fdef44.js","mappings":"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","sources":["webpack://app/./node_modules/jquery/src/var/support.js","webpack://app/./node_modules/jquery/src/core/support.js","webpack://app/./node_modules/jquery/src/var/pnum.js","webpack://app/./node_modules/jquery/src/manipulation/var/rtagName.js","webpack://app/./node_modules/jquery/src/exports/amd.js","webpack://app/./node_modules/jquery/src/var/rcssNum.js","webpack://app/./node_modules/jquery/src/css/support.js","webpack://app/./node_modules/jquery/src/selector/contains.js","webpack://app/./node_modules/jquery/src/manipulation/setGlobalEval.js","webpack://app/./node_modules/jquery/src/css/var/rnumnonpx.js","webpack://app/./node_modules/jquery/src/queue/delay.js","webpack://app/./node_modules/jquery/src/manipulation/wrapMap.js","webpack://app/./node_modules/jquery/src/core/parseXML.js","webpack://app/./node_modules/jquery/src/core/readyException.js","webpack://app/./node_modules/jquery/src/manipulation/var/rscriptType.js","webpack://app/./node_modules/jquery/src/ajax/var/rquery.js","webpack://app/./node_modules/jquery/src/var/splice.js","webpack://app/./node_modules/jquery/src/var/isFunction.js","webpack://app/./node_modules/jquery/src/var/hasOwn.js","webpack://app/./node_modules/jquery/src/css/var/cssExpand.js","webpack://app/./node_modules/jquery/src/manipulation/_evalUrl.js","webpack://app/./node_modules/jquery/src/ajax/var/nonce.js","webpack://app/./node_modules/jquery/src/core/ready.js","webpack://app/./node_modules/jquery/src/queue.js","webpack://app/./node_modules/jquery/src/css/var/swap.js","webpack://app/./node_modules/jquery/src/css/hiddenVisibleSelectors.js","webpack://app/./node_modules/jquery/src/var/fnToString.js","webpack://app/./node_modules/jquery/src/exports/global.js","webpack://app/./node_modules/jquery/src/var/arr.js","webpack://app/./node_modules/jquery/src/var/getProto.js","webpack://app/./node_modules/jquery/src/effects.js","webpack://app/./node_modules/jquery/src/traversing.js","webpack://app/./node_modules/jquery/src/core/DOMEval.js","webpack://app/./node_modules/jquery/src/jquery.js","webpack://app/./node_modules/jquery/src/deprecated/event.js","webpack://app/./node_modules/jquery/src/traversing/var/rneedsContext.js","webpack://app/./node_modules/jquery/src/serialize.js","webpack://app/./node_modules/jquery/src/var/slice.js","webpack://app/./node_modules/jquery/src/traversing/var/siblings.js","webpack://app/./node_modules/jquery/src/css/addGetHookIf.js","webpack://app/./node_modules/jquery/src/callbacks.js","webpack://app/./node_modules/jquery/src/core/parseHTML.js","webpack://app/./node_modules/jquery/src/core/var/rsingleTag.js","webpack://app/./node_modules/jquery/src/css/var/getStyles.js","webpack://app/./node_modules/jquery/src/event/trigger.js","webpack://app/./node_modules/jquery/src/dimensions.js","webpack://app/./node_modules/jquery/src/var/toString.js","webpack://app/./node_modules/jquery/src/manipulation/getAll.js","webpack://app/./node_modules/jquery/src/data/Data.js","webpack://app/./node_modules/jquery/src/css/showHide.js","webpack://app/./node_modules/jquery/src/css/var/isHiddenWithinTree.js","webpack://app/./node_modules/jquery/src/selector.js","webpack://app/./node_modules/jquery/src/effects/Tween.js","webpack://app/./node_modules/jquery/src/var/indexOf.js","webpack://app/./node_modules/jquery/src/manipulation/support.js","webpack://app/./node_modules/jquery/src/ajax/xhr.js","webpack://app/./node_modules/jquery/src/core/isAttached.js","webpack://app/./node_modules/jquery/src/effects/animatedSelector.js","webpack://app/./node_modules/jquery/src/attributes.js","webpack://app/./node_modules/jquery/src/attributes/support.js","webpack://app/./node_modules/jquery/src/css/finalPropName.js","webpack://app/./node_modules/jquery/src/css/adjustCSS.js","webpack://app/./node_modules/jquery/src/ajax/var/location.js","webpack://app/./node_modules/jquery/src/deferred/exceptionHook.js","webpack://app/./node_modules/jquery/src/wrap.js","webpack://app/./node_modules/jquery/src/attributes/prop.js","webpack://app/./node_modules/jquery/src/deprecated.js","webpack://app/./node_modules/jquery/src/attributes/attr.js","webpack://app/./node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js","webpack://app/./node_modules/jquery/src/ajax/jsonp.js","webpack://app/./node_modules/jquery/src/deferred.js","webpack://app/./node_modules/jquery/src/core/access.js","webpack://app/./node_modules/jquery/src/deprecated/ajax-event-alias.js","webpack://app/./node_modules/jquery/src/attributes/val.js","webpack://app/./node_modules/jquery/src/data.js","webpack://app/./node_modules/jquery/src/var/push.js","webpack://app/./node_modules/jquery/src/var/isWindow.js","webpack://app/./node_modules/jquery/src/selector/escapeSelector.js","webpack://app/./node_modules/jquery/src/manipulation/buildFragment.js","webpack://app/./node_modules/jquery/src/var/pop.js","webpack://app/./node_modules/jquery/src/var/documentElement.js","webpack://app/./node_modules/jquery/src/offset.js","webpack://app/./node_modules/jquery/src/data/var/dataUser.js","webpack://app/./node_modules/jquery/src/manipulation.js","webpack://app/./node_modules/jquery/src/css/var/rcustomProp.js","webpack://app/./node_modules/jquery/src/css/var/rboxStyle.js","webpack://app/./node_modules/jquery/src/data/var/acceptData.js","webpack://app/./node_modules/jquery/src/traversing/findFilter.js","webpack://app/./node_modules/jquery/src/var/flat.js","webpack://app/./node_modules/jquery/src/var/class2type.js","webpack://app/./node_modules/jquery/src/var/rcheckableType.js","webpack://app/./node_modules/jquery/src/core.js","webpack://app/./node_modules/jquery/src/ajax/script.js","webpack://app/./node_modules/jquery/src/core/toType.js","webpack://app/./node_modules/jquery/src/var/document.js","webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/jquery/src/traversing/var/dir.js","webpack://app/./node_modules/jquery/src/var/rtrimCSS.js","webpack://app/./node_modules/jquery/src/event.js","webpack://app/./node_modules/jquery/src/var/ObjectFunctionString.js","webpack://app/./node_modules/jquery/src/var/rnothtmlwhite.js","webpack://app/./node_modules/jquery/src/attributes/classes.js","webpack://app/./node_modules/jquery/src/ajax/load.js","webpack://app/./node_modules/jquery/src/data/var/dataPriv.js","webpack://app/./node_modules/jquery/src/css.js","webpack://app/./node_modules/jquery/src/core/stripAndCollapse.js","webpack://app/./node_modules/jquery/src/core/init.js","webpack://app/./node_modules/jquery/src/var/sort.js","webpack://app/./node_modules/jquery/src/css/curCSS.js","webpack://app/./node_modules/jquery/src/var/whitespace.js","webpack://app/./node_modules/jquery/src/core/camelCase.js","webpack://app/./node_modules/jquery/src/core/nodeName.js","webpack://app/./node_modules/jquery/src/ajax.js"],"sourcesContent":["define( function() {\n\t\"use strict\";\n\n\t// All support tests are defined in their respective modules.\n\treturn {};\n} );\n","define( [\n\t\"../var/document\",\n\t\"../var/support\"\n], function( document, support ) {\n\n\"use strict\";\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\nreturn support;\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n} );\n","define( function() {\n\t\"use strict\";\n\n\t// rtagName captures the name from the first start tag in a string of HTML\n\t// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n\t// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\n\treturn ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n} );\n","define( [\n\t\"../var/pnum\"\n], function( pnum ) {\n\n\"use strict\";\n\nreturn new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n} );\n","define( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"../var/documentElement\",\n\t\"../var/support\"\n], function( jQuery, document, documentElement, support ) {\n\n\"use strict\";\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 = \"box-sizing:content-box;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\nreturn support;\n\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\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","define( [\n\t\"../data/var/dataPriv\"\n], function( dataPriv ) {\n\n\"use strict\";\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\nreturn setGlobalEval;\n} );\n","define( [\n\t\"../../var/pnum\"\n], function( pnum ) {\n\t\"use strict\";\n\n\treturn new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n} );\n","define( [\n\t\"../core\",\n\t\"../queue\",\n\t\"../effects\" // Delay is optional because of this dependency\n], function( jQuery ) {\n\n\"use strict\";\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\nreturn jQuery.fn.delay;\n} );\n","define( [\n\t\"./support\"\n], function( support ) {\n\n\"use strict\";\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 <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\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, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\nreturn wrapMap;\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\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\nreturn jQuery.parseXML;\n\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn ( /^$|^module$|\\/(?:java|ecma)script/i );\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn ( /\\?/ );\n} );\n","define( [\n\t\"./arr\"\n], function( arr ) {\n\n\"use strict\";\n\nreturn arr.splice;\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> 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} );\n","define( [\n\t\"./class2type\"\n], function( class2type ) {\n\t\"use strict\";\n\n\treturn class2type.hasOwnProperty;\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n} );\n","define( [\n\t\"../ajax\"\n], function( jQuery ) {\n\n\"use strict\";\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\nreturn jQuery._evalUrl;\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn { guid: Date.now() };\n} );\n","define( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"../core/readyException\",\n\t\"../deferred\"\n], function( jQuery, document ) {\n\n\"use strict\";\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","define( [\n\t\"./core\",\n\t\"./data/var/dataPriv\",\n\t\"./deferred\",\n\t\"./callbacks\"\n], function( jQuery, dataPriv ) {\n\n\"use strict\";\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} );\n\nreturn jQuery;\n} );\n","define( function() {\n\n\"use strict\";\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nreturn 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} );\n","define( [\n\t\"../core\",\n\t\"../selector\"\n], function( jQuery ) {\n\n\"use strict\";\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","define( [\n\t\"./hasOwn\"\n], function( hasOwn ) {\n\t\"use strict\";\n\n\treturn hasOwn.toString;\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn [];\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn Object.getPrototypeOf;\n} );\n","define( [\n\t\"./core\",\n\t\"./core/camelCase\",\n\t\"./var/document\",\n\t\"./var/isFunction\",\n\t\"./var/rcssNum\",\n\t\"./var/rnothtmlwhite\",\n\t\"./css/var/cssExpand\",\n\t\"./css/var/isHiddenWithinTree\",\n\t\"./css/adjustCSS\",\n\t\"./data/var/dataPriv\",\n\t\"./css/showHide\",\n\n\t\"./core/init\",\n\t\"./queue\",\n\t\"./deferred\",\n\t\"./traversing\",\n\t\"./manipulation\",\n\t\"./css\",\n\t\"./effects/Tween\"\n], function( jQuery, camelCase, document, isFunction, rcssNum, rnothtmlwhite, cssExpand,\n\tisHiddenWithinTree, adjustCSS, dataPriv, showHide ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"./core\",\n\t\"./var/getProto\",\n\t\"./var/indexOf\",\n\t\"./traversing/var/dir\",\n\t\"./traversing/var/siblings\",\n\t\"./traversing/var/rneedsContext\",\n\t\"./core/nodeName\",\n\n\t\"./core/init\",\n\t\"./traversing/findFilter\",\n\t\"./selector\"\n], function( jQuery, getProto, indexOf, dir, siblings, rneedsContext, nodeName ) {\n\n\"use strict\";\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// <object> 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} );\n\nreturn jQuery;\n} );\n","define( [\n\t\"../var/document\"\n], function( document ) {\n\t\"use strict\";\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\treturn DOMEval;\n} );\n","define( [\n\t\"./core\",\n\t\"./selector\",\n\t\"./traversing\",\n\t\"./callbacks\",\n\t\"./deferred\",\n\t\"./deferred/exceptionHook\",\n\t\"./core/ready\",\n\t\"./data\",\n\t\"./queue\",\n\t\"./queue/delay\",\n\t\"./attributes\",\n\t\"./event\",\n\t\"./manipulation\",\n\t\"./manipulation/_evalUrl\",\n\t\"./wrap\",\n\t\"./css\",\n\t\"./css/hiddenVisibleSelectors\",\n\t\"./serialize\",\n\t\"./ajax\",\n\t\"./ajax/xhr\",\n\t\"./ajax/script\",\n\t\"./ajax/jsonp\",\n\t\"./ajax/load\",\n\t\"./core/parseXML\",\n\t\"./core/parseHTML\",\n\t\"./effects\",\n\t\"./effects/animatedSelector\",\n\t\"./offset\",\n\t\"./dimensions\",\n\t\"./deprecated\",\n\t\"./exports/amd\",\n\t\"./exports/global\"\n], function( jQuery ) {\n\n\"use strict\";\n\nreturn jQuery;\n\n} );\n","define( [\n\t\"../core\",\n\n\t\"../event\",\n\t\"../event/trigger\"\n], function( jQuery ) {\n\n\"use strict\";\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n} );\n","define( [\n\t\"../../core\",\n\t\"../../selector\"\n], function( jQuery ) {\n\t\"use strict\";\n\n\treturn jQuery.expr.match.needsContext;\n} );\n","define( [\n\t\"./core\",\n\t\"./core/toType\",\n\t\"./var/rcheckableType\",\n\t\"./var/isFunction\",\n\t\"./core/init\",\n\t\"./traversing\", // filter\n\t\"./attributes/prop\"\n], function( jQuery, toType, rcheckableType, isFunction ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"./arr\"\n], function( arr ) {\n\t\"use strict\";\n\n\treturn arr.slice;\n} );\n","define( function() {\n\n\"use strict\";\n\nreturn 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} );\n","define( function() {\n\n\"use strict\";\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\nreturn addGetHookIf;\n\n} );\n","define( [\n\t\"./core\",\n\t\"./core/toType\",\n\t\"./var/isFunction\",\n\t\"./var/rnothtmlwhite\"\n], function( jQuery, toType, isFunction, rnothtmlwhite ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"./var/rsingleTag\",\n\t\"../manipulation/buildFragment\",\n\n\t// This is the only module that needs core/support\n\t\"./support\"\n], function( jQuery, document, rsingleTag, buildFragment, support ) {\n\n\"use strict\";\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\nreturn jQuery.parseHTML;\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\t// rsingleTag matches a string consisting of a single HTML element with no attributes\n\t// and captures the element's name\n\treturn ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn 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} );\n","define( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"../data/var/dataPriv\",\n\t\"../data/var/acceptData\",\n\t\"../var/hasOwn\",\n\t\"../var/isFunction\",\n\t\"../var/isWindow\",\n\t\"../event\"\n], function( jQuery, document, dataPriv, acceptData, hasOwn, isFunction, isWindow ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"./core\",\n\t\"./core/access\",\n\t\"./var/isWindow\",\n\t\"./css\"\n], function( jQuery, access, isWindow ) {\n\n\"use strict\";\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\nreturn jQuery;\n} );\n","define( [\n\t\"./class2type\"\n], function( class2type ) {\n\t\"use strict\";\n\n\treturn class2type.toString;\n} );\n","define( [\n\t\"../core\",\n\t\"../core/nodeName\"\n], function( jQuery, nodeName ) {\n\n\"use strict\";\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\nreturn getAll;\n} );\n","define( [\n\t\"../core\",\n\t\"../core/camelCase\",\n\t\"../var/rnothtmlwhite\",\n\t\"./var/acceptData\"\n], function( jQuery, camelCase, rnothtmlwhite, acceptData ) {\n\n\"use strict\";\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};\n\nreturn Data;\n} );\n","define( [\n\t\"../core\",\n\t\"../data/var/dataPriv\",\n\t\"../css/var/isHiddenWithinTree\"\n], function( jQuery, dataPriv, isHiddenWithinTree ) {\n\n\"use strict\";\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} );\n\nreturn showHide;\n} );\n","define( [\n\t\"../../core\",\n\t\"../../core/isAttached\"\n\n\t// css is assumed\n], function( jQuery, isAttached ) {\n\t\"use strict\";\n\n\t// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n\t// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n\t// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n\t// * A hidden ancestor does not force an element to be classified as hidden.\n\t// * Being disconnected from the document does not force an element to be classified as hidden.\n\t// These differences improve the behavior of .toggle() et al. when applied to elements that are\n\t// detached or contained within hidden ancestors (gh-2404, gh-2863).\n\treturn 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","define( [\n\t\"./core\",\n\t\"./core/nodeName\",\n\t\"./var/arr\",\n\t\"./var/document\",\n\t\"./var/indexOf\",\n\t\"./var/hasOwn\",\n\t\"./var/pop\",\n\t\"./var/push\",\n\t\"./var/slice\",\n\t\"./var/sort\",\n\t\"./var/splice\",\n\t\"./var/whitespace\",\n\t\"./var/rtrimCSS\",\n\t\"./var/support\",\n\n\t// The following utils are attached directly to the jQuery object.\n\t\"./selector/contains\",\n\t\"./selector/escapeSelector\"\n], function( jQuery, nodeName, arr, document, indexOf, hasOwn, pop, push,\n\tslice, sort, splice, whitespace, rtrimCSS, support ) {\n\n\"use strict\";\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\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\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\tpreferredDoc != 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\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\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: <number>) 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 as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\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} );\n","define( [\n\t\"../core\",\n\t\"../css/finalPropName\",\n\n\t\"../css\"\n], function( jQuery, finalPropName ) {\n\n\"use strict\";\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","define( [\n\t\"./arr\"\n], function( arr ) {\n\t\"use strict\";\n\n\treturn arr.indexOf;\n} );\n","define( [\n\t\"../var/document\",\n\t\"../var/support\"\n], function( document, support ) {\n\n\"use strict\";\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 = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\nreturn support;\n\n} );\n","define( [\n\t\"../core\",\n\t\"../var/support\",\n\t\"../ajax\"\n], function( jQuery, support ) {\n\n\"use strict\";\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","define( [\n\t\"../core\",\n\t\"../var/documentElement\",\n\t\"../selector/contains\" // jQuery.contains\n], function( jQuery, documentElement ) {\n\t\"use strict\";\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}\n\n\treturn isAttached;\n} );\n","define( [\n\t\"../core\",\n\t\"../selector\",\n\t\"../effects\"\n], function( jQuery ) {\n\n\"use strict\";\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n} );\n","define( [\n\t\"./core\",\n\t\"./attributes/attr\",\n\t\"./attributes/prop\",\n\t\"./attributes/classes\",\n\t\"./attributes/val\"\n], function( jQuery ) {\n\n\"use strict\";\n\n// Return jQuery for attributes-only inclusion\nreturn jQuery;\n} );\n","define( [\n\t\"../var/document\",\n\t\"../var/support\"\n], function( document, support ) {\n\n\"use strict\";\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\nreturn support;\n\n} );\n","define( [\n\t\"../var/document\",\n\t\"../core\"\n], function( document, jQuery ) {\n\n\"use strict\";\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\nreturn finalPropName;\n\n} );\n","define( [\n\t\"../core\",\n\t\"../var/rcssNum\"\n], function( jQuery, rcssNum ) {\n\n\"use strict\";\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\nreturn adjustCSS;\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn window.location;\n} );\n","define( [\n\t\"../core\",\n\t\"../deferred\"\n], function( jQuery ) {\n\n\"use strict\";\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","define( [\n\t\"./core\",\n\t\"./var/isFunction\",\n\t\"./core/init\",\n\t\"./manipulation\", // clone\n\t\"./traversing\" // parent, contents\n], function( jQuery, isFunction ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"../core\",\n\t\"../core/access\",\n\t\"./support\",\n\t\"../selector\"\n], function( jQuery, access, support ) {\n\n\"use strict\";\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","define( [\n\t\"./core\",\n\t\"./core/nodeName\",\n\t\"./core/camelCase\",\n\t\"./core/toType\",\n\t\"./var/isFunction\",\n\t\"./var/isWindow\",\n\t\"./var/slice\",\n\n\t\"./deprecated/ajax-event-alias\",\n\t\"./deprecated/event\"\n], function( jQuery, nodeName, camelCase, toType, isFunction, isWindow, slice ) {\n\n\"use strict\";\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n} );\n","define( [\n\t\"../core\",\n\t\"../core/access\",\n\t\"../core/nodeName\",\n\t\"./support\",\n\t\"../var/rnothtmlwhite\",\n\t\"../selector\"\n], function( jQuery, access, nodeName, support, rnothtmlwhite ) {\n\n\"use strict\";\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","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n};\n\nconst csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n};\n\nconst csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n};\n\nconst refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n};\n\nconst AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n};\n\nvar prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n};\n\nvar createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n};\n\nvar processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n}\n\nconst fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n};\n\nconst enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n};\n\nconst disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n};\n\nvar disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n }\n formContent += '<input type=\"submit\" />';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n};\n\nconst isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n};\n\nconst Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n}\n\nexport { Rails as default };\n","define( [\n\t\"../core\",\n\t\"../var/isFunction\",\n\t\"./var/nonce\",\n\t\"./var/rquery\",\n\t\"../ajax\"\n], function( jQuery, isFunction, nonce, rquery ) {\n\n\"use strict\";\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n} );\n","define( [\n\t\"./core\",\n\t\"./var/isFunction\",\n\t\"./var/slice\",\n\t\"./callbacks\"\n], function( jQuery, isFunction, slice ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"../core\",\n\t\"../core/toType\",\n\t\"../var/isFunction\"\n], function( jQuery, toType, isFunction ) {\n\n\"use strict\";\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\nreturn access;\n\n} );\n","define( [\n\t\"../core\",\n\t\"../ajax\",\n\t\"../event\"\n], function( jQuery ) {\n\n\"use strict\";\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n} );\n","define( [\n\t\"../core\",\n\t\"../core/stripAndCollapse\",\n\t\"./support\",\n\t\"../core/nodeName\",\n\t\"../var/isFunction\",\n\n\t\"../core/init\"\n], function( jQuery, stripAndCollapse, support, nodeName, isFunction ) {\n\n\"use strict\";\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","define( [\n\t\"./core\",\n\t\"./core/access\",\n\t\"./core/camelCase\",\n\t\"./data/var/dataPriv\",\n\t\"./data/var/dataUser\"\n], function( jQuery, access, camelCase, dataPriv, dataUser ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"./arr\"\n], function( arr ) {\n\t\"use strict\";\n\n\treturn arr.push;\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n} );\n","define( [\n\t\"../core\"\n], function( jQuery ) {\n\n\"use strict\";\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","define( [\n\t\"../core\",\n\t\"../core/toType\",\n\t\"../core/isAttached\",\n\t\"./var/rtagName\",\n\t\"./var/rscriptType\",\n\t\"./wrapMap\",\n\t\"./getAll\",\n\t\"./setGlobalEval\"\n], function( jQuery, toType, isAttached, rtagName, rscriptType, wrapMap, getAll, setGlobalEval ) {\n\n\"use strict\";\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\nreturn buildFragment;\n} );\n","define( [\n\t\"./arr\"\n], function( arr ) {\n\n\"use strict\";\n\nreturn arr.pop;\n\n} );\n","define( [\n\t\"./document\"\n], function( document ) {\n\t\"use strict\";\n\n\treturn document.documentElement;\n} );\n","define( [\n\t\"./core\",\n\t\"./core/access\",\n\t\"./var/documentElement\",\n\t\"./var/isFunction\",\n\t\"./css/var/rnumnonpx\",\n\t\"./css/curCSS\",\n\t\"./css/addGetHookIf\",\n\t\"./css/support\",\n\t\"./var/isWindow\",\n\t\"./core/init\",\n\t\"./css\",\n\t\"./selector\" // contains\n], function( jQuery, access, documentElement, isFunction, rnumnonpx,\n\tcurCSS, addGetHookIf, support, isWindow ) {\n\n\"use strict\";\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\nreturn jQuery;\n} );\n","define( [\n\t\"../Data\"\n], function( Data ) {\n\t\"use strict\";\n\n\treturn new Data();\n} );\n","define( [\n\t\"./core\",\n\t\"./core/isAttached\",\n\t\"./var/flat\",\n\t\"./var/isFunction\",\n\t\"./var/push\",\n\t\"./var/rcheckableType\",\n\t\"./core/access\",\n\t\"./manipulation/var/rtagName\",\n\t\"./manipulation/var/rscriptType\",\n\t\"./manipulation/wrapMap\",\n\t\"./manipulation/getAll\",\n\t\"./manipulation/setGlobalEval\",\n\t\"./manipulation/buildFragment\",\n\t\"./manipulation/support\",\n\n\t\"./data/var/dataPriv\",\n\t\"./data/var/dataUser\",\n\t\"./data/var/acceptData\",\n\t\"./core/DOMEval\",\n\t\"./core/nodeName\",\n\n\t\"./core/init\",\n\t\"./traversing\",\n\t\"./selector\",\n\t\"./event\"\n], function( jQuery, isAttached, flat, isFunction, push, rcheckableType,\n\taccess, rtagName, rscriptType,\n\twrapMap, getAll, setGlobalEval, buildFragment, support,\n\tdataPriv, dataUser, acceptData, DOMEval, nodeName ) {\n\n\"use strict\";\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 = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\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// Re-enable 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} );\n\nreturn jQuery;\n} );\n","define( function() {\n\n\"use strict\";\n\nreturn /^--/;\n\n} );\n","define( [\n\t\"./cssExpand\"\n], function( cssExpand ) {\n\t\"use strict\";\n\n\treturn new RegExp( cssExpand.join( \"|\" ), \"i\" );\n} );\n","define( function() {\n\n\"use strict\";\n\n/**\n * Determines whether an object can have data\n */\nreturn 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","define( [\n\t\"../core\",\n\t\"../var/indexOf\",\n\t\"../var/isFunction\",\n\t\"./var/rneedsContext\",\n\t\"../selector\"\n], function( jQuery, indexOf, isFunction, rneedsContext ) {\n\n\"use strict\";\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","define( [\n\t\"./arr\"\n], function( arr ) {\n\n\"use strict\";\n\n// Support: IE 9 - 11+, Edge 18+, Android Browser 4.0 - 4.3 only, iOS 7 - 11 only, Safari 11 only,\n// Firefox <= 61 only\n// Provide fallback for browsers without Array#flat.\nreturn arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n} );\n","define( function() {\n\t\"use strict\";\n\n\t// [[Class]] -> type pairs\n\treturn {};\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn ( /^(?:checkbox|radio)$/i );\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\ndefine( [\n\t\"./var/arr\",\n\t\"./var/getProto\",\n\t\"./var/slice\",\n\t\"./var/flat\",\n\t\"./var/push\",\n\t\"./var/indexOf\",\n\t\"./var/class2type\",\n\t\"./var/toString\",\n\t\"./var/hasOwn\",\n\t\"./var/fnToString\",\n\t\"./var/ObjectFunctionString\",\n\t\"./var/support\",\n\t\"./var/isFunction\",\n\t\"./var/isWindow\",\n\t\"./core/DOMEval\",\n\t\"./core/toType\"\n], function( arr, getProto, slice, flat, push, indexOf,\n\tclass2type, toString, hasOwn, fnToString, ObjectFunctionString,\n\tsupport, isFunction, isWindow, DOMEval, toType ) {\n\n\"use strict\";\n\nvar version = \"3.7.1\",\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}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( 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\nreturn jQuery;\n} );\n","define( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"../ajax\"\n], function( jQuery, document ) {\n\n\"use strict\";\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( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\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","define( [\n\t\"../var/class2type\",\n\t\"../var/toString\"\n], function( class2type, toString ) {\n\n\"use strict\";\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\nreturn toType;\n} );\n","define( function() {\n\t\"use strict\";\n\n\treturn window.document;\n} );\n","/*!\nTurbo 8.0.13\nCopyright © 2025 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * <turbo-frame id=\"messages\">\n * <a href=\"/messages/expanded\">\n * Show all expanded messages in this frame.\n * </a>\n *\n * <form action=\"/messages\">\n * Show response from this form within this frame.\n * </form>\n * </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n get shouldReloadWithMorph() {\n return this.src && this.refresh === \"morph\"\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nconst drive = {\n enabled: true,\n progressBarDelay: 500,\n unvisitableExtensions: new Set(\n [\n \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n \".xls\", \".xlsx\", \".xml\", \".zip\"\n ]\n )\n};\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getCspNonce();\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction cancelEvent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction getCspNonce() {\n const element = getMetaElement(\"csp-nonce\");\n\n if (element) {\n const { nonce, content } = element;\n return nonce == \"\" ? content : nonce\n }\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n if (name === \"_blank\") {\n return false\n } else if (name) {\n for (const element of document.getElementsByName(name)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nconst submitter = {\n \"aria-disabled\": {\n beforeSubmit: submitter => {\n submitter.setAttribute(\"aria-disabled\", \"true\");\n submitter.addEventListener(\"click\", cancelEvent);\n },\n\n afterSubmit: submitter => {\n submitter.removeAttribute(\"aria-disabled\");\n submitter.removeEventListener(\"click\", cancelEvent);\n }\n },\n\n \"disabled\": {\n beforeSubmit: submitter => submitter.disabled = true,\n afterSubmit: submitter => submitter.disabled = false\n }\n};\n\nclass Config {\n #submitter = null\n\n constructor(config) {\n Object.assign(this, config);\n }\n\n get submitter() {\n return this.#submitter\n }\n\n set submitter(value) {\n this.#submitter = submitter[value] || value;\n }\n}\n\nconst forms = new Config({\n mode: \"on\",\n submitter: \"disabled\"\n});\n\nconst config = {\n drive,\n forms\n};\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method.toUpperCase(),\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod.toUpperCase();\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const confirmMethod = typeof config.forms.confirm === \"function\" ?\n config.forms.confirm :\n FormSubmission.confirmMethod;\n\n const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n return doesNotTargetIFrame(target)\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.clickEventIsSignificant(event)) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n clickEventIsSignificant(event) {\n const target = event.composed ? event.target?.parentElement : event.target;\n const element = findLinkFromClickTarget(target) || target;\n\n return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link.target)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n static renderElement(currentElement, newElement) {\n // Abstract method\n }\n\n constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = this.constructor.renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get shouldAutofocus() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n if (this.shouldAutofocus) {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n /**\n * @typedef {object} MorphContext\n *\n * @property {Element} target\n * @property {Element} newContent\n * @property {ConfigInternal} config\n * @property {ConfigInternal['morphStyle']} morphStyle\n * @property {ConfigInternal['ignoreActive']} ignoreActive\n * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n * @property {ConfigInternal['restoreFocus']} restoreFocus\n * @property {Map<Node, Set<string>>} idMap\n * @property {Set<string>} persistentIds\n * @property {ConfigInternal['callbacks']} callbacks\n * @property {ConfigInternal['head']} head\n * @property {HTMLDivElement} pantry\n */\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n\n const noOp = () => {};\n /**\n * Default configuration values, updatable by users now\n * @type {ConfigInternal}\n */\n const defaults = {\n morphStyle: \"outerHTML\",\n callbacks: {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n },\n head: {\n style: \"merge\",\n shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n },\n restoreFocus: true,\n };\n\n /**\n * Core idiomorph function for morphing one DOM tree to another\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {Promise<Node[]> | Node[]}\n */\n function morph(oldNode, newContent, config = {}) {\n oldNode = normalizeElement(oldNode);\n const newNode = normalizeParent(newContent);\n const ctx = createMorphContext(oldNode, newNode, config);\n\n const morphedNodes = saveAndRestoreFocus(ctx, () => {\n return withHeadBlocking(\n ctx,\n oldNode,\n newNode,\n /** @param {MorphContext} ctx */ (ctx) => {\n if (ctx.morphStyle === \"innerHTML\") {\n morphChildren(ctx, oldNode, newNode);\n return Array.from(oldNode.childNodes);\n } else {\n return morphOuterHTML(ctx, oldNode, newNode);\n }\n },\n );\n });\n\n ctx.pantry.remove();\n return morphedNodes;\n }\n\n /**\n * Morph just the outerHTML of the oldNode to the newContent\n * We have to be careful because the oldNode could have siblings which need to be untouched\n * @param {MorphContext} ctx\n * @param {Element} oldNode\n * @param {Element} newNode\n * @returns {Node[]}\n */\n function morphOuterHTML(ctx, oldNode, newNode) {\n const oldParent = normalizeParent(oldNode);\n\n // basis for calulating which nodes were morphed\n // since there may be unmorphed sibling nodes\n let childNodes = Array.from(oldParent.childNodes);\n const index = childNodes.indexOf(oldNode);\n // how many elements are to the right of the oldNode\n const rightMargin = childNodes.length - (index + 1);\n\n morphChildren(\n ctx,\n oldParent,\n newNode,\n // these two optional params are the secret sauce\n oldNode, // start point for iteration\n oldNode.nextSibling, // end point for iteration\n );\n\n // return just the morphed nodes\n childNodes = Array.from(oldParent.childNodes);\n return childNodes.slice(index, childNodes.length - rightMargin);\n }\n\n /**\n * @param {MorphContext} ctx\n * @param {Function} fn\n * @returns {Promise<Node[]> | Node[]}\n */\n function saveAndRestoreFocus(ctx, fn) {\n if (!ctx.config.restoreFocus) return fn();\n let activeElement =\n /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n document.activeElement\n );\n\n // don't bother if the active element is not an input or textarea\n if (\n !(\n activeElement instanceof HTMLInputElement ||\n activeElement instanceof HTMLTextAreaElement\n )\n ) {\n return fn();\n }\n\n const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n const results = fn();\n\n if (activeElementId && activeElementId !== document.activeElement?.id) {\n activeElement = ctx.target.querySelector(`#${activeElementId}`);\n activeElement?.focus();\n }\n if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n activeElement.setSelectionRange(selectionStart, selectionEnd);\n }\n\n return results;\n }\n\n const morphChildren = (function () {\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm:\n * - for each node in the new content:\n * - search self and siblings for an id set match, falling back to a soft match\n * - if match found\n * - remove any nodes up to the match:\n * - pantry persistent nodes\n * - delete the rest\n * - morph the match\n * - elsif no match found, and node is persistent\n * - find its match by querying the old root (future) and pantry (past)\n * - move it and its children here\n * - morph it\n * - else\n * - create a new node from scratch as a last result\n *\n * @param {MorphContext} ctx the merge context\n * @param {Element} oldParent the old content that we are merging the new content into\n * @param {Element} newParent the parent element of the new content\n * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n */\n function morphChildren(\n ctx,\n oldParent,\n newParent,\n insertionPoint = null,\n endPoint = null,\n ) {\n // normalize\n if (\n oldParent instanceof HTMLTemplateElement &&\n newParent instanceof HTMLTemplateElement\n ) {\n // @ts-ignore we can pretend the DocumentFragment is an Element\n oldParent = oldParent.content;\n // @ts-ignore ditto\n newParent = newParent.content;\n }\n insertionPoint ||= oldParent.firstChild;\n\n // run through all the new content\n for (const newChild of newParent.childNodes) {\n // once we reach the end of the old parent content skip to the end and insert the rest\n if (insertionPoint && insertionPoint != endPoint) {\n const bestMatch = findBestMatch(\n ctx,\n newChild,\n insertionPoint,\n endPoint,\n );\n if (bestMatch) {\n // if the node to morph is not at the insertion point then remove/move up to it\n if (bestMatch !== insertionPoint) {\n removeNodesBetween(ctx, insertionPoint, bestMatch);\n }\n morphNode(bestMatch, newChild, ctx);\n insertionPoint = bestMatch.nextSibling;\n continue;\n }\n }\n\n // if the matching node is elsewhere in the original content\n if (newChild instanceof Element && ctx.persistentIds.has(newChild.id)) {\n // move it and all its children here and morph\n const movedChild = moveBeforeById(\n oldParent,\n newChild.id,\n insertionPoint,\n ctx,\n );\n morphNode(movedChild, newChild, ctx);\n insertionPoint = movedChild.nextSibling;\n continue;\n }\n\n // last resort: insert the new node from scratch\n const insertedNode = createNode(\n oldParent,\n newChild,\n insertionPoint,\n ctx,\n );\n // could be null if beforeNodeAdded prevented insertion\n if (insertedNode) {\n insertionPoint = insertedNode.nextSibling;\n }\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint && insertionPoint != endPoint) {\n const tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(ctx, tempNode);\n }\n }\n\n /**\n * This performs the action of inserting a new node while handling situations where the node contains\n * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n *\n * @param {Element} oldParent\n * @param {Node} newChild\n * @param {Node|null} insertionPoint\n * @param {MorphContext} ctx\n * @returns {Node|null}\n */\n function createNode(oldParent, newChild, insertionPoint, ctx) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n if (ctx.idMap.has(newChild)) {\n // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n const newEmptyChild = document.createElement(\n /** @type {Element} */ (newChild).tagName,\n );\n oldParent.insertBefore(newEmptyChild, insertionPoint);\n morphNode(newEmptyChild, newChild, ctx);\n ctx.callbacks.afterNodeAdded(newEmptyChild);\n return newEmptyChild;\n } else {\n // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n oldParent.insertBefore(newClonedChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newClonedChild);\n return newClonedChild;\n }\n }\n\n //=============================================================================\n // Matching Functions\n //=============================================================================\n const findBestMatch = (function () {\n /**\n * Scans forward from the startPoint to the endPoint looking for a match\n * for the node. It looks for an id set match first, then a soft match.\n * We abort softmatching if we find two future soft matches, to reduce churn.\n * @param {Node} node\n * @param {MorphContext} ctx\n * @param {Node | null} startPoint\n * @param {Node | null} endPoint\n * @returns {Node | null}\n */\n function findBestMatch(ctx, node, startPoint, endPoint) {\n let softMatch = null;\n let nextSibling = node.nextSibling;\n let siblingSoftMatchCount = 0;\n\n let cursor = startPoint;\n while (cursor && cursor != endPoint) {\n // soft matching is a prerequisite for id set matching\n if (isSoftMatch(cursor, node)) {\n if (isIdSetMatch(ctx, cursor, node)) {\n return cursor; // found an id set match, we're done!\n }\n\n // we haven't yet saved a soft match fallback\n if (softMatch === null) {\n // the current soft match will hard match something else in the future, leave it\n if (!ctx.idMap.has(cursor)) {\n // save this as the fallback if we get through the loop without finding a hard match\n softMatch = cursor;\n }\n }\n }\n if (\n softMatch === null &&\n nextSibling &&\n isSoftMatch(cursor, nextSibling)\n ) {\n // The next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, block soft matching for this node to allow\n // future siblings to soft match. This is to reduce churn in the DOM when an element\n // is prepended.\n if (siblingSoftMatchCount >= 2) {\n softMatch = undefined;\n }\n }\n\n // if the current node contains active element, stop looking for better future matches,\n // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n if (cursor.contains(document.activeElement)) break;\n\n cursor = cursor.nextSibling;\n }\n\n return softMatch || null;\n }\n\n /**\n *\n * @param {MorphContext} ctx\n * @param {Node} oldNode\n * @param {Node} newNode\n * @returns {boolean}\n */\n function isIdSetMatch(ctx, oldNode, newNode) {\n let oldSet = ctx.idMap.get(oldNode);\n let newSet = ctx.idMap.get(newNode);\n\n if (!newSet || !oldSet) return false;\n\n for (const id of oldSet) {\n // a potential match is an id in the new and old nodes that\n // has not already been merged into the DOM\n // But the newNode content we call this on has not been\n // merged yet and we don't allow duplicate IDs so it is simple\n if (newSet.has(id)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n *\n * @param {Node} oldNode\n * @param {Node} newNode\n * @returns {boolean}\n */\n function isSoftMatch(oldNode, newNode) {\n // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n const oldElt = /** @type {Element} */ (oldNode);\n const newElt = /** @type {Element} */ (newNode);\n\n return (\n oldElt.nodeType === newElt.nodeType &&\n oldElt.tagName === newElt.tagName &&\n // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n // its not persistent, and new nodes can't have any hidden state.\n (!oldElt.id || oldElt.id === newElt.id)\n );\n }\n\n return findBestMatch;\n })();\n\n //=============================================================================\n // DOM Manipulation Functions\n //=============================================================================\n\n /**\n * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n * - Persistent nodes will be moved to the pantry for later reuse\n * - Other nodes will have their hooks called, and then are removed\n * @param {MorphContext} ctx\n * @param {Node} node\n */\n function removeNode(ctx, node) {\n // are we going to id set match this later?\n if (ctx.idMap.has(node)) {\n // skip callbacks and move to pantry\n moveBefore(ctx.pantry, node, null);\n } else {\n // remove for realsies\n if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n node.parentNode?.removeChild(node);\n ctx.callbacks.afterNodeRemoved(node);\n }\n }\n\n /**\n * Remove nodes between the start and end nodes\n * @param {MorphContext} ctx\n * @param {Node} startInclusive\n * @param {Node} endExclusive\n * @returns {Node|null}\n */\n function removeNodesBetween(ctx, startInclusive, endExclusive) {\n /** @type {Node | null} */\n let cursor = startInclusive;\n // remove nodes until the endExclusive node\n while (cursor && cursor !== endExclusive) {\n let tempNode = /** @type {Node} */ (cursor);\n cursor = cursor.nextSibling;\n removeNode(ctx, tempNode);\n }\n return cursor;\n }\n\n /**\n * Search for an element by id within the document and pantry, and move it using moveBefore.\n *\n * @param {Element} parentNode - The parent node to which the element will be moved.\n * @param {string} id - The ID of the element to be moved.\n * @param {Node | null} after - The reference node to insert the element before.\n * If `null`, the element is appended as the last child.\n * @param {MorphContext} ctx\n * @returns {Element} The found element\n */\n function moveBeforeById(parentNode, id, after, ctx) {\n const target =\n /** @type {Element} - will always be found */\n (\n ctx.target.querySelector(`#${id}`) ||\n ctx.pantry.querySelector(`#${id}`)\n );\n removeElementFromAncestorsIdMaps(target, ctx);\n moveBefore(parentNode, target, after);\n return target;\n }\n\n /**\n * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n * pantry rather than being deleted, preventing their removal hooks from being called.\n *\n * @param {Element} element - element to remove from its ancestors' id maps\n * @param {MorphContext} ctx\n */\n function removeElementFromAncestorsIdMaps(element, ctx) {\n const id = element.id;\n /** @ts-ignore - safe to loop in this way **/\n while ((element = element.parentNode)) {\n let idSet = ctx.idMap.get(element);\n if (idSet) {\n idSet.delete(id);\n if (!idSet.size) {\n ctx.idMap.delete(element);\n }\n }\n }\n }\n\n /**\n * Moves an element before another element within the same parent.\n * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n * This is essentialy a forward-compat wrapper.\n *\n * @param {Element} parentNode - The parent node containing the after element.\n * @param {Node} element - The element to be moved.\n * @param {Node | null} after - The reference node to insert `element` before.\n * If `null`, `element` is appended as the last child.\n */\n function moveBefore(parentNode, element, after) {\n // @ts-ignore - use proposed moveBefore feature\n if (parentNode.moveBefore) {\n try {\n // @ts-ignore - use proposed moveBefore feature\n parentNode.moveBefore(element, after);\n } catch (e) {\n // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n parentNode.insertBefore(element, after);\n }\n } else {\n parentNode.insertBefore(element, after);\n }\n }\n\n return morphChildren;\n })();\n\n //=============================================================================\n // Single Node Morphing Code\n //=============================================================================\n const morphNode = (function () {\n /**\n * @param {Node} oldNode root node to merge content into\n * @param {Node} newContent new content to merge\n * @param {MorphContext} ctx the merge context\n * @returns {Node | null} the element that ended up in the DOM\n */\n function morphNode(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) {\n // don't morph focused element\n return null;\n }\n\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n return oldNode;\n }\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n oldNode instanceof HTMLHeadElement &&\n ctx.head.style !== \"morph\"\n ) {\n // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n handleHeadElement(\n oldNode,\n /** @type {HTMLHeadElement} */ (newContent),\n ctx,\n );\n } else {\n morphAttributes(oldNode, newContent, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n // @ts-ignore newContent can be a node here because .firstChild will be null\n morphChildren(ctx, oldNode, newContent);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n\n /**\n * syncs the oldNode to the newNode, copying over all attributes and\n * inner element state from the newNode to the oldNode\n *\n * @param {Node} oldNode the node to copy attributes & state to\n * @param {Node} newNode the node to copy attributes & state from\n * @param {MorphContext} ctx the merge context\n */\n function morphAttributes(oldNode, newNode, ctx) {\n let type = newNode.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const oldElt = /** @type {Element} */ (oldNode);\n const newElt = /** @type {Element} */ (newNode);\n\n const oldAttributes = oldElt.attributes;\n const newAttributes = newElt.attributes;\n for (const newAttribute of newAttributes) {\n if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n continue;\n }\n if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n oldElt.setAttribute(newAttribute.name, newAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n const oldAttribute = oldAttributes[i];\n\n // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n // e.g. custom element attribute callbacks can remove other attributes\n if (!oldAttribute) continue;\n\n if (!newElt.hasAttribute(oldAttribute.name)) {\n if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n continue;\n }\n oldElt.removeAttribute(oldAttribute.name);\n }\n }\n\n if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n syncInputValue(oldElt, newElt, ctx);\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue;\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param {Element} oldElement the element to sync the input value to\n * @param {Element} newElement the element to sync the input value from\n * @param {MorphContext} ctx the merge context\n */\n function syncInputValue(oldElement, newElement, ctx) {\n if (\n oldElement instanceof HTMLInputElement &&\n newElement instanceof HTMLInputElement &&\n newElement.type !== \"file\"\n ) {\n let newValue = newElement.value;\n let oldValue = oldElement.value;\n\n // sync boolean attributes\n syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n if (!newElement.hasAttribute(\"value\")) {\n if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n oldElement.value = \"\";\n oldElement.removeAttribute(\"value\");\n }\n } else if (oldValue !== newValue) {\n if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n oldElement.setAttribute(\"value\", newValue);\n oldElement.value = newValue;\n }\n }\n // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n // did I break something?\n } else if (\n oldElement instanceof HTMLOptionElement &&\n newElement instanceof HTMLOptionElement\n ) {\n syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n } else if (\n oldElement instanceof HTMLTextAreaElement &&\n newElement instanceof HTMLTextAreaElement\n ) {\n let newValue = newElement.value;\n let oldValue = oldElement.value;\n if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n return;\n }\n if (newValue !== oldValue) {\n oldElement.value = newValue;\n }\n if (\n oldElement.firstChild &&\n oldElement.firstChild.nodeValue !== newValue\n ) {\n oldElement.firstChild.nodeValue = newValue;\n }\n }\n }\n\n /**\n * @param {Element} oldElement element to write the value to\n * @param {Element} newElement element to read the value from\n * @param {string} attributeName the attribute name\n * @param {MorphContext} ctx the merge context\n */\n function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n const newLiveValue = newElement[attributeName],\n // @ts-ignore ditto\n oldLiveValue = oldElement[attributeName];\n if (newLiveValue !== oldLiveValue) {\n const ignoreUpdate = ignoreAttribute(\n attributeName,\n oldElement,\n \"update\",\n ctx,\n );\n if (!ignoreUpdate) {\n // update attribute's associated DOM property\n // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n oldElement[attributeName] = newElement[attributeName];\n }\n if (newLiveValue) {\n if (!ignoreUpdate) {\n // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n // this is the correct way to set a boolean attribute to \"true\"\n oldElement.setAttribute(attributeName, \"\");\n }\n } else {\n if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n oldElement.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * @param {string} attr the attribute to be mutated\n * @param {Element} element the element that is going to be updated\n * @param {\"update\" | \"remove\"} updateType\n * @param {MorphContext} ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, element, updateType, ctx) {\n if (\n attr === \"value\" &&\n ctx.ignoreActiveValue &&\n element === document.activeElement\n ) {\n return true;\n }\n return (\n ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n false\n );\n }\n\n /**\n * @param {Node} possibleActiveElement\n * @param {MorphContext} ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return (\n !!ctx.ignoreActiveValue &&\n possibleActiveElement === document.activeElement &&\n possibleActiveElement !== document.body\n );\n }\n\n return morphNode;\n })();\n\n //=============================================================================\n // Head Management Functions\n //=============================================================================\n /**\n * @param {MorphContext} ctx\n * @param {Element} oldNode\n * @param {Element} newNode\n * @param {function} callback\n * @returns {Node[] | Promise<Node[]>}\n */\n function withHeadBlocking(ctx, oldNode, newNode, callback) {\n if (ctx.head.block) {\n const oldHead = oldNode.querySelector(\"head\");\n const newHead = newNode.querySelector(\"head\");\n if (oldHead && newHead) {\n const promises = handleHeadElement(oldHead, newHead, ctx);\n // when head promises resolve, proceed ignoring the head tag\n return Promise.all(promises).then(() => {\n const newCtx = Object.assign(ctx, {\n head: {\n block: false,\n ignore: true,\n },\n });\n return callback(newCtx);\n });\n }\n }\n // just proceed if we not head blocking\n return callback(ctx);\n }\n\n /**\n * The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n *\n * @param {Element} oldHead\n * @param {Element} newHead\n * @param {MorphContext} ctx\n * @returns {Promise<void>[]}\n */\n function handleHeadElement(oldHead, newHead, ctx) {\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHead.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of oldHead.children) {\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (ctx.head.style === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n // TODO: This could theoretically be null, based on type\n let newElt = /** @type {ChildNode} */ (\n document.createRange().createContextualFragment(newNode.outerHTML)\n .firstChild\n );\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (\n (\"href\" in newElt && newElt.href) ||\n (\"src\" in newElt && newElt.src)\n ) {\n /** @type {(result?: any) => void} */ let resolve;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener(\"load\", function () {\n resolve();\n });\n promises.push(promise);\n }\n oldHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n oldHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(oldHead, {\n added: added,\n kept: preserved,\n removed: removed,\n });\n return promises;\n }\n\n //=============================================================================\n // Create Morph Context Functions\n //=============================================================================\n const createMorphContext = (function () {\n /**\n *\n * @param {Element} oldNode\n * @param {Element} newContent\n * @param {Config} config\n * @returns {MorphContext}\n */\n function createMorphContext(oldNode, newContent, config) {\n const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n const mergedConfig = mergeDefaults(config);\n const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n throw `Do not understand how to morph style ${morphStyle}`;\n }\n\n return {\n target: oldNode,\n newContent: newContent,\n config: mergedConfig,\n morphStyle: morphStyle,\n ignoreActive: mergedConfig.ignoreActive,\n ignoreActiveValue: mergedConfig.ignoreActiveValue,\n restoreFocus: mergedConfig.restoreFocus,\n idMap: idMap,\n persistentIds: persistentIds,\n pantry: createPantry(),\n callbacks: mergedConfig.callbacks,\n head: mergedConfig.head,\n };\n }\n\n /**\n * Deep merges the config object and the Idiomorph.defaults object to\n * produce a final configuration object\n * @param {Config} config\n * @returns {ConfigInternal}\n */\n function mergeDefaults(config) {\n let finalConfig = Object.assign({}, defaults);\n\n // copy top level stuff into final config\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = Object.assign(\n {},\n defaults.callbacks,\n config.callbacks,\n );\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n return finalConfig;\n }\n\n /**\n * @returns {HTMLDivElement}\n */\n function createPantry() {\n const pantry = document.createElement(\"div\");\n pantry.hidden = true;\n document.body.insertAdjacentElement(\"afterend\", pantry);\n return pantry;\n }\n\n /**\n * Returns all elements with an ID contained within the root element and its descendants\n *\n * @param {Element} root\n * @returns {Element[]}\n */\n function findIdElements(root) {\n let elements = Array.from(root.querySelectorAll(\"[id]\"));\n if (root.id) {\n elements.push(root);\n }\n return elements;\n }\n\n /**\n * A bottom-up algorithm that populates a map of Element -> IdSet.\n * The idSet for a given element is the set of all IDs contained within its subtree.\n * As an optimzation, we filter these IDs through the given list of persistent IDs,\n * because we don't need to bother considering IDed elements that won't be in the new content.\n *\n * @param {Map<Node, Set<string>>} idMap\n * @param {Set<string>} persistentIds\n * @param {Element} root\n * @param {Element[]} elements\n */\n function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n for (const elt of elements) {\n if (persistentIds.has(elt.id)) {\n /** @type {Element|null} */\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n\n if (current === root) break;\n current = current.parentElement;\n }\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {IdSets}\n */\n function createIdMaps(oldContent, newContent) {\n const oldIdElements = findIdElements(oldContent);\n const newIdElements = findIdElements(newContent);\n\n const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n /** @type {Map<Node, Set<string>>} */\n let idMap = new Map();\n populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n const newRoot = newContent.__idiomorphRoot || newContent;\n populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n return { persistentIds, idMap };\n }\n\n /**\n * This function computes the set of ids that persist between the two contents excluding duplicates\n *\n * @param {Element[]} oldIdElements\n * @param {Element[]} newIdElements\n * @returns {Set<string>}\n */\n function createPersistentIds(oldIdElements, newIdElements) {\n let duplicateIds = new Set();\n\n /** @type {Map<string, string>} */\n let oldIdTagNameMap = new Map();\n for (const { id, tagName } of oldIdElements) {\n if (oldIdTagNameMap.has(id)) {\n duplicateIds.add(id);\n } else {\n oldIdTagNameMap.set(id, tagName);\n }\n }\n\n let persistentIds = new Set();\n for (const { id, tagName } of newIdElements) {\n if (persistentIds.has(id)) {\n duplicateIds.add(id);\n } else if (oldIdTagNameMap.get(id) === tagName) {\n persistentIds.add(id);\n }\n // skip if tag types mismatch because its not possible to morph one tag into another\n }\n\n for (const id of duplicateIds) {\n persistentIds.delete(id);\n }\n return persistentIds;\n }\n\n return createMorphContext;\n })();\n\n //=============================================================================\n // HTML Normalization Functions\n //=============================================================================\n const { normalizeElement, normalizeParent } = (function () {\n /** @type {WeakSet<Node>} */\n const generatedByIdiomorph = new WeakSet();\n\n /**\n *\n * @param {Element | Document} content\n * @returns {Element}\n */\n function normalizeElement(content) {\n if (content instanceof Document) {\n return content.documentElement;\n } else {\n return content;\n }\n }\n\n /**\n *\n * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n * @returns {Element}\n */\n function normalizeParent(newContent) {\n if (newContent == null) {\n return document.createElement(\"div\"); // dummy parent element\n } else if (typeof newContent === \"string\") {\n return normalizeParent(parseContent(newContent));\n } else if (\n generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n ) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return /** @type {Element} */ (newContent);\n } else if (newContent instanceof Node) {\n if (newContent.parentNode) {\n // we can't use the parent directly because newContent may have siblings\n // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n // so we create a duck-typed parent node instead.\n return createDuckTypedParent(newContent);\n } else {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement(\"div\");\n dummyParent.append(newContent);\n return dummyParent;\n }\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement(\"div\");\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n /**\n * Creates a fake duck-typed parent element to wrap a single node, without actually reparenting it.\n * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849–1916)\n *\n * @param {Node} newContent\n * @returns {Element}\n */\n function createDuckTypedParent(newContent) {\n return /** @type {Element} */ (\n /** @type {unknown} */ ({\n childNodes: [newContent],\n /** @ts-ignore - cover your eyes for a minute, tsc */\n querySelectorAll: (s) => {\n /** @ts-ignore */\n const elements = newContent.querySelectorAll(s);\n /** @ts-ignore */\n return newContent.matches(s) ? [newContent, ...elements] : elements;\n },\n /** @ts-ignore */\n insertBefore: (n, r) => newContent.parentNode.insertBefore(n, r),\n /** @ts-ignore */\n moveBefore: (n, r) => newContent.parentNode.moveBefore(n, r),\n // for later use with populateIdMapWithTree to halt upwards iteration\n get __idiomorphRoot() {\n return newContent;\n },\n })\n );\n }\n\n /**\n *\n * @param {string} newContent\n * @returns {Node | null | DocumentFragment}\n */\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(\n /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n \"\",\n );\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (\n contentWithSvgsRemoved.match(/<\\/html>/) ||\n contentWithSvgsRemoved.match(/<\\/head>/) ||\n contentWithSvgsRemoved.match(/<\\/body>/)\n ) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n generatedByIdiomorph.add(content);\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n generatedByIdiomorph.add(htmlElement);\n }\n return htmlElement;\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\n \"<body><template>\" + newContent + \"</template></body>\",\n \"text/html\",\n );\n let content = /** @type {HTMLTemplateElement} */ (\n responseDoc.body.querySelector(\"template\")\n ).content;\n generatedByIdiomorph.add(content);\n return content;\n }\n }\n\n return { normalizeElement, normalizeParent };\n })();\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults,\n };\n})();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n Idiomorph.morph(currentElement, newElement, {\n ...options,\n callbacks: new DefaultIdiomorphCallbacks(callbacks)\n });\n}\n\nfunction morphChildren(currentElement, newElement) {\n morphElements(currentElement, newElement.childNodes, {\n morphStyle: \"innerHTML\"\n });\n}\n\nclass DefaultIdiomorphCallbacks {\n #beforeNodeMorphed\n\n constructor({ beforeNodeMorphed } = {}) {\n this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n }\n\n beforeNodeAdded = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n beforeNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n beforeAttributeUpdated = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", {\n cancelable: true,\n target,\n detail: { attributeName, mutationType }\n });\n\n return !event.defaultPrevented\n }\n\n beforeNodeRemoved = (node) => {\n return this.beforeNodeMorphed(node)\n }\n\n afterNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n dispatch(\"turbo:morph-element\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n }\n }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n static renderElement(currentElement, newElement) {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n morphChildren(currentElement, newElement);\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n const cspNonce = getCspNonce();\n if (cspNonce) {\n element.nonce = cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame =\n document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Link prefetching\n\n linkPrefetchingIsEnabledForLocation(location) {\n return true\n }\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Link prefetching\n\n linkPrefetchingIsEnabledForLocation(location) {\n // Not all adapters implement linkPrefetchingIsEnabledForLocation\n if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n }\n\n return true\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n delete this.currentVisit;\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n static renderElement(currentElement, newElement) {\n morphElements(currentElement, newElement, {\n callbacks: {\n beforeNodeMorphed: element => !canRefreshFrame(element)\n }\n });\n\n for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n if (canRefreshFrame(frame)) frame.reload();\n }\n\n dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n get shouldAutofocus() {\n return false\n }\n}\n\nfunction canRefreshFrame(frame) {\n return frame instanceof FrameElement &&\n frame.src &&\n frame.refresh === \"morph\" &&\n !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n enabled = true\n started = false\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n const isCurrentUrl = url === document.baseURI;\n if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n );\n\n this.progressBarDelay = delay;\n }\n\n set progressBarDelay(delay) {\n config.drive.progressBarDelay = delay;\n }\n\n get progressBarDelay() {\n return config.drive.progressBarDelay\n }\n\n set drive(value) {\n config.drive.enabled = value;\n }\n\n get drive() {\n return config.drive.enabled\n }\n\n set formMode(value) {\n config.forms.mode = value;\n }\n\n get formMode() {\n return config.forms.mode\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.navigator.linkPrefetchingIsEnabledForLocation(location)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (config.forms.mode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (config.forms.mode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (config.drive.enabled || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n console.warn(\n \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n console.warn(\n \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n config: config,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n #shouldMorphFrame = false\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { refresh, src } = this.element;\n\n this.#shouldMorphFrame = src && refresh === \"morph\";\n\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.#shouldMorphFrame = false;\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphElements(targetElement, this.templateContent);\n } else {\n targetElement.replaceWith(this.templateContent);\n }\n });\n },\n\n update() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphChildren(targetElement, this.templateContent);\n } else {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n }\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n * <turbo-stream action=\"append\" target=\"dom_id\">\n * <template>\n * Content to append to target designated with the dom_id.\n * </template>\n * </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n return (this.renderPromise ??= (async () => {\n const event = this.beforeRenderEvent;\n\n if (this.dispatchEvent(event)) {\n await nextRepaint();\n await event.detail.render(this);\n }\n })())\n }\n\n disconnect() {\n try {\n this.remove();\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n /**\n * Removes duplicate children (by ID)\n */\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n\n /**\n * Gets the list of duplicate children (i.e. those with the same ID)\n */\n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n }\n\n /**\n * Gets the action function to be performed.\n */\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction\n }\n this.#raise(\"unknown action\");\n }\n this.#raise(\"action attribute is missing\");\n }\n\n /**\n * Gets the target elements which the template will be rendered to.\n */\n get targetElements() {\n if (this.target) {\n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.#raise(\"target or targets attribute is missing\");\n }\n }\n\n /**\n * Gets the contents of the main `<template>`.\n */\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n /**\n * Gets the main `<template>` used for rendering\n */\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template\n } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.#raise(\"first child element must be a <template> element\");\n }\n\n /**\n * Gets the current action.\n */\n get action() {\n return this.getAttribute(\"action\")\n }\n\n /**\n * Gets the current target (an element ID) to which the result will\n * be rendered.\n */\n get target() {\n return this.getAttribute(\"target\")\n }\n\n /**\n * Gets the current \"targets\" selector (a CSS selector)\n */\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n /**\n * Reads the request-id attribute\n */\n get requestId() {\n return this.getAttribute(\"request-id\")\n }\n\n #raise(message) {\n throw new Error(`${this.description}: ${message}`)\n }\n\n get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement }\n })\n }\n\n get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target);\n\n if (element !== null) {\n return [element]\n } else {\n return []\n }\n }\n\n get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n streamSource = null\n\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n connectStreamSource(this.streamSource);\n }\n\n disconnectedCallback() {\n if (this.streamSource) {\n this.streamSource.close();\n\n disconnectStreamSource(this.streamSource);\n }\n }\n\n get src() {\n return this.getAttribute(\"src\") || \"\"\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(\n unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n ——\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `,\n element.outerHTML\n )\n }\n\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n","let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n","// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};","import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n this.subscriptionDisconnected()\n }\n\n attributeChangedCallback() {\n if (this.subscription) {\n this.disconnectedCallback()\n this.connectedCallback()\n }\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n","import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n","export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n // for formmethod if the button does not have name or value attributes\n // set, which is the default. This means that if you use <%= f.button\n // formmethod: :delete %>, it will generate a <button name=\"_method\"\n // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n // is already _method, it's value attribute already contains the desired\n // method.\n if (submitter.name === '_method') {\n return submitter.value\n } else if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n","define( [\n\t\"../../core\"\n], function( jQuery ) {\n\n\"use strict\";\n\nreturn 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} );\n","define( [\n\t\"./whitespace\"\n], function( whitespace ) {\n\n\"use strict\";\n\nreturn new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n} );\n","define( [\n\t\"./core\",\n\t\"./var/document\",\n\t\"./var/documentElement\",\n\t\"./var/isFunction\",\n\t\"./var/rnothtmlwhite\",\n\t\"./var/rcheckableType\",\n\t\"./var/slice\",\n\t\"./data/var/acceptData\",\n\t\"./data/var/dataPriv\",\n\t\"./core/nodeName\",\n\n\t\"./core/init\",\n\t\"./selector\"\n], function( jQuery, document, documentElement, isFunction, rnothtmlwhite,\n\trcheckableType, slice, acceptData, dataPriv, nodeName ) {\n\n\"use strict\";\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 <use> 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\nreturn jQuery;\n} );\n","define( [\n\t\"./fnToString\"\n], function( fnToString ) {\n\t\"use strict\";\n\n\treturn fnToString.call( Object );\n} );\n","define( function() {\n\t\"use strict\";\n\n\t// Only count HTML whitespace\n\t// Other whitespace should count in values\n\t// https://infra.spec.whatwg.org/#ascii-whitespace\n\treturn ( /[^\\x20\\t\\r\\n\\f]+/g );\n} );\n","define( [\n\t\"../core\",\n\t\"../core/stripAndCollapse\",\n\t\"../var/isFunction\",\n\t\"../var/rnothtmlwhite\",\n\t\"../data/var/dataPriv\",\n\t\"../core/init\"\n], function( jQuery, stripAndCollapse, isFunction, rnothtmlwhite, dataPriv ) {\n\n\"use strict\";\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","define( [\n\t\"../core\",\n\t\"../core/stripAndCollapse\",\n\t\"../var/isFunction\",\n\t\"../core/parseHTML\",\n\t\"../ajax\",\n\t\"../traversing\",\n\t\"../manipulation\",\n\t\"../selector\"\n], function( jQuery, stripAndCollapse, isFunction ) {\n\n\"use strict\";\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n} );\n","define( [\n\t\"../Data\"\n], function( Data ) {\n\t\"use strict\";\n\n\treturn new Data();\n} );\n","define( [\n\t\"./core\",\n\t\"./core/access\",\n\t\"./core/camelCase\",\n\t\"./core/nodeName\",\n\t\"./var/rcssNum\",\n\t\"./css/var/rnumnonpx\",\n\t\"./css/var/rcustomProp\",\n\t\"./css/var/cssExpand\",\n\t\"./css/var/getStyles\",\n\t\"./css/var/swap\",\n\t\"./css/curCSS\",\n\t\"./css/adjustCSS\",\n\t\"./css/addGetHookIf\",\n\t\"./css/support\",\n\t\"./css/finalPropName\",\n\n\t\"./core/init\",\n\t\"./core/ready\",\n\t\"./selector\" // contains\n], function( jQuery, access, camelCase, nodeName, rcssNum, rnumnonpx,\n\trcustomProp, cssExpand, getStyles, swap, curCSS, adjustCSS, addGetHookIf,\n\tsupport, finalPropName ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n","define( [\n\t\"../var/rnothtmlwhite\"\n], function( rnothtmlwhite ) {\n\t\"use strict\";\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\treturn stripAndCollapse;\n} );\n","// Initialize a jQuery object\ndefine( [\n\t\"../core\",\n\t\"../var/document\",\n\t\"../var/isFunction\",\n\t\"./var/rsingleTag\",\n\n\t\"../traversing/findFilter\"\n], function( jQuery, document, isFunction, rsingleTag ) {\n\n\"use strict\";\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 <tag> 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\nreturn init;\n\n} );\n","define( [\n\t\"./arr\"\n], function( arr ) {\n\n\"use strict\";\n\nreturn arr.sort;\n\n} );\n","define( [\n\t\"../core\",\n\t\"../core/isAttached\",\n\t\"./var/rboxStyle\",\n\t\"./var/rnumnonpx\",\n\t\"./var/getStyles\",\n\t\"./var/rcustomProp\",\n\t\"../var/rtrimCSS\",\n\t\"./support\"\n], function( jQuery, isAttached, rboxStyle, rnumnonpx, getStyles,\n\trcustomProp, rtrimCSS, support ) {\n\n\"use strict\";\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\nreturn curCSS;\n} );\n","define( function() {\n\n\"use strict\";\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nreturn \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n} );\n","define( [], function() {\n\n\"use strict\";\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}\n\nreturn camelCase;\n\n} );\n","define( function() {\n\n\"use strict\";\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\n\nreturn nodeName;\n\n} );\n","define( [\n\t\"./core\",\n\t\"./var/document\",\n\t\"./var/isFunction\",\n\t\"./var/rnothtmlwhite\",\n\t\"./ajax/var/location\",\n\t\"./ajax/var/nonce\",\n\t\"./ajax/var/rquery\",\n\n\t\"./core/init\",\n\t\"./core/parseXML\",\n\t\"./event/trigger\",\n\t\"./deferred\",\n\t\"./serialize\" // jQuery.param\n], function( jQuery, document, isFunction, rnothtmlwhite, location, nonce, rquery ) {\n\n\"use strict\";\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\nreturn jQuery;\n} );\n"],"names":["document","support","body","createHTMLDocument","implementation","innerHTML","childNodes","length","source","jQuery","pnum","RegExp","documentElement","computeStyleTests","div","container","style","cssText","appendChild","divStyle","window","getComputedStyle","pixelPositionVal","top","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","width","position","scrollboxSizeVal","offsetWidth","removeChild","measure","Math","round","parseFloat","reliableTrDimensionsVal","createElement","backgroundClip","cloneNode","clearCloneStyle","extend","boxSizingReliable","pixelBoxStyles","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","tr","trChild","trStyle","height","display","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","contains","a","b","bup","parentNode","nodeType","compareDocumentPosition","dataPriv","elems","refElements","i","l","set","get","fn","delay","time","type","fx","speeds","this","queue","next","hooks","timeout","setTimeout","stop","clearTimeout","wrapMap","thead","col","td","_default","tbody","tfoot","colgroup","caption","th","option","optgroup","parseXML","data","xml","parserErrorElem","DOMParser","parseFromString","e","getElementsByTagName","error","map","el","textContent","join","readyException","arr","splice","obj","item","class2type","hasOwnProperty","_evalUrl","url","options","doc","ajax","dataType","cache","async","global","converters","dataFilter","response","globalEval","guid","Date","now","readyList","Deferred","completed","removeEventListener","ready","then","catch","isReady","readyWait","wait","resolveWith","readyState","doScroll","addEventListener","elem","Array","isArray","access","makeArray","push","dequeue","startLength","shift","_queueHooks","unshift","call","empty","fire","key","Callbacks","add","remove","setter","arguments","undefined","each","clearQueue","promise","tmp","count","defer","elements","resolve","callback","ret","name","old","expr","pseudos","hidden","visible","getClientRects","hasOwn","toString","_jQuery","_$","$","noConflict","deep","noGlobal","Object","getPrototypeOf","camelCase","isFunction","rcssNum","rnothtmlwhite","cssExpand","isHiddenWithinTree","adjustCSS","showHide","fxNow","inProgress","rfxtypes","rrun","schedule","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","which","attrs","opacity","createTween","value","prop","animation","tween","collection","Animation","tweeners","concat","index","properties","result","stopped","prefilters","deferred","always","currentTime","remaining","max","startTime","duration","percent","tweens","run","notifyWith","props","opts","specialEasing","easing","originalProperties","originalOptions","end","Tween","gotoEnd","rejectWith","cssHooks","expand","propFilter","bind","start","progress","done","complete","fail","timer","anim","exec","tweener","match","toggle","oldfire","propTween","restoreDisplay","isBox","orig","dataShow","unqueued","test","isEmptyObject","overflow","overflowX","overflowY","css","prefilter","prepend","speed","opt","off","fadeTo","to","filter","show","animate","optall","doAnimation","finish","stopQueue","timers","_i","cssFn","apply","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","getProto","indexOf","dir","siblings","rneedsContext","nodeName","rparentsprev","guaranteedUnique","children","contents","prev","sibling","cur","has","target","targets","closest","selectors","context","matched","find","matchesSelector","pushStack","uniqueSort","jquery","first","prevAll","selector","merge","addBack","prevObject","parent","parents","parentsUntil","until","nextAll","nextUntil","prevUntil","firstChild","contentDocument","content","slice","reverse","preservedScriptAttributes","src","nonce","noModule","code","node","val","script","text","getAttribute","setAttribute","head","types","on","unbind","delegate","undelegate","hover","fnOver","fnOut","split","trigger","needsContext","toType","rcheckableType","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","prefix","traditional","v","param","s","valueOrFunction","encodeURIComponent","isPlainObject","serialize","serializeArray","is","checked","replace","n","nextSibling","conditionFn","hookFn","object","_","flag","createOptions","firing","memory","fired","locked","list","firingIndex","once","stopOnFalse","self","args","arg","unique","inArray","disable","disabled","lock","fireWith","rsingleTag","buildFragment","parseHTML","keepScripts","base","href","location","scripts","parsed","view","ownerDocument","defaultView","opener","acceptData","isWindow","rfocusMorph","stopPropagationCallback","stopPropagation","event","onlyHandlers","bubbleType","ontype","handle","special","lastElement","eventPath","namespaces","namespace","triggered","sort","expando","Event","isTrigger","rnamespace","noBubble","delegateType","parentWindow","isPropagationStopped","bindType","create","preventDefault","isDefaultPrevented","pop","simulate","isSimulated","triggerHandler","Height","Width","padding","defaultExtra","funcName","margin","chainable","extra","tag","querySelectorAll","Data","uid","prototype","owner","defineProperty","configurable","hasData","defaultDisplayMap","getDefaultDisplay","temp","values","hide","state","isAttached","whitespace","rtrimCSS","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","matches","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","els","results","seed","m","nid","groups","newSelector","newContext","getElementById","id","getElementsByClassName","testContext","scope","escapeSelector","tokenize","toSelector","qsaError","removeAttribute","select","keys","cacheLength","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","j","matchIndexes","subWindow","isXMLDoc","webkitMatchesSelector","msMatchesSelector","getById","getElementsByName","disconnectedMatch","cssHas","querySelector","attrId","getAttributeNode","className","input","compare","sortDetached","attr","attrHandle","toLowerCase","msg","Error","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","what","_argument","last","simple","forward","ofType","_context","outerCache","nodeIndex","useCache","diff","lastChild","pseudo","setFilters","idx","not","matcher","compile","unmatched","lang","elemLang","hash","root","focus","activeElement","err","safeActiveElement","hasFocus","tabIndex","enabled","selected","selectedIndex","header","button","_matchIndexes","eq","even","odd","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","parseOnly","tokens","soFar","preFilters","cached","len","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","random","matcherFromGroupMatchers","token","compiled","filters","getText","isXML","finalPropName","init","constructor","unit","cssNumber","propHooks","eased","pos","step","scrollTop","scrollLeft","linear","p","swing","cos","PI","createDocumentFragment","checkClone","noCloneChecked","defaultValue","ajaxSettings","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","ajaxTransport","errorCallback","crossDomain","send","headers","open","username","xhrFields","mimeType","overrideMimeType","setRequestHeader","onload","onerror","onabort","ontimeout","onreadystatechange","abort","status","statusText","responseType","responseText","binary","getAllResponseHeaders","hasContent","composed","getRootNode","animated","grep","checkOn","optSelected","radioValue","cssPrefixes","emptyStyle","vendorProps","final","cssProps","capName","toUpperCase","vendorPropName","valueParts","adjusted","scale","maxIterations","currentValue","initial","initialInUnit","rerrorNames","exceptionHook","asyncError","console","warn","message","stack","wrapAll","html","wrap","clone","insertBefore","firstElementChild","append","wrapInner","htmlIsFunction","unwrap","replaceWith","rfocusable","rclickable","removeProp","propFix","nType","tabindex","rtrim","proxy","holdReady","hold","parseJSON","JSON","parse","isNumeric","isNaN","trim","boolHook","removeAttr","attrHooks","attrNames","getter","lowercaseName","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","metaTag","cspNonce","Element","mozMatchesSelector","oMatchesSelector","element","EXPANDO","getData","setData","isContentEditable","isEditable","parentElement","csrfToken","meta","csrfParam","CSRFProtection","refreshCSRFTokens","forEach","AcceptHeaders","json","prepareOptions","createXHR","processResponse","getResponseHeader","floor","success","beforeSend","OPENED","accept","withCredentials","DONE","parser","error1","isCrossDomain","originAnchor","urlAnchor","protocol","host","CustomEvent","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","defaultPrevented","dispatchEvent","stopEverything","stopImmediatePropagation","eventType","handler","toArray","serializeElement","additionalParam","inputs","formElements","form","allowAction","rails","answer","confirm","handleDisabledElement","enableElement","isXhrRedirect","enableLinkElement","enableFormElement","enableFormElements","disableElement","disableLinkElement","disableFormElement","disableFormElements","replacement","originalText","formSubmitButtonClick","formNoValidate","preventInsignificantClick","method","insignificantMetaClick","metaKey","ctrlKey","Rails","fileInputSelector","handleConfirm","handleMethod","link","csrfToken$1","csrfParam$1","formContent","action","click","handleMethodWithRails","handleRemote","isRemote","enctype","FormData","handleRemoteWithRails","_rails_loaded","ajaxPrefilter","rquery","oldCallbacks","rjsonp","ajaxSetup","jsonp","jsonpCallback","originalSettings","jqXHR","callbackName","overwritten","responseContainer","jsonProp","contentType","dataTypes","Identity","Thrower","ex","adoptValue","reject","noValue","func","tuples","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","that","mightThrow","TypeError","process","getErrorHook","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","primary","updateFunc","emptyGet","raw","bulk","_key","stripAndCollapse","rreturn","valueIsFunction","valHooks","one","optionSet","dataUser","rbrace","rmultiDash","dataAttr","removeData","_data","_removeData","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","sel","rtagName","rscriptType","getAll","setGlobalEval","rhtml","selection","ignored","attached","fragment","nodes","htmlPrefilter","createTextNode","rnumnonpx","curCSS","addGetHookIf","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","left","using","rect","win","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","computed","flat","DOMEval","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","events","fixInput","domManip","hasScripts","iNoClone","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","removeEvent","detach","before","after","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","winnow","qualifier","array","fnToString","ObjectFunctionString","version","rhtmlSuffix","isArrayLike","num","_elem","copy","copyIsArray","noop","proto","Ctor","nodeValue","namespaceURI","docElem","second","invert","callbackExpect","Symbol","iterator","accepts","scriptAttrs","charset","scriptCharset","raise","errorConstructor","requestSubmit","submitter","HTMLElement","DOMException","validateSubmitter","HTMLFormElement","submittersByForm","WeakMap","clickCaptured","Node","candidate","findSubmitterFromClickTarget","prototypeOfSubmitEvent","SubmitEvent","navigator","vendor","FrameLoadingStyle","eager","lazy","FrameElement","static","loaded","Promise","observedAttributes","super","delegateConstructor","connectedCallback","connect","disconnectedCallback","disconnect","reload","sourceURLReloaded","attributeChangedCallback","loadingStyleChanged","sourceURLChanged","disabledChanged","refresh","shouldReloadWithMorph","loading","frameLoadingStyleFromString","hasAttribute","autoscroll","isLoading","isActive","isPreview","drive","progressBarDelay","unvisitableExtensions","Set","activateScriptElement","createdScriptElement","getCspNonce","destinationElement","sourceElement","copyElementAttributes","dispatch","eventName","isConnected","cancelEvent","nextRepaint","visibilityState","nextEventLoopTick","nextAnimationFrame","parseHTMLDocument","unindent","strings","lines","reduce","string","interpolate","indent","line","uuid","from","attributeName","markAsBusy","localName","clearBusyState","waitForLoad","timeoutInMilliseconds","onComplete","getHistoryMethodForAction","history","replaceState","pushState","getVisitAction","isAction","getMetaElement","getMetaContent","findClosestRecursively","assignedSlot","elementIsFocusable","queryAutofocusableElement","elementOrDocumentFragment","doesNotTargetIFrame","HTMLIFrameElement","findLinkFromClickTarget","getLocationForLink","expandURL","beforeSubmit","afterSubmit","config","assign","mode","forms","locatable","URL","baseURI","getAnchor","anchorMatch","getAction$1","getExtension","pathname","getPathComponents","getLastPathComponent","isPrefixedBy","baseURL","origin","endsWith","getPrefix","startsWith","locationIsVisitable","rootLocation","getRequestURL","anchor","toCacheKey","FetchResponse","succeeded","ok","failed","clientError","statusCode","serverError","redirected","isHTML","responseHTML","LimitedSet","maxSize","size","oldestValue","delete","recentRequests","nativeFetch","fetch","fetchWithTurboHeaders","modifiedHeaders","Headers","requestUID","fetchMethodFromString","FetchMethod","post","put","patch","fetchEnctypeFromString","encoding","FetchEnctype","multipart","plain","urlEncoded","FetchRequest","abortController","AbortController","_value","requestBody","URLSearchParams","buildResourceAndBody","fetchOptions","credentials","redirect","defaultHeaders","signal","abortSignal","referrer","fetchBody","isSafe","searchParams","fetchMethod","search","entries","cancel","perform","prepareRequest","requestStarted","fetchRequest","receive","requestErrored","requestFinished","fetchResponse","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","Accept","acceptResponseType","requestInterception","resume","request","resource","entriesExcludingFiles","mergeIntoURLSearchParams","File","AppearanceObserver","started","intersectionObserver","IntersectionObserver","intersect","observe","unobserve","lastEntry","isIntersecting","elementAppearedInViewport","StreamMessage","template","streamElement","importNode","inertScriptElement","templateElement","importStreamElements","prefetchCache","expire","setLater","ttl","clear","getTime","FormSubmissionState","initialized","requesting","waiting","receiving","stopping","FormSubmission","confirmMethod","formElement","mustRedirect","getMethod","formAction","getAction","formElementAction","getFormAction","formData","buildFormData","getEnctype","confirmationMessage","cookieName","cookie","decodeURIComponent","getCookieValue","requestAcceptsTurboStreamResponse","_request","setSubmitsWith","formSubmission","formSubmissionStarted","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","formSubmissionErrored","formSubmissionSucceededWithResponse","resetSubmitterText","formSubmissionFinished","submitsWith","originalSubmitText","some","Snapshot","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","queryPermanentElementsAll","getPermanentElementById","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","FormSubmitObserver","eventTarget","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","submissionDoesNotTargetIFrame","willSubmitForm","formSubmitted","View","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","x","y","scrollToAnchorFromLocation","scrollIntoView","scrollRoot","scrollToTop","render","renderer","shouldRender","willRender","newSnapshot","shouldInvalidate","renderPromise","prepareToRenderSnapshot","renderInterception","renderElement","renderMethod","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","invalidate","reloadReason","reason","viewInvalidated","markAsPreview","prepareToRender","markVisitDirection","direction","unmarkVisitDirection","finishRendering","FrameView","missing","LinkInterceptor","clickBubbled","linkClicked","willVisit","clickEventIsSignificant","clickEvent","shouldInterceptLinkClick","originalEvent","linkClickIntercepted","_event","LinkClickObserver","MouseEvent","composedPath","willFollowLinkToLocation","followedLinkToLocation","altKey","shiftKey","FormLinkClickObserver","linkInterceptor","canPrefetchRequestToLocation","prefetchAndCacheRequestToLocation","willSubmitFormLinkToLocation","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","preservingPermanentElements","bardo","enter","leave","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","placeholder","createPlaceholderForPermanentElement","getPlaceholderById","placeholders","Renderer","currentElement","newElement","currentSnapshot","resolvingFunctions","shouldAutofocus","focusFirstAutofocusableElement","connectedSnapshot","FrameRenderer","destinationRange","createRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","loadFrameElement","scrollFrameIntoView","activateScriptElements","willRenderFrame","block","behavior","readScrollBehavior","newScriptElements","activatedScriptElement","Idiomorph","noOp","defaults","morphStyle","callbacks","beforeNodeAdded","afterNodeAdded","beforeNodeMorphed","afterNodeMorphed","beforeNodeRemoved","afterNodeRemoved","beforeAttributeUpdated","shouldPreserve","elt","shouldReAppend","shouldRemove","afterHeadMorphed","restoreFocus","morphChildren","createNode","oldParent","newChild","insertionPoint","ctx","idMap","newEmptyChild","tagName","morphNode","newClonedChild","findBestMatch","isIdSetMatch","oldNode","newNode","oldSet","newSet","isSoftMatch","oldElt","newElt","startPoint","endPoint","softMatch","siblingSoftMatchCount","cursor","removeNode","moveBefore","pantry","removeNodesBetween","startInclusive","endExclusive","tempNode","moveBeforeById","idSet","removeElementFromAncestorsIdMaps","newParent","HTMLTemplateElement","bestMatch","persistentIds","movedChild","insertedNode","syncBooleanAttribute","oldElement","newLiveValue","ignoreUpdate","ignoreAttribute","updateType","ignoreActiveValue","ignoreValueOfActiveElement","possibleActiveElement","newContent","ignoreActive","HTMLHeadElement","ignore","handleHeadElement","oldAttributes","newAttributes","newAttribute","oldAttribute","HTMLInputElement","newValue","oldValue","HTMLOptionElement","HTMLTextAreaElement","syncInputValue","morphAttributes","oldHead","newHead","added","removed","preserved","nodesToAppend","srcToNewHeadNodes","Map","newHeadChild","outerHTML","currentHeadElt","inNewContent","isReAppended","isPreserved","promises","createContextualFragment","_resolve","removedElement","kept","createMorphContext","createPantry","insertAdjacentElement","findIdElements","populateIdMapWithTree","current","oldContent","oldIdElements","newIdElements","duplicateIds","oldIdTagNameMap","createPersistentIds","newRoot","__idiomorphRoot","createIdMaps","mergedConfig","finalConfig","mergeDefaults","includes","normalizeElement","normalizeParent","generatedByIdiomorph","WeakSet","Document","contentWithSvgsRemoved","htmlElement","parseContent","r","createDuckTypedParent","dummyParent","morph","morphedNodes","activeElementId","selectionStart","selectionEnd","setSelectionRange","saveAndRestoreFocus","all","newCtx","withHeadBlocking","rightMargin","morphOuterHTML","morphElements","DefaultIdiomorphCallbacks","mutationType","MorphingFrameRenderer","ProgressBar","defaultCSS","animationDuration","hiding","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","setValue","installProgressElement","startTrickling","fadeProgressElement","uninstallProgressElement","stopTrickling","trickleInterval","setInterval","trickle","clearInterval","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","details","elementType","tracked","elementIsTracked","trackedElementSignature","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","getMetaValue","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","PageSnapshot","fromHTMLString","fromDocument","fromElement","headSnapshot","clonedElement","selectElements","clonedSelectElements","selectedOptions","clonedPasswordInput","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","prefersViewTransitions","shouldMorphPage","shouldPreserveScrollPosition","ViewTransitioner","renderChange","useViewTransition","viewTransitionsAvailable","startViewTransition","finished","defaultOptions","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","TimingMetric","VisitState","SystemStatusCode","Direction","advance","restore","Visit","timingMetrics","followedRedirect","scrolled","snapshotCached","viewTransitioner","restorationIdentifier","snapshotHTML","isSamePage","locationWithActionIsSamePage","isPageRefresh","adapter","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStarted","cancelRender","visitCompleted","followRedirect","visitFailed","changeHistory","update","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","visitRequestFinished","loadResponse","cacheSnapshot","renderPageSnapshot","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","performScroll","_response","_error","forceReloaded","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","metric","getTimingMetrics","frame","shouldTransitionTo","renderPage","cancelAnimationFrame","BrowserAdapter","progressBar","session","startVisit","visit","showVisitProgressBarAfterDelay","showProgressBar","_visit","hideVisitProgressBar","pageInvalidated","linkPrefetchingIsEnabledForLocation","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","formProgressBarTimeout","CacheObserver","deprecatedSelector","removeTemporaryElements","temporaryElements","temporaryElementsWithDeprecation","FrameRedirector","formSubmitObserver","_location","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","currentIndex","onPopState","onPageLoad","turbo","restorationIndex","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","shouldHandlePopState","historyPoppedToLocationWithRestorationIdentifierAndDirection","pageIsLoaded","LinkPrefetchObserver","capture","passive","turboFrameTarget","Number","unfetchableLink","linkToTheSamePage","linkOptsOut","nonSafeLink","eventPrevented","turboPrefetchParent","turboMethod","isUJS","Navigator","proposeVisit","allowsVisitingLocationWithAction","currentVisit","submitForm","clearSnapshotCache","visitOptions","currentAnchor","isRestorationToTop","oldURL","newURL","PageStage","PageObserver","stage","interpretReadyState","pageWillUnload","pageIsInteractive","pageIsComplete","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","generatedID","turboStreams","elementWithAutofocus","nodeListOfStreamElements","firstAutofocusableElementInStreams","willAutofocusId","elementToAutofocus","withAutofocusFromFragment","activeElementBeforeRender","activeElementAfterRender","reader","around","restoreFocusTo","elementToFocus","withPreservedFocus","StreamObserver","sources","inspectFetchResponse","connectStreamSource","streamSourceIsConnected","receiveMessageEvent","disconnectStreamSource","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageHTML","receivedMessageFromStream","ErrorRenderer","replaceHeadAndBody","replaceableElement","scriptElements","PageRenderer","HTMLBodyElement","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","mergedHeadElements","mergeProvisionalElements","newStylesheetElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeUnusedDynamicStylesheetElements","activateNewBody","assignNewBody","loadingElements","newHeadStylesheetElements","newHeadScriptElements","unusedDynamicStylesheetElements","newHeadElements","newHeadProvisionalElements","currentHeadProvisionalElements","isCurrentElementInElementList","elementList","isEqualNode","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","oldHeadStylesheetElements","MorphingPageRenderer","canRefreshFrame","SnapshotCache","snapshots","read","touch","write","PageView","snapshotCache","viewWillCacheSnapshot","cachedSnapshot","Preloader","shouldPreloadLink","preloadURL","Cache","clearCache","resetCacheControl","exemptPageFromCache","exemptPageFromPreview","setMetaContent","extendURLWithDeprecatedProperties","defineProperties","deprecatedLocationPropertyDescriptors","absoluteURL","pageObserver","cacheObserver","linkPrefetchObserver","linkClickObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","preloader","debouncedRefresh","pageRefreshDebouncePeriod","registerAdapter","proposeVisitIfNavigatedWithAction","requestId","isRecentRequest","isCurrentUrl","renderStreamMessage","setProgressBarDelay","formMode","timeoutId","debounce","isUnsafe","isStream","frameTarget","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","ev","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","submitterIsNavigatable","withinFrame","navigator$1","setConfirmMethod","setFormMode","Turbo","freeze","__proto__","TurboFrameMissingError","getFrameElementById","activateElement","currentURL","StreamActions","targetElements","templateContent","removeDuplicateTargetChildren","targetElement","StreamElement","performAction","beforeRenderEvent","duplicateChildren","c","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targetElementsByQuery","description","newStream","StreamSourceElement","streamSource","WebSocket","EventSource","close","consumer","getConsumer","setConsumer","createConsumer","newConsumer","walk","acc","fetchResponseLoaded","_fetchResponse","appearanceObserver","loadingStyle","sourceURL","currentNavigationElement","newFrame","_renderMethod","_newElement","previousFrameElement","replaceChildren","newFrameElement","extractForeignFrameElement","rendererClass","pageSnapshot","Response","wrapped","CSS","customElements","define","currentScript","TurboCableStreamSourceElement","subscription","channel","mixin","subscriptions","subscribeTo","received","dispatchMessageEvent","connected","subscriptionConnected","disconnected","subscriptionDisconnected","unsubscribe","MessageEvent","signed_stream_name","dataset","isBodyInit","formMethod","HTMLButtonElement","determineFormMethod","overrideMethod","determineFetchMethod","truncate","rtypenamespace","returnTrue","returnFalse","origFn","leverageNative","isSetup","saved","isImmediatePropagationStopped","handleObjIn","eventHandle","t","handleObj","handlers","origType","elemData","delegateCount","setup","mappedTypes","origCount","teardown","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","currentTarget","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","writable","load","beforeunload","returnValue","relatedTarget","timeStamp","changedTouches","eventPhase","pageX","pageY","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","blur","focusMappedHandler","documentMode","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","related","getClass","classesToArray","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rcustomProp","getStyles","swap","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","delta","marginDelta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","isCustomProp","setProperty","isFinite","scrollboxSizeBuggy","border","suffix","expanded","parts","rootjQuery","rboxStyle","minWidth","maxWidth","getPropertyValue","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","inspectPrefiltersOrTransports","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","active","lastModified","etag","isLocal","processData","responseFields","settings","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","requestHeaders","requestHeadersNames","strAbort","finalText","ifModified","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","throws","ajaxConvert","getJSON","getScript"],"sourceRoot":""}