{"version":3,"file":"common.js","mappings":"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","sources":["webpack:///./js/src/office-hours.js","webpack:///./node_modules/fitvids.1.1.0/jquery.fitvids.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/magnific-popup/dist/jquery.magnific-popup.js","webpack:///./node_modules/throttle-debounce/debounce.js","webpack:///./node_modules/throttle-debounce/index.js","webpack:///./node_modules/throttle-debounce/throttle.js","webpack:///webpack/bootstrap","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/swiper/shared/dom.js","webpack:///./node_modules/swiper/shared/utils.js","webpack:///./node_modules/swiper/shared/get-support.js","webpack:///./node_modules/swiper/shared/get-device.js","webpack:///./node_modules/swiper/shared/get-browser.js","webpack:///./node_modules/swiper/core/events-emitter.js","webpack:///./node_modules/swiper/core/update/index.js","webpack:///./node_modules/swiper/core/update/updateSize.js","webpack:///./node_modules/swiper/core/update/updateSlides.js","webpack:///./node_modules/swiper/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/core/update/updateProgress.js","webpack:///./node_modules/swiper/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/core/transition/transitionEmit.js","webpack:///./node_modules/swiper/core/slide/index.js","webpack:///./node_modules/swiper/core/slide/slideTo.js","webpack:///./node_modules/swiper/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/core/slide/slideNext.js","webpack:///./node_modules/swiper/core/slide/slidePrev.js","webpack:///./node_modules/swiper/core/slide/slideReset.js","webpack:///./node_modules/swiper/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/core/loop/index.js","webpack:///./node_modules/swiper/core/loop/loopCreate.js","webpack:///./node_modules/swiper/core/loop/loopFix.js","webpack:///./node_modules/swiper/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/core/events/onTouchStart.js","webpack:///./node_modules/swiper/core/events/onTouchMove.js","webpack:///./node_modules/swiper/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/core/events/onResize.js","webpack:///./node_modules/swiper/core/events/onClick.js","webpack:///./node_modules/swiper/core/events/onScroll.js","webpack:///./node_modules/swiper/core/events/index.js","webpack:///./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/core/classes/index.js","webpack:///./node_modules/swiper/core/classes/addClasses.js","webpack:///./node_modules/swiper/core/classes/removeClasses.js","webpack:///./node_modules/swiper/core/defaults.js","webpack:///./node_modules/swiper/core/moduleExtendParams.js","webpack:///./node_modules/swiper/core/core.js","webpack:///./node_modules/swiper/core/translate/index.js","webpack:///./node_modules/swiper/core/translate/getTranslate.js","webpack:///./node_modules/swiper/core/translate/setTranslate.js","webpack:///./node_modules/swiper/core/translate/minTranslate.js","webpack:///./node_modules/swiper/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/core/translate/translateTo.js","webpack:///./node_modules/swiper/core/transition/index.js","webpack:///./node_modules/swiper/core/transition/setTransition.js","webpack:///./node_modules/swiper/core/transition/transitionStart.js","webpack:///./node_modules/swiper/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/core/grab-cursor/index.js","webpack:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/core/breakpoints/index.js","webpack:///./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/core/check-overflow/index.js","webpack:///./node_modules/swiper/core/images/index.js","webpack:///./node_modules/swiper/core/images/loadImage.js","webpack:///./node_modules/swiper/core/images/preloadImages.js","webpack:///./node_modules/swiper/core/modules/resize/resize.js","webpack:///./node_modules/swiper/core/modules/observer/observer.js","webpack:///./node_modules/swiper/shared/classes-to-selector.js","webpack:///./js/src/slideshows.js","webpack:///./node_modules/swiper/modules/navigation/navigation.js","webpack:///./node_modules/swiper/shared/create-element-if-not-defined.js","webpack:///./node_modules/swiper/modules/parallax/parallax.js","webpack:///./node_modules/swiper/modules/a11y/a11y.js","webpack:///./js/src/tabs.js","webpack:///./js/src/inpage-directory-search.js","webpack:///./js/src/responsive-nav.jquery.js","webpack:///./js/src/jquery.accordion.js","webpack:///./js/src/common.js","webpack:///./js/src/alert-bar.js"],"sourcesContent":["(($) => {\r\n\r\n const statusContain = document.querySelector('.hours-status');\r\n\r\n if( statusContain ){\r\n fetch(`${site_data.WP_AJAX}?action=is_office_open`)\r\n .then(response => response.json())\r\n .then(response => {\r\n if( response.success ){\r\n if( response.open ){\r\n statusContain.innerHTML = '<span class=\"dot dot--green\"></span>Office is Open'\r\n }\r\n else{\r\n statusContain.innerHTML = '<span class=\"dot dot--red\"></span>Office is Closed'\r\n }\r\n }\r\n });\r\n }\r\n \r\n})(jQuery)","/*jshint browser:true */\n/*!\n* FitVids 1.1\n*\n* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com\n* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/\n* Released under the WTFPL license - http://sam.zoy.org/wtfpl/\n*\n*/\n\n;(function( $ ){\n\n 'use strict';\n\n $.fn.fitVids = function( options ) {\n var settings = {\n customSelector: null,\n ignore: null\n };\n\n if(!document.getElementById('fit-vids-style')) {\n // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js\n var head = document.head || document.getElementsByTagName('head')[0];\n var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';\n var div = document.createElement(\"div\");\n div.innerHTML = '<p>x</p><style id=\"fit-vids-style\">' + css + '</style>';\n head.appendChild(div.childNodes[1]);\n }\n\n if ( options ) {\n $.extend( settings, options );\n }\n\n return this.each(function(){\n var selectors = [\n 'iframe[src*=\"player.vimeo.com\"]',\n 'iframe[src*=\"youtube.com\"]',\n 'iframe[src*=\"youtube-nocookie.com\"]',\n 'iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]',\n 'object',\n 'embed'\n ];\n\n if (settings.customSelector) {\n selectors.push(settings.customSelector);\n }\n\n var ignoreList = '.fitvidsignore';\n\n if(settings.ignore) {\n ignoreList = ignoreList + ', ' + settings.ignore;\n }\n\n var $allVideos = $(this).find(selectors.join(','));\n $allVideos = $allVideos.not('object object'); // SwfObj conflict patch\n $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.\n\n $allVideos.each(function(){\n var $this = $(this);\n if($this.parents(ignoreList).length > 0) {\n return; // Disable FitVids on this video.\n }\n if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }\n if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))\n {\n $this.attr('height', 9);\n $this.attr('width', 16);\n }\n var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),\n width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),\n aspectRatio = height / width;\n if(!$this.attr('name')){\n var videoName = 'fitvid' + $.fn.fitVids._count;\n $this.attr('name', videoName);\n $.fn.fitVids._count++;\n }\n $this.wrap('<div class=\"fluid-width-video-wrapper\"></div>').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');\n $this.removeAttr('height').removeAttr('width');\n });\n });\n };\n \n // Internal counter for unique video names.\n $.fn.fitVids._count = 0;\n \n// Works with either jQuery or Zepto\n})( window.jQuery || window.Zepto );\n","/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <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\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\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\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\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}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\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\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\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: http://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]\n\t\t// 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\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": 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\t\"needsContext\": 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\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// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\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 = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( 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, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\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\tresults.push( 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, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\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\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( 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 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\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 ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\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 ) || rcombinators.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\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 = nid.replace( rcssescape, fcssescape );\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( rtrim, \"$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 (see Issue #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 Sizzle\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 * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.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\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\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 Sizzle 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// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, 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\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\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\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\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\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && 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\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\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\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( 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\tcontains( 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\tcontains( 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( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\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 eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\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 eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( 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// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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 Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.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 contains( context, elem );\n};\n\nSizzle.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 (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.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 */\nSizzle.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\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( 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\tresults.splice( 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\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\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\t\"ATTR\": 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 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).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\t\"CHILD\": 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\tSizzle.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\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": 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\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = 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 elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.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\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": 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, uniqueCache, 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ 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\tuniqueCache[ 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\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ 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\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://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\tSizzle.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 Sizzle 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( 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\t\"not\": 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( rtrim, \"$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 (issue #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\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( 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// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": 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\tSizzle.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\t\"target\": 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\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\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\t\"empty\": function( elem ) {\n\n\t\t\t// http://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\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear 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\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": 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\t\"odd\": 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\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\t\"gt\": 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\ntokenize = Sizzle.tokenize = function( 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 = rcombinators.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( rtrim, \" \" )\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\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\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, uniqueCache, 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\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ 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\tuniqueCache[ 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\tSizzle( 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,\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 || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\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( 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( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\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 (issue #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// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$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: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\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\tresults.push( 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\tSizzle.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\ncompile = Sizzle.compile = function( 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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 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 ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\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// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\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\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\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} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\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 stack, 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.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\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, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#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\n\n// We have to close these tags to support XHTML (#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\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 (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\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\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 (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #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 (#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\", returnTrue );\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, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\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 notAsync, 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\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\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\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\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\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\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 the\n\t\t\t\t// 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.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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 (#504, #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\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\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, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\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\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\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 (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\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 Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\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, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\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\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\tif ( box === \"margin\" ) {\n\t\t\tdelta += 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;\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\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": 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 (#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 #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 (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\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\telem.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 classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\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\telem.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 type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\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\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\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #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 (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#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 (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #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 (#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 #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 (#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 #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 (#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// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #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 #8605, #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// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<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\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\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\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\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\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\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\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\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\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.mouseenter( fnOver ).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\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\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, \"\" );\n};\n\n\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\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// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n if(mfp._hasScrollBar(windowHeight)){\n var s = mfp._getScrollbarSize();\n if(s) {\n windowStyles.marginRight = s;\n }\n }\n }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">×</button>',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('<div>');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-figure\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<figure>'+\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\n\t\t\t\t\t\t'<figcaption>'+\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</figcaption>'+\n\t\t\t\t\t'</figure>'+\n\t\t\t\t'</div>',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\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// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\n\t\t\t\t'</div>',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number. Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));","/* eslint-disable no-undefined */\n\nvar throttle = require('./throttle');\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} [atBegin] Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nmodule.exports = function ( delay, atBegin, callback ) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n};\n","var throttle = require('./throttle');\nvar debounce = require('./debounce');\n\nmodule.exports = {\n\tthrottle: throttle,\n\tdebounce: debounce\n};\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} [noTrailing] Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset)\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {Boolean} [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @return {Function} A new, throttled, function.\n */\nmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.2\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n super(...(items || []));\n makeReactive(this);\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n const translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n $targetEl = $(event.path[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n }\n\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","/* globals jQuery */\n//https://swiperjs.com/\nimport Swiper, {Navigation, Parallax, A11y,} from 'swiper';\n\nSwiper.use([Navigation,Parallax,A11y]);\n\n(($) => {\n\n // //INTERIOR GALLERY w/ THUMBNAILS\n const galleries = document.querySelectorAll('.image-slider');\n const galleriesPrev = document.querySelectorAll('.swiper-button-prev');\n const galleriesNext = document.querySelectorAll('.swiper-button-next');\n\n galleries.forEach((gallery, index) => {\n\n let slider = gallery.querySelector('.js-gallery-slides');\n\n const gallerySlider = new Swiper(slider, {\n slidesPerView: 1,\n spaceBetween: 70,\n speed: 500,\n loop: false,\n loopAdditionalSlides: 1,\n navigation: {\n prevEl: galleriesPrev[index],\n nextEl: galleriesNext[index]\n },\n a11y: {\n enabled: true,\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n }\n });\n\n });\n \n\n})(jQuery)","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning);\n toggleEl($nextEl, swiper.isEnd);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n init();\n update();\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n Object.assign(swiper.navigation, {\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import $ from '../../shared/dom.js';\nexport default function Parallax({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group'\n }\n });\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || !swiper.navigation) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n function init() {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live); // Slide\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n addElRole($(swiper.slides), params.slideRole);\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n }); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n }\n }\n\n on('beforeInit', () => {\n liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n updateNavigation();\n });\n on('toEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('fromEdge', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","/**\n * ## javascript Tabs module Usage\n *\n * ### Markup:\n * <div class=\"tabs\">\n * <ul class=\"tabs__tablist\" role=\"tablist\">\n * <li role=\"presentation\"><a id=\"tab1\" role=\"tab\" href=\"#tab-title1\" aria-selected=\"true\">Tab Title 1</a></li>\n * <li role=\"presentation\"><a id=\"tab2\" role=\"tab\" href=\"#tab-title2\">Tab Title 2</a></li>\n * </ul>\n * <section id=\"tab-title1\" class=\"tabs__panel rtecontent\" role=\"tabpanel\" tabindex=\"-1\" role=\"tabpanel\" aria-labelledby=\"tab1\">\n * Tab Content Goes Here\n * </section>\n * <section id=\"tab-title2\" class=\"tabs__panel rtecontent\" role=\"tabpanel\" tabindex=\"-1\" role=\"tabpanel\" aria-labelledby=\"tab2\">\n * Tab Content Goes Here\n * </section>\n * </div>\n * \n **/\nexport default (($) => {\n\n return function() {\n\n // Get relevant elements and collections\n const tabbed = document.querySelector('.tabs');\n const tablist = tabbed.querySelector('ul.tabs__tablist');\n const tabs = tablist.querySelectorAll('a');\n const panels = tabbed.querySelectorAll('.tabs__panel');\n const hashtag = window.location.hash;\n\n // The tab switching function\n const switchTab = (oldTab, newTab) => {\n newTab.focus();\n // Make the active tab focusable by the user (Tab key)\n newTab.removeAttribute('tabindex');\n // Set the selected state\n newTab.setAttribute('aria-selected', 'true');\n oldTab.removeAttribute('aria-selected');\n oldTab.setAttribute('tabindex', '-1');\n\n // Get the indices of the new and old tabs to find the correct\n // tab panels to show and hide\n let index = Array.prototype.indexOf.call(tabs, newTab);\n let oldIndex = Array.prototype.indexOf.call(tabs, oldTab);\n panels[oldIndex].hidden = true;\n panels[index].hidden = false;\n\n let hash = newTab.getAttribute('href');\n console.log(hash);\n window.location.hash = hash;\n }\n\n if( hashtag ){\n let hashTab = tablist.querySelector('[href=\"' + hashtag + '\"]');\n let starterTab = tablist.querySelector('[aria-selected]');\n if ( hashTab && hashTab !== starterTab ){\n switchTab(starterTab, hashTab);\n }\n }\n \n // Add listeners for selecting tabs\n Array.prototype.forEach.call(tabs, (tab, i) => {\n // Handle clicking of tabs for mouse users\n tab.addEventListener('click', e => {\n e.preventDefault();\n let currentTab = tablist.querySelector('[aria-selected]');\n if (e.currentTarget !== currentTab) {\n switchTab(currentTab, e.currentTarget);\n }\n });\n\n // Handle keydown events for keyboard users\n tab.addEventListener('keydown', e => {\n // Get the index of the current tab in the tabs node list\n let index = Array.prototype.indexOf.call(tabs, e.currentTarget);\n // Work out which key the user is pressing and\n // Calculate the new tab's index where appropriate\n let dir = e.which === 37 ? index - 1 : e.which === 39 ? index + 1 : e.which === 40 ? 'down' : null;\n if (dir !== null) {\n e.preventDefault();\n // If the down key is pressed, move focus to the open panel,\n // otherwise switch to the adjacent tab\n dir === 'down' ? panels[i].focus() : tabs[dir] ? switchTab(e.currentTarget, tabs[dir]) : void 0;\n }\n });\n });\n \n\n }\n\n})(jQuery)\n","export default (($) => {\n\n return function() {\n \n let titlesToSearch = document.querySelectorAll('.js-search-dept-title');\n \n function liveSearch() {\n let search_query = document.getElementById(\"dir-search\").value;\n \n //Use innerText if all contents are visible\n //Use textContent for including hidden elements\n for (var i = 0; i < titlesToSearch.length; i++) {\n if(titlesToSearch[i].textContent.toLowerCase()\n .includes(search_query.toLowerCase())) {\n //show departments that do include the search query\n titlesToSearch[i].closest('.department-wrapper').classList.remove(\"is-hidden\");\n\n } else {\n //hide departments that dont have the search query\n titlesToSearch[i].closest('.department-wrapper').classList.add(\"is-hidden\");\n\n }\n }\n }\n\n //A little delay\n let typingTimer; \n let typeInterval = 500; \n let searchInput = document.getElementById('dir-search');\n\n searchInput.addEventListener('keyup', () => {\n clearTimeout(typingTimer);\n typingTimer = setTimeout(liveSearch, typeInterval);\n });\n\n $('#search-directory').on('submit', (e) => {\n e.preventDefault();\n liveSearch();\n });\n\n }\n\n})(jQuery)","/* globals jQuery */\n\nimport { debounce } from 'throttle-debounce'\n\n/**\n * jQueryResponsiveNav module\n *\n * Usage:\n *\n * ```js\n * $.fn.responsiveNav = require('./responsive-nav.jquery.js')\n *\n * $('.my-nav-element').responsiveNav({\n * navType: 'offCanvas'\n * })\n * ```\n */\nexport default (($) => {\n\nreturn function jQueryResponsiveNav( options ) {\n\n options = $.extend({}, {\n wrapperSelector: '.site-wrapper',\n menuButtonSelector: '.menu-btn',\n menuOpenWrapperClass: 'menu-open',\n activeClass: 'active',\n dropdownSelector: '',\n navType: 'offCanvas',\n debounceTime: 150,\n closeOnOutsideClick: false,\n showTabsOnFocus: false,\n }, options)\n\n const $this = $(this),\n $wrapper = $( options.wrapperSelector ),\n $menuButton = $( options.menuButtonSelector )\n\n // target dropdown element, which may be distinct from $this\n const $dropdownElem = options.dropdownSelector ?\n $(options.dropdownSelector) :\n $this\n\n function _menuIsOpen() {\n //site wrapper has the menu-open class\n return $menuButton.hasClass( options.activeClass )\n }\n\n /*\n * CLOSE NAVIGATION SETUP\n */\n function _closeDropdownNav() {\n $dropdownElem.slideUp()\n }\n\n function _closeOffCanvasNav() {\n $wrapper.removeClass( options.menuOpenWrapperClass )\n }\n\n const closeNavStrategies = {\n dropdown: _closeDropdownNav,\n offCanvas: _closeOffCanvasNav,\n }\n\n //set what type of closeNav we want\n const closeNavStrategy = closeNavStrategies[options.navType] || _closeOffCanvasNav\n\n //THIS IS THE ACTUAL FUNCTIoN THAT GETS CALLED TO CLOSE THE NAV\n function closeNav() {\n closeNavStrategy()\n $menuButton.removeClass( options.activeClass )\n }\n\n /*\n * OPEN NAVIGATION SETUP\n */\n function _openDropdownNav() {\n $dropdownElem.slideDown()\n }\n\n function _openOffCanvasNav() {\n $wrapper.addClass( options.menuOpenWrapperClass )\n }\n\n const openNavStrategies = {\n dropdown: _openDropdownNav,\n offCanvas: _openOffCanvasNav,\n }\n //set what type of closeNav we want\n const openNavStrategy = openNavStrategies[options.navType] || _openOffCanvasNav\n\n //THIS IS THE ACTUAL FUNCTION THAT GETS CALLED TO OPEN THE NAV\n function openNav() {\n\n openNavStrategy();\n $menuButton.addClass( options.activeClass );\n\n if (options.closeOnOutsideClick) {\n // close the menu when the user clicks anywhere outside it\n $(options.wrapperSelector).on('touchstart, click', function _onOutsideClick(evt) {\n //if not nav container or a decendant of nav container\n if( !$this.is(evt.target) && $this.has(evt.target).length === 0 ) {\n closeNav();\n }\n });\n }\n }\n\n //KEYBOARD FUNCTIONALITY\n if( options.showTabsOnFocus ) {\n // Adding quick Tab Functionality for Navigation\n $('nav.main-nav ul.main-nav__menu > li.menu-item-has-children > a').on('focus', function () {\n $(this).siblings('.main-nav__second').addClass('tab-show');\n }).on('blur',function(){\n $(this).siblings('.main-nav__second').removeClass('tab-show');\n });\n\n // focusing on sub menu item show its dropdown\n $('nav.main-nav ul.main-nav__menu > li.menu-item-has-children ul.main-nav__second-ul li a').on('focus', function () {\n $(this).closest('.main-nav__second').addClass('tab-show');\n }).on('blur',function(){\n $(this).closest('.main-nav__second').removeClass('tab-show');\n });\n }\n\n const sublevelNav = function() {\n\t\t$this.find('span.main-nav__dropper').each(function(){\n\t\t\t$(this).on('touchstart, click', function(event) {\n\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t//if menu is open and the subnav is not visible and subnav exists\n\t\t\t\tif ( _menuIsOpen() && !$(this).parent().next().is(':visible') && $(this).parent().next().length > 0) {\n\n\t\t\t\t\t//close what's already open at the same level\n\t\t\t\t\t//remove toggle class from the li and slide up its child ul\n\t\t\t\t\t$(this).parent().parent().siblings().removeClass('toggle').children('ul, div').slideUp(250);\n\n\t\t\t\t\t//expand current click\n\t\t\t\t\t$(this).parent().parent().addClass('toggle');\n\t\t\t\t\t$(this).parent().next().slideDown(250);\n\n\t\t\t\t}\n\t\t\t\telse if ( _menuIsOpen() && $(this).parent().next('ul, div').is(':visible') ) {\n\t\t\t\t\t\t//close this item\n\t\t\t\t\t\t$(this).parent().parent().removeClass('toggle');\n\t\t\t\t\t\t$(this).parent().next('ul, div').slideUp(250);\n\t\t\t\t}\n\n\t\t\t}); //end bind\n\t\t});//end find span.dropper\n\t};//end sublevelNav\n\n const activeToggleFn = function(){\n //on mobile check for active navigation and set open accordingly\n if( $menuButton.is(':visible') ){\n\n $this.find('ul.main-nav__menu li.current-menu-item, ul.main-nav__menu li.current-page-ancestor').each(function(){\n if( !$(this).hasClass('toggle') ){\n $(this).addClass('toggle');\n }\n if( !$(this).children('ul, div').is(':visible') ){\n $(this).children('ul, div').show();\n }\n });\n }\n } //end activeToggleFn\n\n\n $menuButton.on( 'touchstart, click', function(event) {\n\n event.stopPropagation();\n event.preventDefault();\n\n if ( _menuIsOpen() ) {\n closeNav();\n }\n else{\n openNav();\n }\n }) //end button on\n\n sublevelNav()\n activeToggleFn()\n\n $(window).on('resize', debounce(options.debounceTime, function() {\n\n if( !$menuButton.is(':visible') ) {\n //close mobile menu\n if ( _menuIsOpen() ) {\n //closeNav() - we dont want to run the function cause we dont want all transitions with the dropdown\n $menuButton.removeClass( options.activeClass );\n $wrapper.removeClass( options.menuOpenWrapperClass );\n $this.removeAttr('style');\n }\n //remove any inline styles from subnavigation\n $this.find( '.main-nav__second, .main-nav__third' ).removeAttr( 'style' )\n $this.find('.menu-item-has-children').removeClass('toggle')\n $this.removeAttr('style')\n }\n else{\n activeToggleFn()\n }\n\n }));\n\n return this;\n}\n\n})(jQuery)\n","/**\n * ## jQueryAccordion module Usage\n *\n * ### Markup:\n * <dl class=\"accordion\">\n * <dt data-id=\"tab1\"><h3><a href=\"#tab1\">Tab Title</a></h3></dt>\n * <dd>Panel Content</dd>\n * <dt data-id=\"tab1\"><h3><a href=\"#tab2\">Tab Title</a></h3></dt>\n * <dd>Panel Content</dd>\n * </dl>\n *\n * ### JS:\n * $.fn.accordion = require('./jquery.accordion.js');\n * $('dl.accordion').accordion();\n */\nexport default (($) => {\n\n return function() {\n\n //VARIABLES\n const $tabs = $('dl.accordion dt'),\n hashtag = window.location.hash,\n panelId = window.location.hash.replace('#','');\n\n //FUNCTIONS\n const toggleAccPanelFn = function( $this_hash, $this_tab, $this_panel ){\n if( $this_tab.hasClass('active') && $this_panel.is(':visible') ){\n $this_panel.slideUp();\n $this_tab.removeClass('active').addClass('inactive');\n }\n else{\n $this_panel.slideDown();\n $this_tab.addClass('active').removeClass('inactive');\n if( !$this_panel.closest('dl.accordion').hasClass('accordion--directory') ){\n window.location.hash = $this_hash;\n }\n \n }\n\n }\n\n //TAB ANCHOR CLICKS\n $tabs.find('a').on('click', function(e){\n e.preventDefault()\n const this_hash = $(this).attr('href');\n const this_tab = $(this).closest('dt');\n const this_panel = this_tab.next();\n\n toggleAccPanelFn(this_hash, this_tab, this_panel);\n });\n\n //PRESELECTED OPEN PANEL (USE OF HASHTAGS)\n if( hashtag && $('dl.accordion dt[data-id=\"'+panelId+'\"]').length>0 ){\n \n const selected_tab = $('dl.accordion dt[data-id=\"'+panelId+'\"]');\n const selected_panel = selected_tab.next();\n const accordionPos = selected_tab.offset().top;\n \n //open panel\n toggleAccPanelFn(hashtag, selected_tab, selected_panel)\n\n //set scroll position to the open accordion panel\n $(document).scrollTop(accordionPos);\n //$('html, body').animate({ scrollTop: accordionPos }, 500);\n\n }\n }\n\n})(jQuery)\n","/* globals jQuery */\nimport 'fitvids.1.1.0'\nimport 'magnific-popup'\n\nimport './slideshows.js'\nimport './office-hours.js'\nimport tabs from './tabs.js'\nimport directorySearch from './inpage-directory-search.js'\nimport responsiveNav from './responsive-nav.jquery.js'\nimport accordion from './jquery.accordion.js'\nimport { initAlert } from './alert-bar.js'\n\n(($) => {\n\n $.fn.responsiveNav = responsiveNav\n $.fn.accordion = accordion\n\n\t//Fetch alerts\n\tinitAlert();\n\n // Make nav menu nice & responsive\n $('nav.main-nav').responsiveNav({\n navType: 'offCanvas', //default option for dropdown type use 'dropdown'\n closeOnOutsideClick: true, //set to false if using dropdown type\n showTabsOnFocus: true,\n });\n\n //tabs - help & directory\n if( document.querySelector('.tabs') ){\n tabs();\n }\n\n if( document.querySelector('.search-dir-form') ){\n directorySearch();\n }\n \n // Responsive Videos\n $('.rtecontent').fitVids();\n\n // Accordions\n $('dl.accordion').accordion();\n\n $('#categoryFilter input[type=\"radio\"]').on('change',function(){\n\t\tvar catLink = $(this).val();\n\t\twindow.location = catLink;\n\t});\n\n\t//SEARCH POPUP\n $('.js-open-search').magnificPopup({\n\t\ttype:'inline',\n\t\talignTop: true,\n\t\tmodal: true,\n\t\tmidClick: true, // Allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source in href.\n\t\tmainClass: 'mfp-fade',\n\t\tfocus : '#s',\n\t\tcallbacks: {\n\t\t\t// When elemened is focused, some mobile browsers in some cases zoom in\n\t\t\t// It looks not nice, so we disable it:\n\t\t\tbeforeOpen: function() {\n\t\t\t\tif($(window).width() < 700) {\n this.st.focus = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.st.focus = '#s';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t$(document).on('click', '.js-close-search', function (e) {\n\t\te.preventDefault();\n\t\t$.magnificPopup.close();\n\t});\n\t /* END SEARCH CONTROLS */\n\n})(jQuery)\n","export function initAlert() {\r\n\r\n const globalContain = document.getElementById('global-alert-container');\r\n\tconst inpageContain = document.getElementById('inpage-alert-container');\r\n\r\n\tif (globalContain || inpageContain) {\r\n\t\t// Check if there are any alerts for this post id, and add them to the page if so\r\n\t\tconst params = new URLSearchParams({\r\n action: 'get_page_alerts',\r\n post: globalContain.dataset.post,\r\n });\r\n\r\n //fetch alert data\r\n\t\tfetch(`${site_data.WP_AJAX}?${params}`)\r\n .then(response => response.json())\r\n .then(response => {\r\n if (!response.success) {\r\n throw new Error('Unable to get page alerts data');\r\n }\r\n \r\n //check if there are alerts\r\n\t\t\t\tif (response.markup.global_alert || response.markup.in_page_alert ) {\r\n //insert global alerts\r\n if (response.markup.global_alert){\r\n globalContain.innerHTML = response.markup.global_alert;\r\n }\r\n //insert in page alerts\r\n\t\t\t\t\tif( response.markup.in_page_alert ){\r\n inpageContain.innerHTML = response.markup.in_page_alert;\r\n }\r\n\r\n const $alert = $('.alert-bar');\r\n $alert.slideDown();\r\n\r\n\t\t\t\t\t// Init click events\r\n\t\t\t\t\tconst $closeAlertBtn = $('.alert-bar__close');\r\n\t\t\t\t\t$closeAlertBtn.on('click', function (e) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\t//Fade out message text and close button\r\n\t\t\t\t\t\t$(this).closest('.alert-bar').find('.container').addClass(\"fade\");\r\n\t\t\t\t\t\t//Slide up message\r\n\t\t\t\t\t\t$(this).closest('.alert-bar').delay(250).slideUp();\r\n\t\t\t\t\t\t// persist the dismissal in a cookie\r\n\t\t\t\t\t\tdocument.cookie = $(this).data('alert-cookie');\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n })\r\n\t\t\t//todo error logging here\r\n .catch(error => console.log(error));\r\n\t}\r\n}"],"names":["statusContain","document","querySelector","fetch","site_data","WP_AJAX","then","response","json","success","open","innerHTML","$","fn","fitVids","options","settings","customSelector","ignore","getElementById","head","getElementsByTagName","div","createElement","appendChild","childNodes","extend","this","each","selectors","push","ignoreList","$allVideos","find","join","not","$this","parents","length","tagName","toLowerCase","parent","css","isNaN","attr","aspectRatio","parseInt","height","width","videoName","_count","wrap","removeAttr","window","Zepto","global","factory","module","exports","w","Error","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","text","getAttribute","setAttribute","parentNode","removeChild","toType","version","jQuery","selector","context","init","isArrayLike","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","id","getElementsByClassName","qsa","test","testContext","scope","toSelector","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","getAttributeNode","tag","tmp","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","needsContext","rsingleTag","winnow","qualifier","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","l","closest","index","prevAll","add","addBack","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","Callbacks","object","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","bool","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","trim","_jQuery","_$","noConflict","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","CLOSE_EVENT","BEFORE_CLOSE_EVENT","MARKUP_PARSE_EVENT","OPEN_EVENT","CHANGE_EVENT","NS","EVENT_NS","READY_CLASS","REMOVING_CLASS","PREVENT_CLOSE_CLASS","MagnificPopup","_isJQ","_window","_mfpOn","f","ev","_getEl","_mfpTrigger","st","callbacks","charAt","_getCloseBtn","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","appVersion","navigator","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","supportsTransitions","probablyMobile","userAgent","popupsCache","isObj","items","isOpen","mainEl","defaults","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","_checkIfClose","contentContainer","preloader","tLoading","modules","closeBtnInside","template","close_replaceWith","alignTop","fixedBgPos","updateSize","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","mainClass","_addClassToMFP","updateItemHTML","_lastFocusedEl","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","_removeClassFromMFP","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","clientWidth","innerWidth","innerHeight","parseEl","markup","newContent","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","midClick","disableOn","updateStatus","closeOnContent","closeOnBg","cName","scrollHeight","_parseMarkup","scrollbarSize","scrollDiv","registerModule","jqEl","itemOpts","_hiddenClass","_inlinePlaceholder","_lastInlineElement","INLINE_NS","_putInlineElementsBack","hiddenClass","tNotFound","initInline","getInline","inlineSt","inline","inlineElement","_ajaxCur","AJAX_NS","_removeAjaxCursor","_destroyAjaxRequest","req","cursor","tError","initAjax","getAjax","textStatus","finished","loadError","_imgInterval","_getTitle","title","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","img","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","counter","mfpSetInterval","setInterval","naturalWidth","getImage","guard","onLoadComplete","loaded","onLoadError","alt","img_replaceWith","loading","hasMozTransform","enabled","element","initZoom","zoomSt","zoom","openTimeout","animatedImg","getElToAnimate","newImg","transition","cssObj","zIndex","showMainContent","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","MozTransform","IFRAME_NS","_fixIframeBugs","isShowing","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","substr","lastIndexOf","dataObj","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","arrowLeft","arrowRight","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","min","preloadAfter","_preloadItem","RETINA_NS","replaceSrc","ratio","initRetina","devicePixelRatio","retina","throttle","atBegin","debounce","noTrailing","debounceMode","timeoutID","lastExec","elapsed","Number","clear","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","forEach","ssrDocument","createEvent","initEvent","createElementNS","importNode","hostname","origin","pathname","search","ssrWindow","history","replaceState","pushState","go","back","CustomEvent","Image","screen","matchMedia","cancelAnimationFrame","Dom7","super","__proto__","makeReactive","arrayFlat","res","arrayFilter","toCreate","tempParent","uniqueArray","arrayUnique","noTrigger","shortcut","Methods","c","classList","attrName","transform","transitionDuration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","k","handleEvent","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","dataIndex","dispatchEvent","transitionEnd","dom","fireCallBack","outerWidth","includeMargins","outerHeight","clientTop","clientLeft","scrollY","scrollX","compareWith","child","previousSibling","returnIndex","newChild","tempDiv","nextElementSibling","nextEls","previousElementSibling","prevEls","foundElements","found","methodName","o","noExtend","nextSource","HTMLElement","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","varName","varValue","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","getTime","easeProgress","currentPosition","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","supportsPassive","gestures","calcSupport","priority","eventsListeners","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","$el","clientHeight","isHorizontal","isVertical","assign","size","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","slideTo","internal","indexAsNumber","animating","preventInteractionOnTransition","initialSlide","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","isH","_immediateVirtual","_swiperImmediateVirtual","behavior","onSlideToWrapperTransitionEnd","destroyed","slideToLoop","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","getTranslate","loopDestroy","onTouchStart","touchEventsData","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwipingClass","shadowRoot","path","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","closestElement","allowClick","swipeHandler","currentX","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","onTouchEnd","touchEndTime","timeDiff","pathTree","composedPath","lastClickTime","currentPos","stopIndex","groupSize","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","onClick","preventClicks","preventClicksPropagation","onScroll","newProgress","previousTranslate","dummyEventAttached","dummyEventListener","touchEvents","device","domMethod","swiperMethod","passiveListeners","passive","move","cancel","updateOnWindowResize","ios","android","attachEvents","detachEvents","isGridEnabled","addClasses","suffixes","entries","resultClasses","prepareClasses","fill","containerModifierClass","emitContainerClasses","removeClasses","resizeObserver","createElements","virtualTranslate","breakpointsBase","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","update","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","OTransform","MsTransform","msTransform","m41","m42","byController","x","y","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","moving","isLocked","unsetGrabCursor","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","directionChanged","needsReLoop","changeDirection","isEnabled","enable","containerEl","currentHeight","points","point","minRatio","wasLocked","lastSlideIndex","lastSlideRightEdge","images","loadImage","imageEl","srcset","sizes","checkForComplete","onReady","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","overrides","platform","ua","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getDevice","isSafari","isWebView","calcBrowser","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","wrapper","destroy","deleteInstance","cleanStyles","deleteProps","static","newDefaults","installModule","prototypeGroup","protoMethod","use","observer","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","galleries","galleriesPrev","galleriesNext","getEl","toggleEl","disabledClass","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","checkProps","hideOnClick","_s","targetEl","pagination","clickable","isHidden","parallax","setTransform","rtlFactor","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","liveRegion","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","bulletClass","updateNavigation","hasPagination","bullets","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","$containerEl","repeat","getRandomNumber","live","addElLive","$slideEl","bulletEl","$bulletEl","renderBullet","bulletActiveClass","updatePagination","slider","typingTimer","titlesToSearch","liveSearch","search_query","includes","wrapperSelector","menuButtonSelector","menuOpenWrapperClass","activeClass","dropdownSelector","navType","debounceTime","closeOnOutsideClick","showTabsOnFocus","$wrapper","$menuButton","$dropdownElem","_menuIsOpen","_closeOffCanvasNav","closeNavStrategy","dropdown","offCanvas","closeNav","_openOffCanvasNav","openNavStrategy","activeToggleFn","$tabs","hashtag","panelId","toggleAccPanelFn","$this_hash","$this_tab","$this_panel","this_hash","this_tab","this_panel","selected_tab","selected_panel","accordionPos","responsiveNav","accordion","globalContain","inpageContain","URLSearchParams","action","post","dataset","global_alert","in_page_alert","cookie","log","initAlert","tabbed","tablist","tabs","panels","switchTab","oldTab","newTab","oldIndex","hashTab","starterTab","tab","currentTab","directorySearch","catLink","beforeOpen"],"sourceRoot":""}