{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@ksedline/turnjs/index.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/javascript/packs/components/ScrollTo.js","webpack:///(webpack)/buildin/module.js","webpack:///./app/javascript/packs/flipbook.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","has3d","hasRot","$","vendor","PI","Math","A90","isTouch","window","mouseEvents","down","move","up","over","out","corners","backward","forward","all","displays","directions","turnOptions","acceleration","display","duration","page","gradients","turnCorners","when","flipOptions","cornerSize","turnMethods","init","options","parts","document","body","style","exec","navigator","userAgent","parseFloat","getPrefix","pageNum","data","this","ch","children","extend","width","height","direction","attr","css","opts","pageObjs","pages","pageWrap","pageZoom","pagePlace","pageMv","zoom","totalPages","eventHandlers","touchStart","proxy","_touchStart","touchMove","_touchMove","touchEnd","_touchEnd","start","_eventStart","has","position","turn","transform","translate","length","_eventEnd","_eventPressed","_eventReleased","_flip","parent","done","addPage","element","currentPage","className","incPages","lastPage","destroying","parseInt","turnError","_movePages","float","addClass","indexOf","hasClass","removeClass","_addPage","_removeFromDOM","_necessPage","class","overflow","append","appendTo","prop","_pageSize","_makeFlip","remove","hasPage","center","size","left","noCenter","view","tpage","marginLeft","destroy","flipbook","trigger","each","index","eventName","unbind","fparent","shadow","removeData","is","newZoom","currentView","iz","newWidth","round","newHeight","autoCenter","_updateShadow","top","right","pageWidth","pageHeight","odd","single","flip","next","disabled","_setPageLoc","_makeRange","range","remainingPages","_view","floor","min","pagesInDOM","max","_removePageFromDOM","dd","flipMethods","_moveFoldingPage","f","fwrapper","_removeMv","removePage","_fitPage","from","change","that","_display","currentDisplay","undefined","inArray","dir","toLowerCase","animating","corner","disable","_disable","resize","splice","_addMv","push","stop","ignore","animate","force","_pages","_missing","missing","newView","_turnPage","current","place","optsCorners","split","flipData","actualPoint","point","effect","_page","pop","previous","shift","peel","_addMotionPage","e","actualZoom","isDefaultPrevented","charAt","target","turned","turnData","mouseAction","time","Date","getTime","outArea","x","preventDefault","stopPropagation","apply","arguments","_eventMove","calculateZ","mv","nextPage","placePage","dpage","total","pageZ","partZ","pageV","addView","abs","update","fixed","pos","actualView","zIndex","pageLocation","view2","divAtt","loc","_options","version","hover","_addPageWrapper","setData","z","_z","_cAllowed","_cornerActivated","y","csz","allowedCorners","_isIArea","offset","originalEvent","touches","pageX","pageY","_c","point2D","_c2","_foldingPage","_backGradient","gradient","bshadow","type","full","wrapper","fpage","ashadow","sqrt","pow","findPos","cssProperties","prepend","hide","flips","bottom","cursor","_fold","leftPos","gradientX","fpageOrigin","parentOrigin","parentCss","relX","angle","half","backgroundColor","opacity","px","gradientEndPointA","gradientEndPointB","gradientStartVal","gradientSize","gradientOpacity","shadowVal","a","df","tr","folding","ac","tan","h","substr","compute","rel","middle","alpha","atan2","gamma","distance","sin","cos","beta","side","sideX","sideY","endingPoint","far","mvW","mvH","cssA","cssB","aliasingFk","origin","rotate","_showFoldedPage","visible","status","animatef","to","frame","v","turning","show","shadows","bshadowLoc","hideFoldedPage","p1","p4","delta","p2","p3","np","bezier","complete","hiding","turnPage","elevation","moving","isTurning","_disable2","_hover","dec","methods","args","Array","slice","overf","b","use3d","degrees","vendorPrefixes","len","p0","colors","numColors","j","cols","join","dx","dy","angle2","diagonal","gradientDiagonal","slope","inverse","segA","context","event","Event","isPropagationStopped","message","TurnJsError","Error","offsetLeft","offsetTop","offsetParent","requestAnim","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","setTimeout","fn","_transform","properties","diff","easing","timeDiff","cssPrefix","cssTransitionEnd","el","createElement","transitions","transition","OTransition","MSTransition","MozTransition","WebkitTransition","global","factory","w","noGlobal","arr","getProto","getPrototypeOf","_slice","flat","array","concat","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","nodeType","item","isWindow","preservedScriptAttributes","src","nonce","noModule","DOMEval","code","node","doc","val","script","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","isArrayLike","jquery","toArray","num","pushStack","elems","ret","merge","prevObject","map","elem","first","eq","last","even","grep","_elem","end","sort","copy","copyIsArray","clone","deep","isPlainObject","isArray","expando","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","second","invert","matches","callbackExpect","arg","guid","_i","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","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","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","nodeName","childNodes","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","markFunction","assert","addHandle","attrs","handler","attrHandle","siblingCheck","cur","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","addEventListener","attachEvent","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","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","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","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","_dir","until","truncate","_siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","contents","prev","sibling","targets","closest","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","rnothtmlwhite","Identity","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","fire","once","stopOnFalse","empty","lock","locked","fireWith","fired","Deferred","func","tuples","_state","_promise","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","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","configurable","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","values","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","_on","types","one","origFn","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","matchedHandlers","matchedSelectors","button","addProp","hook","writable","load","noBubble","click","beforeunload","returnValue","props","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","shiftKey","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","on","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","_remove","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","insertBefore","before","after","replaceWith","replaceChild","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","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","cssHooks","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","margin","padding","border","prefix","suffix","expand","expanded","propHooks","run","percent","eased","step","fx","scrollTop","scrollLeft","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","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","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","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","_callback","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","_callback2","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","delegate","undelegate","fnOver","fnOut","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","noConflict","ScrollTo","webpackPolyfill","deprecate","paths","timeoutId","ratio","aspectWrapper","viewer","pagesCount","prevBtn","nextBtn","pageNumEl","toggleViewEl","loading","linkToPageEl","setCurrentPage","setViewerDimensions","flipWidth","flipHeight","neededwidth","neededHeight","pageChange","action","toggleFullscreen","onkeyup","link","book","initPage","naturalWidth","naturalHeight"],"mappings":"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","file":"flipbook.ddc0c54c98b5b2b5580c.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//cdn3-assets.talendo.ch/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 999);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nvar $ = require(\"jquery\");\n\nvar has3d,\n hasRot,\n vendor = \"\",\n _version = \"4.1.0\",\n PI = Math.PI,\n A90 = PI / 2,\n isTouch = (\"ontouchstart\" in window),\n mouseEvents = isTouch ? {\n down: \"touchstart\",\n move: \"touchmove\",\n up: \"touchend\",\n over: \"touchstart\",\n out: \"touchend\"\n} : {\n down: \"mousedown\",\n move: \"mousemove\",\n up: \"mouseup\",\n over: \"mouseover\",\n out: \"mouseout\"\n},\n // Contansts used for each corner\n// | tl * tr |\n// l | * * | r\n// | bl * br |\ncorners = {\n backward: [\"bl\", \"tl\"],\n forward: [\"br\", \"tr\"],\n all: [\"tl\", \"bl\", \"tr\", \"br\", \"l\", \"r\"]\n},\n // Display values\ndisplays = [\"single\", \"double\"],\n // Direction values\ndirections = [\"ltr\", \"rtl\"],\n // Default options\nturnOptions = {\n // Enables hardware acceleration\n acceleration: true,\n // Display\n display: \"double\",\n // Duration of transition in milliseconds\n duration: 600,\n // First page\n page: 1,\n // Enables gradients\n gradients: true,\n // Corners used when turning the page\n turnCorners: \"bl,br\",\n // Events\n when: null\n},\n flipOptions = {\n // Size of the active zone of each corner\n cornerSize: 100\n},\n // Number of pages in the DOM, minimum value: 6\npagesInDOM = 6,\n turnMethods = {\n // Singleton constructor\n // $('#selector').turn([options]);\n init: function init(options) {\n // Define constants\n has3d = \"WebKitCSSMatrix\" in window || \"MozPerspective\" in document.body.style;\n hasRot = rotationAvailable();\n vendor = getPrefix();\n var i,\n that = this,\n pageNum = 0,\n data = this.data(),\n ch = this.children(); // Set initial configuration\n\n options = $.extend({\n width: this.width(),\n height: this.height(),\n direction: this.attr(\"dir\") || this.css(\"direction\") || \"ltr\"\n }, turnOptions, options);\n data.opts = options;\n data.pageObjs = {};\n data.pages = {};\n data.pageWrap = {};\n data.pageZoom = {};\n data.pagePlace = {};\n data.pageMv = [];\n data.zoom = 1;\n data.totalPages = options.pages || 0;\n data.eventHandlers = {\n touchStart: $.proxy(turnMethods._touchStart, this),\n touchMove: $.proxy(turnMethods._touchMove, this),\n touchEnd: $.proxy(turnMethods._touchEnd, this),\n start: $.proxy(turnMethods._eventStart, this)\n }; // Add event listeners\n\n if (options.when) for (i in options.when) {\n if (has(i, options.when)) this.bind(i, options.when[i]);\n } // Set the css\n\n this.css({\n position: \"relative\",\n width: options.width,\n height: options.height\n }); // Set the initial display\n\n this.turn(\"display\", options.display); // Set the direction\n\n if (options.direction !== \"\") this.turn(\"direction\", options.direction); // Prevent blue screen problems of switching to hardware acceleration mode\n // By forcing hardware acceleration for ever\n\n if (has3d && !isTouch && options.acceleration) this.transform(translate(0, 0, true)); // Add pages from the DOM\n\n for (i = 0; i < ch.length; i++) {\n if ($(ch[i]).attr(\"ignore\") != \"1\") {\n this.turn(\"addPage\", ch[i], ++pageNum);\n }\n } // Event listeners\n\n\n $(this).bind(mouseEvents.down, data.eventHandlers.touchStart).bind(\"end\", turnMethods._eventEnd).bind(\"pressed\", turnMethods._eventPressed).bind(\"released\", turnMethods._eventReleased).bind(\"flip\", turnMethods._flip);\n $(this).parent().bind(\"start\", data.eventHandlers.start);\n $(document).bind(mouseEvents.move, data.eventHandlers.touchMove).bind(mouseEvents.up, data.eventHandlers.touchEnd); // Set the initial page\n\n this.turn(\"page\", options.page); // This flipbook is ready\n\n data.done = true;\n return this;\n },\n // Adds a page from external data\n addPage: function addPage(element, page) {\n var currentPage,\n className,\n incPages = false,\n data = this.data(),\n lastPage = data.totalPages + 1;\n if (data.destroying) return false; // Read the page number from the className of `element` - format: p[0-9]+\n\n if (currentPage = /\\bp([0-9]+)\\b/.exec($(element).attr(\"class\"))) page = parseInt(currentPage[1], 10);\n\n if (page) {\n if (page == lastPage) incPages = true;else if (page > lastPage) throw turnError('Page \"' + page + '\" cannot be inserted');\n } else {\n page = lastPage;\n incPages = true;\n }\n\n if (page >= 1 && page <= lastPage) {\n if (data.display == \"double\") className = page % 2 ? \" odd\" : \" even\";else className = \"\"; // Stop animations\n\n if (data.done) this.turn(\"stop\"); // Move pages if it's necessary\n\n if (page in data.pageObjs) turnMethods._movePages.call(this, page, 1); // Increase the number of pages\n\n if (incPages) data.totalPages = lastPage; // Add element\n\n data.pageObjs[page] = $(element).css({\n float: \"left\"\n }).addClass(\"page p\" + page + className);\n\n if (!hasHardPage() && data.pageObjs[page].hasClass(\"hard\")) {\n data.pageObjs[page].removeClass(\"hard\");\n } // Add page\n\n\n turnMethods._addPage.call(this, page); // Remove pages out of range\n\n\n turnMethods._removeFromDOM.call(this);\n }\n\n return this;\n },\n // Adds a page\n _addPage: function _addPage(page) {\n var data = this.data(),\n element = data.pageObjs[page];\n if (element) if (turnMethods._necessPage.call(this, page)) {\n if (!data.pageWrap[page]) {\n // Wrapper\n data.pageWrap[page] = $(\"
\", {\n class: \"page-wrapper\",\n page: page,\n css: {\n position: \"absolute\",\n overflow: \"hidden\"\n }\n }); // Append to this flipbook\n\n this.append(data.pageWrap[page]);\n\n if (!data.pagePlace[page]) {\n data.pagePlace[page] = page; // Move `pageObjs[page]` to wrapper\n\n data.pageObjs[page].appendTo(data.pageWrap[page]);\n } // Set the size of the page\n\n\n var prop = turnMethods._pageSize.call(this, page, true);\n\n element.css({\n width: prop.width,\n height: prop.height\n });\n data.pageWrap[page].css(prop);\n }\n\n if (data.pagePlace[page] == page) {\n // If the page isn't in another place, create the flip effect\n turnMethods._makeFlip.call(this, page);\n }\n } else {\n // Place\n data.pagePlace[page] = 0; // Remove element from the DOM\n\n if (data.pageObjs[page]) data.pageObjs[page].remove();\n }\n },\n // Checks if a page is in memory\n hasPage: function hasPage(page) {\n return has(page, this.data().pageObjs);\n },\n // Centers the flipbook\n center: function center(page) {\n var data = this.data(),\n size = $(this).turn(\"size\"),\n left = 0;\n\n if (!data.noCenter) {\n if (data.display == \"double\") {\n var view = this.turn(\"view\", page || data.tpage || data.page);\n\n if (data.direction == \"ltr\") {\n if (!view[0]) left -= size.width / 4;else if (!view[1]) left += size.width / 4;\n } else {\n if (!view[0]) left += size.width / 4;else if (!view[1]) left -= size.width / 4;\n }\n }\n\n $(this).css({\n marginLeft: left\n });\n }\n\n return this;\n },\n // Destroys the flipbook\n destroy: function destroy() {\n var page,\n flipbook = this,\n data = this.data(),\n events = [\"end\", \"first\", \"flip\", \"last\", \"pressed\", \"released\", \"start\", \"turning\", \"turned\", \"zooming\", \"missing\"];\n if (trigger(\"destroying\", this) == \"prevented\") return;\n data.destroying = true;\n $.each(events, function (index, eventName) {\n flipbook.unbind(eventName);\n });\n this.parent().unbind(\"start\", data.eventHandlers.start);\n $(document).unbind(mouseEvents.move, data.eventHandlers.touchMove).unbind(mouseEvents.up, data.eventHandlers.touchEnd);\n\n while (data.totalPages !== 0) {\n this.turn(\"removePage\", data.totalPages);\n }\n\n if (data.fparent) data.fparent.remove();\n if (data.shadow) data.shadow.remove();\n this.removeData();\n data = null;\n return this;\n },\n // Checks if this element is a flipbook\n is: function is() {\n return _typeof(this.data().pages) == \"object\";\n },\n // Sets and gets the zoom value\n zoom: function zoom(newZoom) {\n var data = this.data();\n\n if (typeof newZoom == \"number\") {\n if (newZoom < 0.001 || newZoom > 100) throw turnError(newZoom + \" is not a value for zoom\");\n if (trigger(\"zooming\", this, [newZoom, data.zoom]) == \"prevented\") return this;\n var size = this.turn(\"size\"),\n currentView = this.turn(\"view\"),\n iz = 1 / data.zoom,\n newWidth = Math.round(size.width * iz * newZoom),\n newHeight = Math.round(size.height * iz * newZoom);\n data.zoom = newZoom;\n $(this).turn(\"stop\").turn(\"size\", newWidth, newHeight);\n /*.\n css({marginTop: size.height * iz / 2 - newHeight / 2});*/\n\n if (data.opts.autoCenter) this.turn(\"center\");\n /*else\n $(this).css({marginLeft: size.width * iz / 2 - newWidth / 2});*/\n\n turnMethods._updateShadow.call(this);\n\n for (var i = 0; i < currentView.length; i++) {\n if (currentView[i] && data.pageZoom[currentView[i]] != data.zoom) {\n this.trigger(\"zoomed\", [currentView[i], currentView, data.pageZoom[currentView[i]], data.zoom]);\n data.pageZoom[currentView[i]] = data.zoom;\n }\n }\n\n return this;\n } else return data.zoom;\n },\n // Gets the size of a page\n _pageSize: function _pageSize(page, position) {\n var data = this.data(),\n prop = {};\n\n if (data.display == \"single\") {\n prop.width = this.width();\n prop.height = this.height();\n\n if (position) {\n prop.top = 0;\n prop.left = 0;\n prop.right = \"auto\";\n }\n } else {\n var pageWidth = this.width() / 2,\n pageHeight = this.height();\n\n if (data.pageObjs[page].hasClass(\"own-size\")) {\n prop.width = data.pageObjs[page].width();\n prop.height = data.pageObjs[page].height();\n } else {\n prop.width = pageWidth;\n prop.height = pageHeight;\n }\n\n if (position) {\n var odd = page % 2;\n prop.top = (pageHeight - prop.height) / 2;\n\n if (data.direction == \"ltr\") {\n prop[odd ? \"right\" : \"left\"] = pageWidth - prop.width;\n prop[odd ? \"left\" : \"right\"] = \"auto\";\n } else {\n prop[odd ? \"left\" : \"right\"] = pageWidth - prop.width;\n prop[odd ? \"right\" : \"left\"] = \"auto\";\n }\n }\n }\n\n return prop;\n },\n // Prepares the flip effect for a page\n _makeFlip: function _makeFlip(page) {\n var data = this.data();\n\n if (!data.pages[page] && data.pagePlace[page] == page) {\n var single = data.display == \"single\",\n odd = page % 2;\n data.pages[page] = data.pageObjs[page].css(turnMethods._pageSize.call(this, page)).flip({\n page: page,\n next: odd || single ? page + 1 : page - 1,\n turn: this\n }).flip(\"disable\", data.disabled); // Issue about z-index\n\n turnMethods._setPageLoc.call(this, page);\n\n data.pageZoom[page] = data.zoom;\n }\n\n return data.pages[page];\n },\n // Makes pages within a range\n _makeRange: function _makeRange() {\n var page,\n range,\n data = this.data();\n if (data.totalPages < 1) return;\n range = this.turn(\"range\");\n\n for (page = range[0]; page <= range[1]; page++) {\n turnMethods._addPage.call(this, page);\n }\n },\n // Returns a range of pages that should be in the DOM\n // Example:\n // - page in the current view, return true\n // * page is in the range, return true\n // Otherwise, return false\n //\n // 1 2-3 4-5 6-7 8-9 10-11 12-13\n // ** ** -- ** **\n range: function range(page) {\n var remainingPages,\n left,\n right,\n view,\n data = this.data();\n page = page || data.tpage || data.page || 1;\n view = turnMethods._view.call(this, page);\n if (page < 1 || page > data.totalPages) throw turnError('\"' + page + '\" is not a valid page');\n view[1] = view[1] || view[0];\n\n if (view[0] >= 1 && view[1] <= data.totalPages) {\n remainingPages = Math.floor((pagesInDOM - 2) / 2);\n\n if (data.totalPages - view[1] > view[0]) {\n left = Math.min(view[0] - 1, remainingPages);\n right = 2 * remainingPages - left;\n } else {\n right = Math.min(data.totalPages - view[1], remainingPages);\n left = 2 * remainingPages - right;\n }\n } else {\n left = pagesInDOM - 1;\n right = pagesInDOM - 1;\n }\n\n return [Math.max(1, view[0] - left), Math.min(data.totalPages, view[1] + right)];\n },\n // Detects if a page is within the range of `pagesInDOM` from the current view\n _necessPage: function _necessPage(page) {\n if (page === 0) return true;\n var range = this.turn(\"range\");\n return this.data().pageObjs[page].hasClass(\"fixed\") || page >= range[0] && page <= range[1];\n },\n // Releases memory by removing pages from the DOM\n _removeFromDOM: function _removeFromDOM() {\n var page,\n data = this.data();\n\n for (page in data.pageWrap) {\n if (has(page, data.pageWrap) && !turnMethods._necessPage.call(this, page)) turnMethods._removePageFromDOM.call(this, page);\n }\n },\n // Removes a page from DOM and its internal references\n _removePageFromDOM: function _removePageFromDOM(page) {\n var data = this.data();\n\n if (data.pages[page]) {\n var dd = data.pages[page].data();\n\n flipMethods._moveFoldingPage.call(data.pages[page], false);\n\n if (dd.f && dd.f.fwrapper) dd.f.fwrapper.remove();\n data.pages[page].removeData();\n data.pages[page].remove();\n delete data.pages[page];\n }\n\n if (data.pageObjs[page]) data.pageObjs[page].remove();\n\n if (data.pageWrap[page]) {\n data.pageWrap[page].remove();\n delete data.pageWrap[page];\n }\n\n turnMethods._removeMv.call(this, page);\n\n delete data.pagePlace[page];\n delete data.pageZoom[page];\n },\n // Removes a page\n removePage: function removePage(page) {\n var data = this.data(); // Delete all the pages\n\n if (page == \"*\") {\n while (data.totalPages !== 0) {\n this.turn(\"removePage\", data.totalPages);\n }\n } else {\n if (page < 1 || page > data.totalPages) throw turnError(\"The page \" + page + \" doesn't exist\");\n\n if (data.pageObjs[page]) {\n // Stop animations\n this.turn(\"stop\"); // Remove `page`\n\n turnMethods._removePageFromDOM.call(this, page);\n\n delete data.pageObjs[page];\n } // Move the pages\n\n\n turnMethods._movePages.call(this, page, -1); // Resize the size of this flipbook\n\n\n data.totalPages = data.totalPages - 1; // Check the current view\n\n if (data.page > data.totalPages) {\n data.page = null;\n\n turnMethods._fitPage.call(this, data.totalPages);\n } else {\n turnMethods._makeRange.call(this);\n\n this.turn(\"update\");\n }\n }\n\n return this;\n },\n // Moves pages\n _movePages: function _movePages(from, change) {\n var page,\n that = this,\n data = this.data(),\n single = data.display == \"single\",\n move = function move(page) {\n var next = page + change,\n odd = next % 2,\n className = odd ? \" odd \" : \" even \";\n if (data.pageObjs[page]) data.pageObjs[next] = data.pageObjs[page].removeClass(\"p\" + page + \" odd even\").addClass(\"p\" + next + className);\n\n if (data.pagePlace[page] && data.pageWrap[page]) {\n data.pagePlace[next] = next;\n if (data.pageObjs[next].hasClass(\"fixed\")) data.pageWrap[next] = data.pageWrap[page].attr(\"page\", next);else data.pageWrap[next] = data.pageWrap[page].css(turnMethods._pageSize.call(that, next, true)).attr(\"page\", next);\n if (data.pages[page]) data.pages[next] = data.pages[page].flip(\"options\", {\n page: next,\n next: single || odd ? next + 1 : next - 1\n });\n\n if (change) {\n delete data.pages[page];\n delete data.pagePlace[page];\n delete data.pageZoom[page];\n delete data.pageObjs[page];\n delete data.pageWrap[page];\n }\n }\n };\n\n if (change > 0) for (page = data.totalPages; page >= from; page--) {\n move(page);\n } else for (page = from; page <= data.totalPages; page++) {\n move(page);\n }\n },\n // Sets or Gets the display mode\n display: function display(_display) {\n var data = this.data(),\n currentDisplay = data.display;\n\n if (_display === undefined) {\n return currentDisplay;\n } else {\n if ($.inArray(_display, displays) == -1) throw turnError('\"' + _display + '\" is not a value for display');\n\n switch (_display) {\n case \"single\":\n // Create a temporal page to use as folded page\n if (!data.pageObjs[0]) {\n this.turn(\"stop\").css({\n overflow: \"hidden\"\n });\n data.pageObjs[0] = $(\"
\", {\n class: \"page p-temporal\"\n }).css({\n width: this.width(),\n height: this.height()\n }).appendTo(this);\n }\n\n this.addClass(\"shadow\");\n break;\n\n case \"double\":\n // Remove the temporal page\n if (data.pageObjs[0]) {\n this.turn(\"stop\").css({\n overflow: \"\"\n });\n data.pageObjs[0].remove();\n delete data.pageObjs[0];\n }\n\n this.removeClass(\"shadow\");\n break;\n }\n\n data.display = _display;\n\n if (currentDisplay) {\n var size = this.turn(\"size\");\n\n turnMethods._movePages.call(this, 1, 0);\n\n this.turn(\"size\", size.width, size.height).turn(\"update\");\n }\n\n return this;\n }\n },\n // Gets and sets the direction of the flipbook\n direction: function direction(dir) {\n var data = this.data();\n\n if (dir === undefined) {\n return data.direction;\n } else {\n dir = dir.toLowerCase();\n if ($.inArray(dir, directions) == -1) throw turnError('\"' + dir + '\" is not a value for direction');\n\n if (dir == \"rtl\") {\n $(this).attr(\"dir\", \"ltr\").css({\n direction: \"ltr\"\n });\n }\n\n data.direction = dir;\n if (data.done) this.turn(\"size\", $(this).width(), $(this).height());\n return this;\n }\n },\n // Detects animation\n animating: function animating() {\n return this.data().pageMv.length > 0;\n },\n // Gets the current activated corner\n corner: function corner() {\n var corner,\n page,\n data = this.data();\n\n for (page in data.pages) {\n if (has(page, data.pages)) if (corner = data.pages[page].flip(\"corner\")) {\n return corner;\n }\n }\n\n return false;\n },\n // Gets the data stored in the flipbook\n data: function data() {\n return this.data();\n },\n // Disables and enables the effect\n disable: function disable(_disable) {\n var page,\n data = this.data(),\n view = this.turn(\"view\");\n data.disabled = _disable === undefined || _disable === true;\n\n for (page in data.pages) {\n if (has(page, data.pages)) data.pages[page].flip(\"disable\", data.disabled ? true : $.inArray(parseInt(page, 10), view) == -1);\n }\n\n return this;\n },\n // Disables and enables the effect\n disabled: function disabled(disable) {\n if (disable === undefined) {\n return this.data().disabled === true;\n } else {\n return this.turn(\"disable\", disable);\n }\n },\n // Gets and sets the size\n size: function size(width, height) {\n if (width === undefined || height === undefined) {\n return {\n width: this.width(),\n height: this.height()\n };\n } else {\n this.turn(\"stop\");\n var page,\n prop,\n data = this.data(),\n pageWidth = data.display == \"double\" ? width / 2 : width;\n this.css({\n width: width,\n height: height\n });\n if (data.pageObjs[0]) data.pageObjs[0].css({\n width: pageWidth,\n height: height\n });\n\n for (page in data.pageWrap) {\n if (!has(page, data.pageWrap)) continue;\n prop = turnMethods._pageSize.call(this, page, true);\n data.pageObjs[page].css({\n width: prop.width,\n height: prop.height\n });\n data.pageWrap[page].css(prop);\n if (data.pages[page]) data.pages[page].css({\n width: prop.width,\n height: prop.height\n });\n }\n\n this.turn(\"resize\");\n return this;\n }\n },\n // Resizes each page\n resize: function resize() {\n var page,\n data = this.data();\n\n if (data.pages[0]) {\n data.pageWrap[0].css({\n left: -this.width()\n });\n data.pages[0].flip(\"resize\", true);\n }\n\n for (page = 1; page <= data.totalPages; page++) {\n if (data.pages[page]) data.pages[page].flip(\"resize\", true);\n }\n\n turnMethods._updateShadow.call(this);\n\n if (data.opts.autoCenter) this.turn(\"center\");\n },\n // Removes an animation from the cache\n _removeMv: function _removeMv(page) {\n var i,\n data = this.data();\n\n for (i = 0; i < data.pageMv.length; i++) {\n if (data.pageMv[i] == page) {\n data.pageMv.splice(i, 1);\n return true;\n }\n }\n\n return false;\n },\n // Adds an animation to the cache\n _addMv: function _addMv(page) {\n var data = this.data();\n\n turnMethods._removeMv.call(this, page);\n\n data.pageMv.push(page);\n },\n // Gets indexes for a view\n _view: function _view(page) {\n var data = this.data();\n page = page || data.page;\n if (data.display == \"double\") return page % 2 ? [page - 1, page] : [page, page + 1];else return [page];\n },\n // Gets a view\n view: function view(page) {\n var data = this.data(),\n view = turnMethods._view.call(this, page);\n\n if (data.display == \"double\") return [view[0] > 0 ? view[0] : 0, view[1] <= data.totalPages ? view[1] : 0];else return [view[0] > 0 && view[0] <= data.totalPages ? view[0] : 0];\n },\n // Stops animations\n stop: function stop(ignore, animate) {\n if (this.turn(\"animating\")) {\n var i,\n opts,\n page,\n data = this.data();\n\n if (data.tpage) {\n data.page = data.tpage;\n delete data[\"tpage\"];\n }\n\n for (i = 0; i < data.pageMv.length; i++) {\n if (!data.pageMv[i] || data.pageMv[i] === ignore) continue;\n page = data.pages[data.pageMv[i]];\n opts = page.data().f.opts;\n page.flip(\"hideFoldedPage\", animate);\n if (!animate) flipMethods._moveFoldingPage.call(page, false);\n\n if (opts.force) {\n opts.next = opts.page % 2 === 0 ? opts.page - 1 : opts.page + 1;\n delete opts[\"force\"];\n }\n }\n }\n\n this.turn(\"update\");\n return this;\n },\n // Gets and sets the number of pages\n pages: function pages(_pages) {\n var data = this.data();\n\n if (_pages) {\n if (_pages < data.totalPages) {\n for (var page = data.totalPages; page > _pages; page--) {\n this.turn(\"removePage\", page);\n }\n }\n\n data.totalPages = _pages;\n\n turnMethods._fitPage.call(this, data.page);\n\n return this;\n } else return data.totalPages;\n },\n // Checks missing pages\n _missing: function _missing(page) {\n var data = this.data();\n if (data.totalPages < 1) return;\n var p,\n range = this.turn(\"range\", page),\n missing = [];\n\n for (p = range[0]; p <= range[1]; p++) {\n if (!data.pageObjs[p]) missing.push(p);\n }\n\n if (missing.length > 0) this.trigger(\"missing\", [missing]);\n },\n // Sets a page without effect\n _fitPage: function _fitPage(page) {\n var data = this.data(),\n newView = this.turn(\"view\", page);\n\n turnMethods._missing.call(this, page);\n\n if (!data.pageObjs[page]) return;\n data.page = page;\n this.turn(\"stop\");\n\n for (var i = 0; i < newView.length; i++) {\n if (newView[i] && data.pageZoom[newView[i]] != data.zoom) {\n this.trigger(\"zoomed\", [newView[i], newView, data.pageZoom[newView[i]], data.zoom]);\n data.pageZoom[newView[i]] = data.zoom;\n }\n }\n\n turnMethods._removeFromDOM.call(this);\n\n turnMethods._makeRange.call(this);\n\n turnMethods._updateShadow.call(this);\n\n this.trigger(\"turned\", [page, newView]);\n this.turn(\"update\");\n if (data.opts.autoCenter) this.turn(\"center\");\n },\n // Turns the page\n _turnPage: function _turnPage(page) {\n var current,\n next,\n data = this.data(),\n place = data.pagePlace[page],\n view = this.turn(\"view\"),\n newView = this.turn(\"view\", page);\n\n if (data.page != page) {\n var currentPage = data.page;\n\n if (trigger(\"turning\", this, [page, newView]) == \"prevented\") {\n if (currentPage == data.page && $.inArray(place, data.pageMv) != -1) data.pages[place].flip(\"hideFoldedPage\", true);\n return;\n }\n\n if ($.inArray(1, newView) != -1) this.trigger(\"first\");\n if ($.inArray(data.totalPages, newView) != -1) this.trigger(\"last\");\n }\n\n if (data.display == \"single\") {\n current = view[0];\n next = newView[0];\n } else if (view[1] && page > view[1]) {\n current = view[1];\n next = newView[0];\n } else if (view[0] && page < view[0]) {\n current = view[0];\n next = newView[1];\n }\n\n var optsCorners = data.opts.turnCorners.split(\",\"),\n flipData = data.pages[current].data().f,\n opts = flipData.opts,\n actualPoint = flipData.point;\n\n turnMethods._missing.call(this, page);\n\n if (!data.pageObjs[page]) return;\n this.turn(\"stop\");\n data.page = page;\n\n turnMethods._makeRange.call(this);\n\n data.tpage = next;\n\n if (opts.next != next) {\n opts.next = next;\n opts.force = true;\n }\n\n this.turn(\"update\");\n flipData.point = actualPoint;\n if (flipData.effect == \"hard\") {\n if (data.direction == \"ltr\") data.pages[current].flip(\"turnPage\", page > current ? \"r\" : \"l\");else data.pages[current].flip(\"turnPage\", page > current ? \"l\" : \"r\");\n } else {\n if (data.direction == \"ltr\") data.pages[current].flip(\"turnPage\", optsCorners[page > current ? 1 : 0]);else data.pages[current].flip(\"turnPage\", optsCorners[page > current ? 0 : 1]);\n }\n },\n // Gets and sets a page\n page: function page(_page) {\n var data = this.data();\n\n if (_page === undefined) {\n return data.page;\n } else {\n if (!data.disabled && !data.destroying) {\n _page = parseInt(_page, 10);\n\n if (_page > 0 && _page <= data.totalPages) {\n if (_page != data.page) {\n if (!data.done || $.inArray(_page, this.turn(\"view\")) != -1) turnMethods._fitPage.call(this, _page);else turnMethods._turnPage.call(this, _page);\n }\n\n return this;\n } else {\n throw turnError(\"The page \" + _page + \" does not exist\");\n }\n }\n }\n },\n // Turns to the next view\n next: function next() {\n return this.turn(\"page\", Math.min(this.data().totalPages, turnMethods._view.call(this, this.data().page).pop() + 1));\n },\n // Turns to the previous view\n previous: function previous() {\n return this.turn(\"page\", Math.max(1, turnMethods._view.call(this, this.data().page).shift() - 1));\n },\n // Shows a peeling corner\n peel: function peel(corner, animate) {\n var data = this.data(),\n view = this.turn(\"view\");\n animate = animate === undefined ? true : animate === true;\n\n if (corner === false) {\n this.turn(\"stop\", null, animate);\n } else {\n if (data.display == \"single\") {\n data.pages[data.page].flip(\"peel\", corner, animate);\n } else {\n var page;\n\n if (data.direction == \"ltr\") {\n page = corner.indexOf(\"l\") != -1 ? view[0] : view[1];\n } else {\n page = corner.indexOf(\"l\") != -1 ? view[1] : view[0];\n }\n\n if (data.pages[page]) data.pages[page].flip(\"peel\", corner, animate);\n }\n }\n\n return this;\n },\n // Adds a motion to the internal list\n // This event is called in context of flip\n _addMotionPage: function _addMotionPage() {\n var opts = $(this).data().f.opts,\n turn = opts.turn,\n dd = turn.data();\n\n turnMethods._addMv.call(turn, opts.page);\n },\n // This event is called in context of flip\n _eventStart: function _eventStart(e, opts, corner) {\n var data = opts.turn.data(),\n actualZoom = data.pageZoom[opts.page];\n\n if (e.isDefaultPrevented()) {\n turnMethods._updateShadow.call(opts.turn);\n\n return;\n }\n\n if (actualZoom && actualZoom != data.zoom) {\n opts.turn.trigger(\"zoomed\", [opts.page, opts.turn.turn(\"view\", opts.page), actualZoom, data.zoom]);\n data.pageZoom[opts.page] = data.zoom;\n }\n\n if (data.display == \"single\" && corner) {\n if (corner.charAt(1) == \"l\" && data.direction == \"ltr\" || corner.charAt(1) == \"r\" && data.direction == \"rtl\") {\n opts.next = opts.next < opts.page ? opts.next : opts.page - 1;\n opts.force = true;\n } else {\n opts.next = opts.next > opts.page ? opts.next : opts.page + 1;\n }\n }\n\n turnMethods._addMotionPage.call(e.target);\n\n turnMethods._updateShadow.call(opts.turn);\n },\n // This event is called in context of flip\n _eventEnd: function _eventEnd(e, opts, turned) {\n var that = $(e.target),\n data = that.data().f,\n turn = opts.turn,\n dd = turn.data();\n\n if (turned) {\n var tpage = dd.tpage || dd.page;\n\n if (tpage == opts.next || tpage == opts.page) {\n delete dd.tpage;\n\n turnMethods._fitPage.call(turn, tpage || opts.next, true);\n }\n } else {\n turnMethods._removeMv.call(turn, opts.page);\n\n turnMethods._updateShadow.call(turn);\n\n turn.turn(\"update\");\n }\n },\n // This event is called in context of flip\n _eventPressed: function _eventPressed(e) {\n var page,\n data = $(e.target).data().f,\n turn = data.opts.turn,\n turnData = turn.data(),\n pages = turnData.pages;\n turnData.mouseAction = true;\n turn.turn(\"update\");\n return data.time = new Date().getTime();\n },\n // This event is called in context of flip\n _eventReleased: function _eventReleased(e, point) {\n var outArea,\n page = $(e.target),\n data = page.data().f,\n turn = data.opts.turn,\n turnData = turn.data();\n\n if (turnData.display == \"single\") {\n outArea = point.corner == \"br\" || point.corner == \"tr\" ? point.x < page.width() / 2 : point.x > page.width() / 2;\n } else {\n outArea = point.x < 0 || point.x > page.width();\n }\n\n if (new Date().getTime() - data.time < 200 || outArea) {\n e.preventDefault();\n\n turnMethods._turnPage.call(turn, data.opts.next);\n }\n\n turnData.mouseAction = false;\n },\n // This event is called in context of flip\n _flip: function _flip(e) {\n e.stopPropagation();\n var opts = $(e.target).data().f.opts;\n opts.turn.trigger(\"turn\", [opts.next]);\n\n if (opts.turn.data().opts.autoCenter) {\n opts.turn.turn(\"center\", opts.next);\n }\n },\n //\n _touchStart: function _touchStart() {\n var data = this.data();\n\n for (var page in data.pages) {\n if (has(page, data.pages) && flipMethods._eventStart.apply(data.pages[page], arguments) === false) {\n return false;\n }\n }\n },\n //\n _touchMove: function _touchMove() {\n var data = this.data();\n\n for (var page in data.pages) {\n if (has(page, data.pages)) {\n flipMethods._eventMove.apply(data.pages[page], arguments);\n }\n }\n },\n //\n _touchEnd: function _touchEnd() {\n var data = this.data();\n\n for (var page in data.pages) {\n if (has(page, data.pages)) {\n flipMethods._eventEnd.apply(data.pages[page], arguments);\n }\n }\n },\n // Calculate the z-index value for pages during the animation\n calculateZ: function calculateZ(mv) {\n var i,\n page,\n nextPage,\n placePage,\n dpage,\n that = this,\n data = this.data(),\n view = this.turn(\"view\"),\n currentPage = view[0] || view[1],\n total = mv.length - 1,\n r = {\n pageZ: {},\n partZ: {},\n pageV: {}\n },\n addView = function addView(page) {\n var view = that.turn(\"view\", page);\n if (view[0]) r.pageV[view[0]] = true;\n if (view[1]) r.pageV[view[1]] = true;\n };\n\n for (i = 0; i <= total; i++) {\n page = mv[i];\n nextPage = data.pages[page].data().f.opts.next;\n placePage = data.pagePlace[page];\n addView(page);\n addView(nextPage);\n dpage = data.pagePlace[nextPage] == nextPage ? nextPage : page;\n r.pageZ[dpage] = data.totalPages - Math.abs(currentPage - dpage);\n r.partZ[placePage] = data.totalPages * 2 - total + i;\n }\n\n return r;\n },\n // Updates the z-index and display property of every page\n update: function update() {\n var page,\n data = this.data();\n\n if (this.turn(\"animating\") && data.pageMv[0] !== 0) {\n // Update motion\n var p,\n apage,\n fixed,\n pos = this.turn(\"calculateZ\", data.pageMv),\n corner = this.turn(\"corner\"),\n actualView = this.turn(\"view\"),\n newView = this.turn(\"view\", data.tpage);\n\n for (page in data.pageWrap) {\n if (!has(page, data.pageWrap)) continue;\n fixed = data.pageObjs[page].hasClass(\"fixed\");\n data.pageWrap[page].css({\n display: pos.pageV[page] || fixed ? \"\" : \"none\",\n zIndex: (data.pageObjs[page].hasClass(\"hard\") ? pos.partZ[page] : pos.pageZ[page]) || (fixed ? -1 : 0)\n });\n\n if (p = data.pages[page]) {\n p.flip(\"z\", pos.partZ[page] || null);\n if (pos.pageV[page]) p.flip(\"resize\");\n\n if (data.tpage) {\n // Is it turning the page to `tpage`?\n p.flip(\"hover\", false).flip(\"disable\", $.inArray(parseInt(page, 10), data.pageMv) == -1 && page != newView[0] && page != newView[1]);\n } else {\n p.flip(\"hover\", corner === false).flip(\"disable\", page != actualView[0] && page != actualView[1]);\n }\n }\n }\n } else {\n // Update static pages\n for (page in data.pageWrap) {\n if (!has(page, data.pageWrap)) continue;\n\n var pageLocation = turnMethods._setPageLoc.call(this, page);\n\n if (data.pages[page]) {\n data.pages[page].flip(\"disable\", data.disabled || pageLocation != 1).flip(\"hover\", true).flip(\"z\", null);\n }\n }\n }\n\n return this;\n },\n // Updates the position and size of the flipbook's shadow\n _updateShadow: function _updateShadow() {\n var view,\n view2,\n shadow,\n data = this.data(),\n width = this.width(),\n height = this.height(),\n pageWidth = data.display == \"single\" ? width : width / 2;\n view = this.turn(\"view\");\n\n if (!data.shadow) {\n data.shadow = $(\"
\", {\n class: \"shadow\",\n css: divAtt(0, 0, 0).css\n }).appendTo(this);\n }\n\n for (var i = 0; i < data.pageMv.length; i++) {\n if (!view[0] || !view[1]) break;\n view = this.turn(\"view\", data.pages[data.pageMv[i]].data().f.opts.next);\n view2 = this.turn(\"view\", data.pageMv[i]);\n view[0] = view[0] && view2[0];\n view[1] = view[1] && view2[1];\n }\n\n if (!view[0]) shadow = data.direction == \"ltr\" ? 1 : 2;else if (!view[1]) shadow = data.direction == \"ltr\" ? 2 : 1;else shadow = 3;\n\n switch (shadow) {\n case 1:\n data.shadow.css({\n width: pageWidth,\n height: height,\n top: 0,\n left: pageWidth\n });\n break;\n\n case 2:\n data.shadow.css({\n width: pageWidth,\n height: height,\n top: 0,\n left: 0\n });\n break;\n\n case 3:\n data.shadow.css({\n width: width,\n height: height,\n top: 0,\n left: 0\n });\n break;\n }\n },\n // Sets the z-index and display property of a page\n // It depends on the current view\n _setPageLoc: function _setPageLoc(page) {\n var data = this.data(),\n view = this.turn(\"view\"),\n loc = 0;\n if (page == view[0] || page == view[1]) loc = 1;else if (data.display == \"single\" && page == view[0] + 1 || data.display == \"double\" && page == view[0] - 2 || page == view[1] + 2) loc = 2;\n if (!this.turn(\"animating\")) switch (loc) {\n case 1:\n data.pageWrap[page].css({\n zIndex: data.totalPages,\n display: \"\"\n });\n break;\n\n case 2:\n data.pageWrap[page].css({\n zIndex: data.totalPages - 1,\n display: \"\"\n });\n break;\n\n case 0:\n data.pageWrap[page].css({\n zIndex: 0,\n display: data.pageObjs[page].hasClass(\"fixed\") ? \"\" : \"none\"\n });\n break;\n }\n return loc;\n },\n // Gets and sets the options\n options: function options(_options) {\n if (_options === undefined) {\n return this.data().opts;\n } else {\n var data = this.data(); // Set new values\n\n $.extend(data.opts, _options); // Set pages\n\n if (_options.pages) this.turn(\"pages\", _options.pages); // Set page\n\n if (_options.page) this.turn(\"page\", _options.page); // Set display\n\n if (_options.display) this.turn(\"display\", _options.display); // Set direction\n\n if (_options.direction) this.turn(\"direction\", _options.direction); // Set size\n\n if (_options.width && _options.height) this.turn(\"size\", _options.width, _options.height); // Add event listeners\n\n if (_options.when) for (var eventName in _options.when) {\n if (has(eventName, _options.when)) {\n this.unbind(eventName).bind(eventName, _options.when[eventName]);\n }\n }\n return this;\n }\n },\n // Gets the current version\n version: function version() {\n return _version;\n }\n},\n // Methods and properties for the flip page effect\nflipMethods = {\n // Constructor\n init: function init(opts) {\n this.data({\n f: {\n disabled: false,\n hover: false,\n effect: this.hasClass(\"hard\") ? \"hard\" : \"sheet\"\n }\n });\n this.flip(\"options\", opts);\n\n flipMethods._addPageWrapper.call(this);\n\n return this;\n },\n setData: function setData(d) {\n var data = this.data();\n data.f = $.extend(data.f, d);\n return this;\n },\n options: function options(opts) {\n var data = this.data().f;\n\n if (opts) {\n flipMethods.setData.call(this, {\n opts: $.extend({}, data.opts || flipOptions, opts)\n });\n return this;\n } else return data.opts;\n },\n z: function z(_z) {\n var data = this.data().f;\n data.opts[\"z-index\"] = _z;\n if (data.fwrapper) data.fwrapper.css({\n zIndex: _z || parseInt(data.parent.css(\"z-index\"), 10) || 0\n });\n return this;\n },\n _cAllowed: function _cAllowed() {\n var data = this.data().f,\n page = data.opts.page,\n turnData = data.opts.turn.data(),\n odd = page % 2;\n\n if (data.effect == \"hard\") {\n return turnData.direction == \"ltr\" ? [odd ? \"r\" : \"l\"] : [odd ? \"l\" : \"r\"];\n } else {\n if (turnData.display == \"single\") {\n if (page == 1) return turnData.direction == \"ltr\" ? corners[\"forward\"] : corners[\"backward\"];else if (page == turnData.totalPages) return turnData.direction == \"ltr\" ? corners[\"backward\"] : corners[\"forward\"];else return corners[\"all\"];\n } else {\n return turnData.direction == \"ltr\" ? corners[odd ? \"forward\" : \"backward\"] : corners[odd ? \"backward\" : \"forward\"];\n }\n }\n },\n _cornerActivated: function _cornerActivated(p) {\n var data = this.data().f,\n width = this.width(),\n height = this.height(),\n point = {\n x: p.x,\n y: p.y,\n corner: \"\"\n },\n csz = data.opts.cornerSize;\n if (point.x <= 0 || point.y <= 0 || point.x >= width || point.y >= height) return false;\n\n var allowedCorners = flipMethods._cAllowed.call(this);\n\n switch (data.effect) {\n case \"hard\":\n if (point.x > width - csz) point.corner = \"r\";else if (point.x < csz) point.corner = \"l\";else return false;\n break;\n\n case \"sheet\":\n if (point.y < csz) point.corner += \"t\";else if (point.y >= height - csz) point.corner += \"b\";else return false;\n if (point.x <= csz) point.corner += \"l\";else if (point.x >= width - csz) point.corner += \"r\";else return false;\n break;\n }\n\n return !point.corner || $.inArray(point.corner, allowedCorners) == -1 ? false : point;\n },\n _isIArea: function _isIArea(e) {\n var pos = this.data().f.parent.offset();\n e = isTouch && e.originalEvent ? e.originalEvent.touches[0] : e;\n return flipMethods._cornerActivated.call(this, {\n x: e.pageX - pos.left,\n y: e.pageY - pos.top\n });\n },\n _c: function _c(corner, opts) {\n opts = opts || 0;\n\n switch (corner) {\n case \"tl\":\n return point2D(opts, opts);\n\n case \"tr\":\n return point2D(this.width() - opts, opts);\n\n case \"bl\":\n return point2D(opts, this.height() - opts);\n\n case \"br\":\n return point2D(this.width() - opts, this.height() - opts);\n\n case \"l\":\n return point2D(opts, 0);\n\n case \"r\":\n return point2D(this.width() - opts, 0);\n }\n },\n _c2: function _c2(corner) {\n switch (corner) {\n case \"tl\":\n return point2D(this.width() * 2, 0);\n\n case \"tr\":\n return point2D(-this.width(), 0);\n\n case \"bl\":\n return point2D(this.width() * 2, this.height());\n\n case \"br\":\n return point2D(-this.width(), this.height());\n\n case \"l\":\n return point2D(this.width() * 2, 0);\n\n case \"r\":\n return point2D(-this.width(), 0);\n }\n },\n _foldingPage: function _foldingPage() {\n var data = this.data().f;\n if (!data) return;\n var opts = data.opts;\n\n if (opts.turn) {\n data = opts.turn.data();\n if (data.display == \"single\") return opts.next > 1 || opts.page > 1 ? data.pageObjs[0] : null;else return data.pageObjs[opts.next];\n }\n },\n _backGradient: function _backGradient() {\n var data = this.data().f,\n turnData = data.opts.turn.data(),\n gradient = turnData.opts.gradients && (turnData.display == \"single\" || data.opts.page != 2 && data.opts.page != turnData.totalPages - 1);\n if (gradient && !data.bshadow) data.bshadow = $(\"
\", divAtt(0, 0, 1)).css({\n position: \"\",\n width: this.width(),\n height: this.height()\n }).appendTo(data.parent);\n return gradient;\n },\n type: function type() {\n return this.data().f.effect;\n },\n resize: function resize(full) {\n var data = this.data().f,\n turnData = data.opts.turn.data(),\n width = this.width(),\n height = this.height();\n\n switch (data.effect) {\n case \"hard\":\n if (full) {\n data.wrapper.css({\n width: width,\n height: height\n });\n data.fpage.css({\n width: width,\n height: height\n });\n\n if (turnData.opts.gradients) {\n data.ashadow.css({\n width: width,\n height: height\n });\n data.bshadow.css({\n width: width,\n height: height\n });\n }\n }\n\n break;\n\n case \"sheet\":\n if (full) {\n var size = Math.round(Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)));\n data.wrapper.css({\n width: size,\n height: size\n });\n data.fwrapper.css({\n width: size,\n height: size\n }).children(\":first-child\").css({\n width: width,\n height: height\n });\n data.fpage.css({\n width: width,\n height: height\n });\n if (turnData.opts.gradients) data.ashadow.css({\n width: width,\n height: height\n });\n if (flipMethods._backGradient.call(this)) data.bshadow.css({\n width: width,\n height: height\n });\n }\n\n if (data.parent.is(\":visible\")) {\n var offset = findPos(data.parent[0]);\n data.fwrapper.css({\n top: offset.top,\n left: offset.left\n }); //if (data.opts.turn) {\n\n offset = findPos(data.opts.turn[0]);\n data.fparent.css({\n top: -offset.top,\n left: -offset.left\n }); //}\n }\n\n this.flip(\"z\", data.opts[\"z-index\"]);\n break;\n }\n },\n // Prepares the page by adding a general wrapper and another objects\n _addPageWrapper: function _addPageWrapper() {\n var att,\n data = this.data().f,\n turnData = data.opts.turn.data(),\n parent = this.parent();\n data.parent = parent;\n if (!data.wrapper) switch (data.effect) {\n case \"hard\":\n var cssProperties = {};\n cssProperties[vendor + \"transform-style\"] = \"preserve-3d\";\n cssProperties[vendor + \"backface-visibility\"] = \"hidden\";\n data.wrapper = $(\"
\", divAtt(0, 0, 2)).css(cssProperties).appendTo(parent).prepend(this);\n data.fpage = $(\"
\", divAtt(0, 0, 1)).css(cssProperties).appendTo(parent);\n\n if (turnData.opts.gradients) {\n data.ashadow = $(\"
\", divAtt(0, 0, 0)).hide().appendTo(parent);\n data.bshadow = $(\"
\", divAtt(0, 0, 0));\n }\n\n break;\n\n case \"sheet\":\n var width = this.width(),\n height = this.height(),\n size = Math.round(Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)));\n data.fparent = data.opts.turn.data().fparent;\n\n if (!data.fparent) {\n var fparent = $(\"
\", {\n css: {\n \"pointer-events\": \"none\"\n }\n }).hide();\n fparent.data().flips = 0;\n fparent.css(divAtt(0, 0, \"auto\", \"visible\").css).appendTo(data.opts.turn);\n data.opts.turn.data().fparent = fparent;\n data.fparent = fparent;\n }\n\n this.css({\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: \"auto\",\n right: \"auto\"\n });\n data.wrapper = $(\"
\", divAtt(0, 0, this.css(\"z-index\"))).appendTo(parent).prepend(this);\n data.fwrapper = $(\"
\", divAtt(parent.offset().top, parent.offset().left)).hide().appendTo(data.fparent);\n data.fpage = $(\"
\", divAtt(0, 0, 0, \"visible\")).css({\n cursor: \"default\"\n }).appendTo(data.fwrapper);\n if (turnData.opts.gradients) data.ashadow = $(\"
\", divAtt(0, 0, 1)).appendTo(data.fpage);\n flipMethods.setData.call(this, data);\n break;\n } // Set size\n\n flipMethods.resize.call(this, true);\n },\n // Takes a 2P point from the screen and applies the transformation\n _fold: function _fold(point) {\n var data = this.data().f,\n turnData = data.opts.turn.data(),\n o = flipMethods._c.call(this, point.corner),\n width = this.width(),\n height = this.height();\n\n switch (data.effect) {\n case \"hard\":\n if (point.corner == \"l\") point.x = Math.min(Math.max(point.x, 0), width * 2);else point.x = Math.max(Math.min(point.x, width), -width);\n var leftPos,\n shadow,\n gradientX,\n fpageOrigin,\n parentOrigin,\n totalPages = turnData.totalPages,\n zIndex = data.opts[\"z-index\"] || totalPages,\n parentCss = {\n overflow: \"visible\"\n },\n relX = o.x ? (o.x - point.x) / width : point.x / width,\n angle = relX * 90,\n half = angle < 90;\n\n switch (point.corner) {\n case \"l\":\n fpageOrigin = \"0% 50%\";\n parentOrigin = \"100% 50%\";\n\n if (half) {\n leftPos = 0;\n shadow = data.opts.next - 1 > 0;\n gradientX = 1;\n } else {\n leftPos = \"100%\";\n shadow = data.opts.page + 1 < totalPages;\n gradientX = 0;\n }\n\n break;\n\n case \"r\":\n fpageOrigin = \"100% 50%\";\n parentOrigin = \"0% 50%\";\n angle = -angle;\n width = -width;\n\n if (half) {\n leftPos = 0;\n shadow = data.opts.next + 1 < totalPages;\n gradientX = 0;\n } else {\n leftPos = \"-100%\";\n shadow = data.opts.page != 1;\n gradientX = 1;\n }\n\n break;\n }\n\n parentCss[vendor + \"perspective-origin\"] = parentOrigin;\n data.wrapper.transform(\"rotateY(\" + angle + \"deg)\" + \"translate3d(0px, 0px, \" + (this.attr(\"depth\") || 0) + \"px)\", parentOrigin);\n data.fpage.transform(\"translateX(\" + width + \"px) rotateY(\" + (180 + angle) + \"deg)\", fpageOrigin);\n data.parent.css(parentCss);\n\n if (half) {\n relX = -relX + 1;\n data.wrapper.css({\n zIndex: zIndex + 1\n });\n data.fpage.css({\n zIndex: zIndex\n });\n } else {\n relX = relX - 1;\n data.wrapper.css({\n zIndex: zIndex\n });\n data.fpage.css({\n zIndex: zIndex + 1\n });\n }\n\n if (turnData.opts.gradients) {\n if (shadow) data.ashadow.css({\n display: \"\",\n left: leftPos,\n backgroundColor: \"rgba(0,0,0,\" + 0.5 * relX + \")\"\n }).transform(\"rotateY(0deg)\");else data.ashadow.hide();\n data.bshadow.css({\n opacity: -relX + 1\n });\n\n if (half) {\n if (data.bshadow.parent()[0] != data.wrapper[0]) {\n data.bshadow.appendTo(data.wrapper);\n }\n } else {\n if (data.bshadow.parent()[0] != data.fpage[0]) {\n data.bshadow.appendTo(data.fpage);\n }\n }\n /*data.bshadow.css({\n backgroundColor: 'rgba(0,0,0,'+(0.1)+')'\n })*/\n\n\n gradient(data.bshadow, point2D(gradientX * 100, 0), point2D((-gradientX + 1) * 100, 0), [[0, \"rgba(0,0,0,0.3)\"], [1, \"rgba(0,0,0,0)\"]], 2);\n }\n\n break;\n\n case \"sheet\":\n var that = this,\n a = 0,\n alpha = 0,\n beta,\n px,\n gradientEndPointA,\n gradientEndPointB,\n gradientStartVal,\n gradientSize,\n gradientOpacity,\n shadowVal,\n mv = point2D(0, 0),\n df = point2D(0, 0),\n tr = point2D(0, 0),\n folding = flipMethods._foldingPage.call(this),\n tan = Math.tan(alpha),\n ac = turnData.opts.acceleration,\n h = data.wrapper.height(),\n top = point.corner.substr(0, 1) == \"t\",\n left = point.corner.substr(1, 1) == \"l\",\n compute = function compute() {\n var rel = point2D(0, 0);\n var middle = point2D(0, 0);\n rel.x = o.x ? o.x - point.x : point.x;\n\n if (!hasRot) {\n rel.y = 0;\n } else {\n rel.y = o.y ? o.y - point.y : point.y;\n }\n\n middle.x = left ? width - rel.x / 2 : point.x + rel.x / 2;\n middle.y = rel.y / 2;\n var alpha = A90 - Math.atan2(rel.y, rel.x),\n gamma = alpha - Math.atan2(middle.y, middle.x),\n distance = Math.max(0, Math.sin(gamma) * Math.sqrt(Math.pow(middle.x, 2) + Math.pow(middle.y, 2)));\n a = deg(alpha);\n tr = point2D(distance * Math.sin(alpha), distance * Math.cos(alpha));\n\n if (alpha > A90) {\n tr.x = tr.x + Math.abs(tr.y * rel.y / rel.x);\n tr.y = 0;\n\n if (Math.round(tr.x * Math.tan(PI - alpha)) < height) {\n point.y = Math.sqrt(Math.pow(height, 2) + 2 * middle.x * rel.x);\n if (top) point.y = height - point.y;\n return compute();\n }\n }\n\n if (alpha > A90) {\n var beta = PI - alpha,\n dd = h - height / Math.sin(beta);\n mv = point2D(Math.round(dd * Math.cos(beta)), Math.round(dd * Math.sin(beta)));\n if (left) mv.x = -mv.x;\n if (top) mv.y = -mv.y;\n }\n\n px = Math.round(tr.y / Math.tan(alpha) + tr.x);\n var side = width - px,\n sideX = side * Math.cos(alpha * 2),\n sideY = side * Math.sin(alpha * 2);\n df = point2D(Math.round(left ? side - sideX : px + sideX), Math.round(top ? sideY : height - sideY)); // Gradients\n\n if (turnData.opts.gradients) {\n gradientSize = side * Math.sin(alpha);\n\n var endingPoint = flipMethods._c2.call(that, point.corner),\n far = Math.sqrt(Math.pow(endingPoint.x - point.x, 2) + Math.pow(endingPoint.y - point.y, 2)) / width;\n\n shadowVal = Math.sin(A90 * (far > 1 ? 2 - far : far));\n gradientOpacity = Math.min(far, 1);\n gradientStartVal = gradientSize > 100 ? (gradientSize - 100) / gradientSize : 0;\n gradientEndPointA = point2D(gradientSize * Math.sin(alpha) / width * 100, gradientSize * Math.cos(alpha) / height * 100);\n\n if (flipMethods._backGradient.call(that)) {\n gradientEndPointB = point2D(gradientSize * 1.2 * Math.sin(alpha) / width * 100, gradientSize * 1.2 * Math.cos(alpha) / height * 100);\n if (!left) gradientEndPointB.x = 100 - gradientEndPointB.x;\n if (!top) gradientEndPointB.y = 100 - gradientEndPointB.y;\n }\n }\n\n tr.x = Math.round(tr.x);\n tr.y = Math.round(tr.y);\n return true;\n },\n transform = function transform(tr, c, x, a) {\n var f = [\"0\", \"auto\"],\n mvW = (width - h) * x[0] / 100,\n mvH = (height - h) * x[1] / 100,\n cssA = {\n left: f[c[0]],\n top: f[c[1]],\n right: f[c[2]],\n bottom: f[c[3]]\n },\n cssB = {},\n aliasingFk = a != 90 && a != -90 ? left ? -1 : 1 : 0,\n origin = x[0] + \"% \" + x[1] + \"%\";\n that.css(cssA).transform(rotate(a) + translate(tr.x + aliasingFk, tr.y, ac), origin);\n data.fpage.css(cssA).transform(rotate(a) + translate(tr.x + df.x - mv.x - width * x[0] / 100, tr.y + df.y - mv.y - height * x[1] / 100, ac) + rotate((180 / a - 2) * a), origin);\n data.wrapper.transform(translate(-tr.x + mvW - aliasingFk, -tr.y + mvH, ac) + rotate(-a), origin);\n data.fwrapper.transform(translate(-tr.x + mv.x + mvW, -tr.y + mv.y + mvH, ac) + rotate(-a), origin);\n\n if (turnData.opts.gradients) {\n if (x[0]) gradientEndPointA.x = 100 - gradientEndPointA.x;\n if (x[1]) gradientEndPointA.y = 100 - gradientEndPointA.y;\n cssB[\"box-shadow\"] = \"0 0 20px rgba(0,0,0,\" + 0.5 * shadowVal + \")\";\n folding.css(cssB);\n gradient(data.ashadow, point2D(left ? 100 : 0, top ? 0 : 100), point2D(gradientEndPointA.x, gradientEndPointA.y), [[gradientStartVal, \"rgba(0,0,0,0)\"], [(1 - gradientStartVal) * 0.8 + gradientStartVal, \"rgba(0,0,0,\" + 0.2 * gradientOpacity + \")\"], [1, \"rgba(255,255,255,\" + 0.2 * gradientOpacity + \")\"]], 3, alpha);\n if (flipMethods._backGradient.call(that)) gradient(data.bshadow, point2D(left ? 0 : 100, top ? 0 : 100), point2D(gradientEndPointB.x, gradientEndPointB.y), [[0.6, \"rgba(0,0,0,0)\"], [0.8, \"rgba(0,0,0,\" + 0.3 * gradientOpacity + \")\"], [1, \"rgba(0,0,0,0)\"]], 3);\n }\n };\n\n switch (point.corner) {\n case \"l\":\n break;\n\n case \"r\":\n break;\n\n case \"tl\":\n point.x = Math.max(point.x, 1);\n compute();\n transform(tr, [1, 0, 0, 1], [100, 0], a);\n break;\n\n case \"tr\":\n point.x = Math.min(point.x, width - 1);\n compute();\n transform(point2D(-tr.x, tr.y), [0, 0, 0, 1], [0, 0], -a);\n break;\n\n case \"bl\":\n point.x = Math.max(point.x, 1);\n compute();\n transform(point2D(tr.x, -tr.y), [1, 1, 0, 0], [100, 100], -a);\n break;\n\n case \"br\":\n point.x = Math.min(point.x, width - 1);\n compute();\n transform(point2D(-tr.x, -tr.y), [0, 1, 1, 0], [0, 100], a);\n break;\n }\n\n break;\n }\n\n data.point = point;\n },\n _moveFoldingPage: function _moveFoldingPage(move) {\n var data = this.data().f;\n if (!data) return;\n var turn = data.opts.turn,\n turnData = turn.data(),\n place = turnData.pagePlace;\n\n if (move) {\n var nextPage = data.opts.next;\n\n if (place[nextPage] != data.opts.page) {\n if (data.folding) flipMethods._moveFoldingPage.call(this, false);\n\n var folding = flipMethods._foldingPage.call(this);\n\n folding.appendTo(data.fpage);\n place[nextPage] = data.opts.page;\n data.folding = nextPage;\n }\n\n turn.turn(\"update\");\n } else {\n if (data.folding) {\n if (turnData.pages[data.folding]) {\n // If we have flip available\n var flipData = turnData.pages[data.folding].data().f;\n turnData.pageObjs[data.folding].appendTo(flipData.wrapper);\n } else if (turnData.pageWrap[data.folding]) {\n // If we have the pageWrapper\n turnData.pageObjs[data.folding].appendTo(turnData.pageWrap[data.folding]);\n }\n\n if (data.folding in place) {\n place[data.folding] = data.folding;\n }\n\n delete data.folding;\n }\n }\n },\n _showFoldedPage: function _showFoldedPage(c, animate) {\n var folding = flipMethods._foldingPage.call(this),\n dd = this.data(),\n data = dd.f,\n visible = data.visible;\n\n if (folding) {\n if (!visible || !data.point || data.point.corner != c.corner) {\n var corner = data.status == \"hover\" || data.status == \"peel\" || data.opts.turn.data().mouseAction ? c.corner : null;\n visible = false;\n if (trigger(\"start\", this, [data.opts, corner]) == \"prevented\") return false;\n }\n\n if (animate) {\n var that = this,\n point = data.point && data.point.corner == c.corner ? data.point : flipMethods._c.call(this, c.corner, 1);\n this.animatef({\n from: [point.x, point.y],\n to: [c.x, c.y],\n duration: 500,\n frame: function frame(v) {\n c.x = Math.round(v[0]);\n c.y = Math.round(v[1]);\n\n flipMethods._fold.call(that, c);\n }\n });\n } else {\n flipMethods._fold.call(this, c);\n\n if (dd.effect && !dd.effect.turning) this.animatef(false);\n }\n\n if (!visible) {\n switch (data.effect) {\n case \"hard\":\n data.visible = true;\n\n flipMethods._moveFoldingPage.call(this, true);\n\n data.fpage.show();\n if (data.opts.shadows) data.bshadow.show();\n break;\n\n case \"sheet\":\n data.visible = true;\n data.fparent.show().data().flips++;\n\n flipMethods._moveFoldingPage.call(this, true);\n\n data.fwrapper.show();\n if (data.bshadow) data.bshadow.show();\n break;\n }\n }\n\n return true;\n }\n\n return false;\n },\n hide: function hide() {\n var data = this.data().f,\n turnData = data.opts.turn.data(),\n folding = flipMethods._foldingPage.call(this);\n\n switch (data.effect) {\n case \"hard\":\n if (turnData.opts.gradients) {\n data.bshadowLoc = 0;\n data.bshadow.remove();\n data.ashadow.hide();\n }\n\n data.wrapper.transform(\"\");\n data.fpage.hide();\n break;\n\n case \"sheet\":\n if (--data.fparent.data().flips === 0) data.fparent.hide();\n this.css({\n left: 0,\n top: 0,\n right: \"auto\",\n bottom: \"auto\"\n }).transform(\"\");\n data.wrapper.transform(\"\");\n data.fwrapper.hide();\n if (data.bshadow) data.bshadow.hide();\n folding.transform(\"\");\n break;\n }\n\n data.visible = false;\n return this;\n },\n hideFoldedPage: function hideFoldedPage(animate) {\n var data = this.data().f;\n if (!data.point) return;\n\n var that = this,\n p1 = data.point,\n hide = function hide() {\n data.point = null;\n data.status = \"\";\n that.flip(\"hide\");\n that.trigger(\"end\", [data.opts, false]);\n };\n\n if (animate) {\n var p4 = flipMethods._c.call(this, p1.corner),\n top = p1.corner.substr(0, 1) == \"t\",\n delta = top ? Math.min(0, p1.y - p4.y) / 2 : Math.max(0, p1.y - p4.y) / 2,\n p2 = point2D(p1.x, p1.y + delta),\n p3 = point2D(p4.x, p4.y - delta);\n\n this.animatef({\n from: 0,\n to: 1,\n frame: function frame(v) {\n var np = bezier(p1, p2, p3, p4, v);\n p1.x = np.x;\n p1.y = np.y;\n\n flipMethods._fold.call(that, p1);\n },\n complete: hide,\n duration: 800,\n hiding: true\n });\n } else {\n this.animatef(false);\n hide();\n }\n },\n turnPage: function turnPage(corner) {\n var that = this,\n data = this.data().f,\n turnData = data.opts.turn.data();\n corner = {\n corner: data.corner ? data.corner.corner : corner || flipMethods._cAllowed.call(this)[0]\n };\n\n var p1 = data.point || flipMethods._c.call(this, corner.corner, data.opts.turn ? turnData.opts.elevation : 0),\n p4 = flipMethods._c2.call(this, corner.corner);\n\n this.trigger(\"flip\").animatef({\n from: 0,\n to: 1,\n frame: function frame(v) {\n var np = bezier(p1, p1, p4, p4, v);\n corner.x = np.x;\n corner.y = np.y;\n\n flipMethods._showFoldedPage.call(that, corner);\n },\n complete: function complete() {\n that.trigger(\"end\", [data.opts, true]);\n },\n duration: turnData.opts.duration,\n turning: true\n });\n data.corner = null;\n },\n moving: function moving() {\n return \"effect\" in this.data();\n },\n isTurning: function isTurning() {\n return this.flip(\"moving\") && this.data().effect.turning;\n },\n corner: function corner() {\n return this.data().f.corner;\n },\n _eventStart: function _eventStart(e) {\n var data = this.data().f,\n turn = data.opts.turn;\n\n if (!data.corner && !data.disabled && !this.flip(\"isTurning\") && data.opts.page == turn.data().pagePlace[data.opts.page]) {\n data.corner = flipMethods._isIArea.call(this, e);\n\n if (data.corner && flipMethods._foldingPage.call(this)) {\n this.trigger(\"pressed\", [data.point]);\n\n flipMethods._showFoldedPage.call(this, data.corner);\n\n return false;\n } else data.corner = null;\n }\n },\n _eventMove: function _eventMove(e) {\n var data = this.data().f;\n\n if (!data.disabled) {\n e = isTouch ? e.originalEvent.touches : [e];\n\n if (data.corner) {\n var pos = data.parent.offset();\n data.corner.x = e[0].pageX - pos.left;\n data.corner.y = e[0].pageY - pos.top;\n\n flipMethods._showFoldedPage.call(this, data.corner);\n } else if (data.hover && !this.data().effect && this.is(\":visible\")) {\n var point = flipMethods._isIArea.call(this, e[0]);\n\n if (point) {\n if (data.effect == \"sheet\" && point.corner.length == 2 || data.effect == \"hard\") {\n data.status = \"hover\";\n\n var origin = flipMethods._c.call(this, point.corner, data.opts.cornerSize / 2);\n\n point.x = origin.x;\n point.y = origin.y;\n\n flipMethods._showFoldedPage.call(this, point, true);\n }\n } else {\n if (data.status == \"hover\") {\n data.status = \"\";\n flipMethods.hideFoldedPage.call(this, true);\n }\n }\n }\n }\n },\n _eventEnd: function _eventEnd() {\n var data = this.data().f,\n corner = data.corner;\n\n if (!data.disabled && corner) {\n if (trigger(\"released\", this, [data.point || corner]) != \"prevented\") {\n flipMethods.hideFoldedPage.call(this, true);\n }\n }\n\n data.corner = null;\n },\n disable: function disable(_disable2) {\n flipMethods.setData.call(this, {\n disabled: _disable2\n });\n return this;\n },\n hover: function hover(_hover) {\n flipMethods.setData.call(this, {\n hover: _hover\n });\n return this;\n },\n peel: function peel(corner, animate) {\n var data = this.data().f;\n\n if (corner) {\n if ($.inArray(corner, corners.all) == -1) throw turnError(\"Corner \" + corner + \" is not permitted\");\n\n if ($.inArray(corner, flipMethods._cAllowed.call(this)) != -1) {\n var point = flipMethods._c.call(this, corner, data.opts.cornerSize / 2);\n\n data.status = \"peel\";\n\n flipMethods._showFoldedPage.call(this, {\n corner: corner,\n x: point.x,\n y: point.y\n }, animate);\n }\n } else {\n data.status = \"\";\n flipMethods.hideFoldedPage.call(this, animate);\n }\n\n return this;\n }\n}; // Processes classes\n\nfunction dec(that, methods, args) {\n if (!args[0] || _typeof(args[0]) == \"object\") return methods.init.apply(that, args);else if (methods[args[0]]) return methods[args[0]].apply(that, Array.prototype.slice.call(args, 1));else throw turnError(args[0] + \" is not a method or property\");\n} // Attributes for a layer\n\n\nfunction divAtt(top, left, zIndex, overf) {\n return {\n css: {\n position: \"absolute\",\n top: top,\n left: left,\n overflow: overf || \"hidden\",\n zIndex: zIndex || \"auto\"\n }\n };\n} // Gets a 2D point from a bezier curve of four points\n\n\nfunction bezier(p1, p2, p3, p4, t) {\n var a = 1 - t,\n b = a * a * a,\n c = t * t * t;\n return point2D(Math.round(b * p1.x + 3 * t * a * a * p2.x + 3 * t * t * a * p3.x + c * p4.x), Math.round(b * p1.y + 3 * t * a * a * p2.y + 3 * t * t * a * p3.y + c * p4.y));\n} // Converts an angle from degrees to radians\n\n\nfunction rad(degrees) {\n return degrees / 180 * PI;\n} // Converts an angle from radians to degrees\n\n\nfunction deg(radians) {\n return radians / PI * 180;\n} // Gets a 2D point\n\n\nfunction point2D(x, y) {\n return {\n x: x,\n y: y\n };\n} // Webkit 534.3 on Android wrongly repaints elements that use overflow:hidden + rotation\n\n\nfunction rotationAvailable() {\n var parts;\n\n if (parts = /AppleWebkit\\/([0-9\\.]+)/i.exec(navigator.userAgent)) {\n var webkitVersion = parseFloat(parts[1]);\n return webkitVersion > 534.3;\n } else {\n return true;\n }\n} // Returns the traslate value\n\n\nfunction translate(x, y, use3d) {\n return has3d && use3d ? \" translate3d(\" + x + \"px,\" + y + \"px, 0px) \" : \" translate(\" + x + \"px, \" + y + \"px) \";\n} // Returns the rotation value\n\n\nfunction rotate(degrees) {\n return \" rotate(\" + degrees + \"deg) \";\n} // Checks if a property belongs to an object\n\n\nfunction has(property, object) {\n return Object.prototype.hasOwnProperty.call(object, property);\n} // Gets the CSS3 vendor prefix\n\n\nfunction getPrefix() {\n var vendorPrefixes = [\"Moz\", \"Webkit\", \"Khtml\", \"O\", \"ms\"],\n len = vendorPrefixes.length,\n vendor = \"\";\n\n while (len--) {\n if (vendorPrefixes[len] + \"Transform\" in document.body.style) vendor = \"-\" + vendorPrefixes[len].toLowerCase() + \"-\";\n }\n\n return vendor;\n} // Detects the transitionEnd Event\n\n\nfunction getTransitionEnd() {\n var t,\n el = document.createElement(\"fakeelement\"),\n transitions = {\n transition: \"transitionend\",\n OTransition: \"oTransitionEnd\",\n MSTransition: \"transitionend\",\n MozTransition: \"transitionend\",\n WebkitTransition: \"webkitTransitionEnd\"\n };\n\n for (t in transitions) {\n if (el.style[t] !== undefined) {\n return transitions[t];\n }\n }\n} // Gradients\n\n\nfunction gradient(obj, p0, p1, colors, numColors) {\n var j,\n cols = [];\n\n if (vendor == \"-webkit-\") {\n for (j = 0; j < numColors; j++) {\n cols.push(\"color-stop(\" + colors[j][0] + \", \" + colors[j][1] + \")\");\n }\n\n obj.css({\n \"background-image\": \"-webkit-gradient(linear, \" + p0.x + \"% \" + p0.y + \"%,\" + p1.x + \"% \" + p1.y + \"%, \" + cols.join(\",\") + \" )\"\n });\n } else {\n p0 = {\n x: p0.x / 100 * obj.width(),\n y: p0.y / 100 * obj.height()\n };\n p1 = {\n x: p1.x / 100 * obj.width(),\n y: p1.y / 100 * obj.height()\n };\n var dx = p1.x - p0.x,\n dy = p1.y - p0.y,\n angle = Math.atan2(dy, dx),\n angle2 = angle - Math.PI / 2,\n diagonal = Math.abs(obj.width() * Math.sin(angle2)) + Math.abs(obj.height() * Math.cos(angle2)),\n gradientDiagonal = Math.sqrt(dy * dy + dx * dx),\n corner = point2D(p1.x < p0.x ? obj.width() : 0, p1.y < p0.y ? obj.height() : 0),\n slope = Math.tan(angle),\n inverse = -1 / slope,\n x = (inverse * corner.x - corner.y - slope * p0.x + p0.y) / (inverse - slope),\n c = {\n x: x,\n y: inverse * x - inverse * corner.x + corner.y\n },\n segA = Math.sqrt(Math.pow(c.x - p0.x, 2) + Math.pow(c.y - p0.y, 2));\n\n for (j = 0; j < numColors; j++) {\n cols.push(\" \" + colors[j][1] + \" \" + (segA + gradientDiagonal * colors[j][0]) * 100 / diagonal + \"%\");\n }\n\n obj.css({\n \"background-image\": vendor + \"linear-gradient(\" + -angle + \"rad,\" + cols.join(\",\") + \")\"\n });\n }\n} // Triggers an event\n\n\nfunction trigger(eventName, context, args) {\n var event = $.Event(eventName);\n context.trigger(event, args);\n if (event.isDefaultPrevented()) return \"prevented\";else if (event.isPropagationStopped()) return \"stopped\";else return \"\";\n} // JS Errors\n\n\nfunction turnError(message) {\n function TurnJsError(message) {\n this.name = \"TurnJsError\";\n this.message = message;\n }\n\n TurnJsError.prototype = new Error();\n TurnJsError.prototype.constructor = TurnJsError;\n return new TurnJsError(message);\n} // Find the offset of an element ignoring its transformation\n\n\nfunction findPos(obj) {\n var offset = {\n top: 0,\n left: 0\n };\n\n do {\n offset.left += obj.offsetLeft;\n offset.top += obj.offsetTop;\n } while (obj = obj.offsetParent);\n\n return offset;\n} // Checks if there's hard page compatibility\n// IE9 is the only browser that does not support hard pages\n\n\nfunction hasHardPage() {\n return navigator.userAgent.indexOf(\"MSIE 9.0\") == -1;\n} // Request an animation\n\n\nwindow.requestAnim = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n}(); // Extend $.fn\n\n\n$.extend($.fn, {\n flip: function flip() {\n return dec($(this[0]), flipMethods, arguments);\n },\n turn: function turn() {\n return dec($(this[0]), turnMethods, arguments);\n },\n transform: function transform(_transform, origin) {\n var properties = {};\n if (origin) properties[vendor + \"transform-origin\"] = origin;\n properties[vendor + \"transform\"] = _transform;\n return this.css(properties);\n },\n animatef: function animatef(point) {\n var data = this.data();\n if (data.effect) data.effect.stop();\n\n if (point) {\n if (!point.to.length) point.to = [point.to];\n if (!point.from.length) point.from = [point.from];\n\n var diff = [],\n len = point.to.length,\n animating = true,\n that = this,\n time = new Date().getTime(),\n frame = function frame() {\n if (!data.effect || !animating) return;\n var v = [],\n timeDiff = Math.min(point.duration, new Date().getTime() - time);\n\n for (var i = 0; i < len; i++) {\n v.push(data.effect.easing(1, timeDiff, point.from[i], diff[i], point.duration));\n }\n\n point.frame(len == 1 ? v[0] : v);\n\n if (timeDiff == point.duration) {\n delete data[\"effect\"];\n that.data(data);\n if (point.complete) point.complete();\n } else {\n window.requestAnim(frame);\n }\n };\n\n for (var i = 0; i < len; i++) {\n diff.push(point.to[i] - point.from[i]);\n }\n\n data.effect = $.extend({\n stop: function stop() {\n animating = false;\n },\n easing: function easing(x, t, b, c, data) {\n return c * Math.sqrt(1 - (t = t / data - 1) * t) + b;\n }\n }, point);\n this.data(data);\n frame();\n } else {\n delete data[\"effect\"];\n }\n }\n}); // Export some globals\n\n$.isTouch = isTouch;\n$.mouseEvents = mouseEvents;\n$.cssPrefix = getPrefix;\n$.cssTransitionEnd = getTransitionEnd;\n$.findPos = findPos;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\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 \"use strict\";\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n // For CommonJS and CommonJS-like environments where a proper `window`\n // is present, execute the factory and get jQuery.\n // For environments that do not have a `window` with a `document`\n // (such as Node.js), expose a factory as module.exports.\n // This accentuates the need for the creation of a real `window`.\n // e.g. var jQuery = require(\"jquery\")(window);\n // See ticket #14549 for more info.\n module.exports = global.document ? factory(global, true) : function (w) {\n if (!w.document) {\n throw new Error(\"jQuery requires a window with a document\");\n }\n\n return factory(w);\n };\n } else {\n factory(global);\n } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\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\n var arr = [];\n var getProto = Object.getPrototypeOf;\n var _slice = arr.slice;\n var flat = arr.flat ? function (array) {\n return arr.flat.call(array);\n } : function (array) {\n return arr.concat.apply([], array);\n };\n var push = arr.push;\n var indexOf = arr.indexOf;\n var class2type = {};\n var toString = class2type.toString;\n var hasOwn = class2type.hasOwnProperty;\n var fnToString = hasOwn.toString;\n var ObjectFunctionString = fnToString.call(Object);\n var support = {};\n\n var isFunction = function isFunction(obj) {\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n // Plus for old WebKit, typeof returns \"function\" for HTML collections\n // (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n };\n\n var isWindow = function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n\n var document = window.document;\n var preservedScriptAttributes = {\n type: true,\n src: true,\n nonce: true,\n noModule: true\n };\n\n function DOMEval(code, node, doc) {\n doc = doc || document;\n var i,\n val,\n script = doc.createElement(\"script\");\n script.text = code;\n\n if (node) {\n for (i in preservedScriptAttributes) {\n // Support: Firefox 64+, Edge 18+\n // Some browsers don't support the \"nonce\" property on scripts.\n // On the other hand, just using `getAttribute` is not enough as\n // the `nonce` attribute is reset to an empty string whenever it\n // becomes browsing-context connected.\n // See https://github.com/whatwg/html/issues/2369\n // See https://html.spec.whatwg.org/#nonce-attributes\n // The `node.getAttribute` check was added for the sake of\n // `jQuery.globalEval` so that it can fake a nonce-containing node\n // via an object.\n val = node[i] || node.getAttribute && node.getAttribute(i);\n\n if (val) {\n script.setAttribute(i, val);\n }\n }\n }\n\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n\n function toType(obj) {\n if (obj == null) {\n return obj + \"\";\n } // Support: Android <=2.3 only (functionish RegExp)\n\n\n return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(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 var version = \"3.6.0\",\n // Define a local copy of jQuery\n jQuery = function jQuery(selector, context) {\n // The jQuery object is actually just the init constructor 'enhanced'\n // Need init if jQuery is called (just allow error to be thrown if not included)\n return new jQuery.fn.init(selector, context);\n };\n\n jQuery.fn = jQuery.prototype = {\n // The current version of jQuery being used\n jquery: version,\n constructor: jQuery,\n // The default length of a jQuery object is 0\n length: 0,\n toArray: function toArray() {\n return _slice.call(this);\n },\n // Get the Nth element in the matched element set OR\n // Get the whole matched element set as a clean array\n get: function get(num) {\n // Return all the elements in a clean array\n if (num == null) {\n return _slice.call(this);\n } // Return just the one element from the set\n\n\n return num < 0 ? this[num + this.length] : this[num];\n },\n // Take an array of elements and push it onto the stack\n // (returning the new matched element set)\n pushStack: function pushStack(elems) {\n // Build a new jQuery matched element set\n var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n ret.prevObject = this; // Return the newly-formed element set\n\n return ret;\n },\n // Execute a callback for every element in the matched set.\n each: function each(callback) {\n return jQuery.each(this, callback);\n },\n map: function map(callback) {\n return this.pushStack(jQuery.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n first: function first() {\n return this.eq(0);\n },\n last: function last() {\n return this.eq(-1);\n },\n even: function even() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return (i + 1) % 2;\n }));\n },\n odd: function odd() {\n return this.pushStack(jQuery.grep(this, function (_elem, i) {\n return i % 2;\n }));\n },\n eq: function eq(i) {\n var len = this.length,\n j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n end: function end() {\n return this.prevObject || this.constructor();\n },\n // For internal use only.\n // Behaves like an Array's method, not like a jQuery method.\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n jQuery.extend = jQuery.fn.extend = function () {\n var options,\n name,\n src,\n copy,\n copyIsArray,\n clone,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false; // Handle a deep copy situation\n\n if (typeof target === \"boolean\") {\n deep = target; // Skip the boolean and the target\n\n target = arguments[i] || {};\n i++;\n } // Handle case when target is a string or something (possible in deep copy)\n\n\n if (_typeof(target) !== \"object\" && !isFunction(target)) {\n target = {};\n } // Extend jQuery itself if only one argument is passed\n\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n copy = options[name]; // Prevent Object.prototype pollution\n // Prevent never-ending loop\n\n if (name === \"__proto__\" || target === copy) {\n continue;\n } // Recurse if we're merging plain objects or arrays\n\n\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n src = target[name]; // Ensure proper type for the source value\n\n if (copyIsArray && !Array.isArray(src)) {\n clone = [];\n } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n clone = {};\n } else {\n clone = src;\n }\n\n copyIsArray = false; // Never move original objects, clone them\n\n target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n } // Return the modified object\n\n\n return target;\n };\n\n jQuery.extend({\n // Unique for each copy of jQuery on the page\n expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n // Assume jQuery is ready without the ready module\n isReady: true,\n error: function error(msg) {\n throw new Error(msg);\n },\n noop: function noop() {},\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor; // Detect obvious negatives\n // Use toString instead of jQuery.type to catch host objects\n\n if (!obj || toString.call(obj) !== \"[object Object]\") {\n return false;\n }\n\n proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n if (!proto) {\n return true;\n } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n },\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n\n return true;\n },\n // Evaluates a script in a provided context; falls back to the global one\n // if not specified.\n globalEval: function globalEval(code, options, doc) {\n DOMEval(code, {\n nonce: options && options.nonce\n }, doc);\n },\n each: function each(obj, callback) {\n var length,\n i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n // results is for internal usage only\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n merge: function merge(first, second) {\n var len = +second.length,\n j = 0,\n i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n return first;\n },\n grep: function grep(elems, callback, invert) {\n var callbackInverse,\n matches = [],\n i = 0,\n length = elems.length,\n callbackExpect = !invert; // Go through the array, only saving the items\n // that pass the validator function\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n // arg is for internal usage only\n map: function map(elems, callback, arg) {\n var length,\n value,\n i = 0,\n ret = []; // Go through the array, translating each of the items to their new values\n\n if (isArrayLike(elems)) {\n length = elems.length;\n\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n } // Go through every key on the object,\n\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } // Flatten any nested arrays\n\n\n return flat(ret);\n },\n // A global GUID counter for objects\n guid: 1,\n // jQuery.support is not used in Core but other projects attach their\n // properties to it so it needs to exist.\n support: support\n });\n\n if (typeof Symbol === \"function\") {\n jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n } // Populate the class2type map\n\n\n jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n // Support: real iOS 8.2 only (not reproducible in simulator)\n // `in` check used to prevent JIT error (gh-2145)\n // hasOwn isn't used here due to false negatives\n // regarding Nodelist length in IE\n var length = !!obj && \"length\" in obj && obj.length,\n type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n\n var 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) {\n var i,\n support,\n Expr,\n getText,\n isXML,\n tokenize,\n compile,\n select,\n outermostContext,\n sortInput,\n hasDuplicate,\n // Local document vars\n setDocument,\n document,\n docElem,\n documentIsHTML,\n rbuggyQSA,\n rbuggyMatches,\n matches,\n contains,\n // Instance-specific data\n expando = \"sizzle\" + 1 * new Date(),\n preferredDoc = window.document,\n dirruns = 0,\n done = 0,\n classCache = createCache(),\n tokenCache = createCache(),\n compilerCache = createCache(),\n nonnativeSelectorCache = createCache(),\n sortOrder = function sortOrder(a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n\n return 0;\n },\n // Instance methods\n hasOwn = {}.hasOwnProperty,\n arr = [],\n pop = arr.pop,\n pushNative = arr.push,\n push = arr.push,\n slice = arr.slice,\n // Use a stripped-down indexOf as it's faster than native\n // https://jsperf.com/thor-indexof-vs-for/5\n indexOf = function indexOf(list, elem) {\n var i = 0,\n len = list.length;\n\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n\n return -1;\n },\n booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n // Regular expressions\n // http://www.w3.org/TR/css3-selectors/#whitespace\n whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n // or strings [capture 3 or capture 4]\"\n \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n // 1. quoted (capture 3; capture 4 or capture 5)\n \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n \".*\" + \")\\\\)|)\",\n // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n rdescend = new RegExp(whitespace + \"|>\"),\n rpseudo = new RegExp(pseudos),\n ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n matchExpr = {\n \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n \"ATTR\": new RegExp(\"^\" + attributes),\n \"PSEUDO\": new RegExp(\"^\" + pseudos),\n \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n // For use in libraries implementing .is()\n // We use this for POS matching in `select`\n \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n },\n rhtml = /HTML$/i,\n rinputs = /^(?:input|select|textarea|button)$/i,\n rheader = /^h\\d$/i,\n rnative = /^[^{]+\\{\\s*\\[native \\w/,\n // Easily-parseable/retrievable ID or TAG or CLASS selectors\n rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n rsibling = /[+~]/,\n // CSS escapes\n // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n funescape = function funescape(escape, nonHex) {\n var high = \"0x\" + escape.slice(1) - 0x10000;\n return nonHex ? // Strip the backslash prefix from a non-hex escape sequence\n nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point\n // Support: IE <=11+\n // For values outside the Basic Multilingual Plane (BMP), manually construct a\n // surrogate pair\n high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n },\n // CSS string/identifier serialization\n // https://drafts.csswg.org/cssom/#common-serializing-idioms\n rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n fcssescape = function fcssescape(ch, asCodePoint) {\n if (asCodePoint) {\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n if (ch === \"\\0\") {\n return \"\\uFFFD\";\n } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n } // Other potentially-special ASCII characters get backslash-escaped\n\n\n return \"\\\\\" + ch;\n },\n // Used for iframes\n // See setDocument()\n // Removing the function wrapper causes a \"Permission Denied\"\n // error in IE\n unloadHandler = function unloadHandler() {\n setDocument();\n },\n inDisabledFieldset = addCombinator(function (elem) {\n return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n }, {\n dir: \"parentNode\",\n next: \"legend\"\n }); // Optimize for push.apply( _, NodeList )\n\n\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n // Detect silently failing push.apply\n // eslint-disable-next-line no-unused-expressions\n\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? // Leverage slice if possible\n function (target, els) {\n pushNative.apply(target, slice.call(els));\n } : // Support: IE<9\n // Otherwise append directly\n function (target, els) {\n var j = target.length,\n i = 0; // Can't trust NodeList.length\n\n while (target[j++] = els[i++]) {}\n\n target.length = j - 1;\n }\n };\n }\n\n function Sizzle(selector, context, results, seed) {\n var m,\n i,\n elem,\n nid,\n match,\n groups,\n newSelector,\n newContext = context && context.ownerDocument,\n // nodeType defaults to 9, since context defaults to document\n nodeType = context ? context.nodeType : 9;\n results = results || []; // Return early from calls with invalid selector or context\n\n if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n if (!seed) {\n setDocument(context);\n context = context || document;\n\n if (documentIsHTML) {\n // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n // (excepting DocumentFragment context, where the methods don't exist)\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n // ID selector\n if (m = match[1]) {\n // Document context\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n } // Element context\n\n } else {\n // Support: IE, Opera, Webkit\n // TODO: identify versions\n // getElementById can match elements by name instead of ID\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n } // Type selector\n\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results; // Class selector\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n } // Take advantage of querySelectorAll\n\n\n if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only\n // Exclude object elements\n nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n newSelector = selector;\n newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n // descendant combinators, which is not what we want.\n // In such cases, we work around the behavior by prefixing every selector in the\n // list with an ID selector referencing the scope context.\n // The technique has to be used as well when a leading combinator is used\n // as such selectors are not recognized by querySelectorAll.\n // Thanks to Andrew Dupont for this technique.\n\n if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n // Expand context for sibling selectors\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser\n // supports it & if we're not changing the context.\n\n if (newContext !== context || !support.scope) {\n // Capture the context ID, setting it first if necessary\n if (nid = context.getAttribute(\"id\")) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute(\"id\", nid = expando);\n }\n } // Prefix every selector in the list\n\n\n groups = tokenize(selector);\n i = groups.length;\n\n while (i--) {\n groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n }\n\n newSelector = groups.join(\",\");\n }\n\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n nonnativeSelectorCache(selector, true);\n } finally {\n if (nid === expando) {\n context.removeAttribute(\"id\");\n }\n }\n }\n }\n } // All others\n\n\n return select(selector.replace(rtrim, \"$1\"), context, results, seed);\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 */\n\n\n function createCache() {\n var keys = [];\n\n function cache(key, value) {\n // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n if (keys.push(key + \" \") > Expr.cacheLength) {\n // Only keep the most recent entries\n delete cache[keys.shift()];\n }\n\n return cache[key + \" \"] = value;\n }\n\n return cache;\n }\n /**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\n\n\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n /**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\n\n\n function assert(fn) {\n var el = document.createElement(\"fieldset\");\n\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n // Remove from its parent by default\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n } // release memory in IE\n\n\n el = null;\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 */\n\n\n function addHandle(attrs, handler) {\n var arr = attrs.split(\"|\"),\n i = arr.length;\n\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\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 */\n\n\n function siblingCheck(a, b) {\n var cur = b && a,\n diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n if (diff) {\n return diff;\n } // Check if b follows a\n\n\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n\n return a ? 1 : -1;\n }\n /**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\n\n\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === type;\n };\n }\n /**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\n\n\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === \"input\" || name === \"button\") && elem.type === type;\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 */\n\n\n function createDisabledPseudo(disabled) {\n // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n return function (elem) {\n // Only certain elements can match :enabled or :disabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n if (\"form\" in elem) {\n // Check for inherited disabledness on relevant non-disabled elements:\n // * listed form-associated elements in a disabled fieldset\n // https://html.spec.whatwg.org/multipage/forms.html#category-listed\n // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n // * option elements in a disabled optgroup\n // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n // All such elements have a \"form\" property.\n if (elem.parentNode && elem.disabled === false) {\n // Option elements defer to a parent optgroup if present\n if (\"label\" in elem) {\n if (\"label\" in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n } // Support: IE 6 - 11\n // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n /* jshint -W018 */\n elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n }\n\n return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n // even exist on them, let alone have a boolean value.\n } else if (\"label\" in elem) {\n return elem.disabled === disabled;\n } // Remaining elements are neither :enabled nor :disabled\n\n\n return false;\n };\n }\n /**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\n\n\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j,\n matchIndexes = fn([], seed.length, argument),\n i = matchIndexes.length; // Match elements found at the specified indexes\n\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\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 */\n\n\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n } // Expose support vars for convenience\n\n\n support = Sizzle.support = {};\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 */\n\n isXML = Sizzle.isXML = function (elem) {\n var namespace = elem && elem.namespaceURI,\n docElem = elem && (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n // https://bugs.jquery.com/ticket/4833\n\n return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\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 */\n\n\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare,\n subWindow,\n doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n } // Update global variables\n\n\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+\n // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n // Support: IE 11, Edge\n if (subWindow.addEventListener) {\n subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent(\"onunload\", unloadHandler);\n }\n } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n // IE/Edge & older browsers don't support the :scope pseudo-class.\n // Support: Safari 6.0 only\n // Safari 6.0 supports :scope but it's an alias of :root there.\n\n\n support.scope = assert(function (el) {\n docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n });\n /* Attributes\n ---------------------------------------------------------------------- */\n // Support: IE<8\n // Verify that getAttribute really returns attributes and not properties\n // (excepting IE8 booleans)\n\n support.attributes = assert(function (el) {\n el.className = \"i\";\n return !el.getAttribute(\"className\");\n });\n /* getElement(s)By*\n ---------------------------------------------------------------------- */\n // Check if getElementsByTagName(\"*\") returns only elements\n\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(\"\"));\n return !el.getElementsByTagName(\"*\").length;\n }); // Support: IE<9\n\n support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n // Check if getElementById returns elements by name\n // The broken getElementById methods don't pick up programmatically-set names,\n // so use a roundabout getElementsByName test\n\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n }); // ID filter and find\n\n if (support.getById) {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute(\"id\") === attrId;\n };\n };\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter[\"ID\"] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n return node && node.value === attrId;\n };\n }; // Support: IE 6 - 7 only\n // getElementById is not reliable as a find shortcut\n\n\n Expr.find[\"ID\"] = function (id, context) {\n if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n var node,\n i,\n elems,\n elem = context.getElementById(id);\n\n if (elem) {\n // Verify the id attribute\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n } // Fall back on getElementsByName\n\n\n elems = context.getElementsByName(id);\n i = 0;\n\n while (elem = elems[i++]) {\n node = elem.getAttributeNode(\"id\");\n\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n\n return [];\n }\n };\n } // Tag\n\n\n Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== \"undefined\") {\n return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem,\n tmp = [],\n i = 0,\n // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n results = context.getElementsByTagName(tag); // Filter out possible comments\n\n if (tag === \"*\") {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n\n return tmp;\n }\n\n return results;\n }; // Class\n\n Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n /* QSA/matchesSelector\n ---------------------------------------------------------------------- */\n // QSA and matchesSelector support\n // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n // We allow this because of a bug in IE8/9 that throws an error\n // whenever `document.activeElement` is accessed on an iframe\n // So, we allow :focus to pass through QSA all the time to avoid the IE error\n // See https://bugs.jquery.com/ticket/13378\n\n rbuggyQSA = [];\n\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n // Build QSA regex\n // Regex strategy adopted from Diego Perini\n assert(function (el) {\n var input; // Select is set to empty string on purpose\n // This is to test IE's treatment of not explicitly\n // setting a boolean content attribute,\n // since its presence should be enough\n // https://bugs.jquery.com/ticket/12359\n\n docElem.appendChild(el).innerHTML = \"\" + \"\"; // Support: IE8, Opera 11-12.16\n // Nothing should be selected when empty strings follow ^= or $= or *=\n // The test attribute must be unknown in Opera but \"safe\" for WinRT\n // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Support: IE8\n // Boolean attributes and \"value\" are not treated correctly\n\n\n if (!el.querySelectorAll(\"[selected]\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n rbuggyQSA.push(\"~=\");\n } // Support: IE 11+, Edge 15 - 18+\n // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n // Adding a temporary attribute to the document before the selection works\n // around the issue.\n // Interestingly, IE 10 & older don't seem to have the issue.\n\n\n input = document.createElement(\"input\");\n input.setAttribute(\"name\", \"\");\n el.appendChild(input);\n\n if (!el.querySelectorAll(\"[name='']\").length) {\n rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n } // Webkit/Opera - :checked should return selected option elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n // IE8 throws error here and will not see later tests\n\n\n if (!el.querySelectorAll(\":checked\").length) {\n rbuggyQSA.push(\":checked\");\n } // Support: Safari 8+, iOS 8+\n // https://bugs.webkit.org/show_bug.cgi?id=136851\n // In-page `selector#id sibling-combinator selector` fails\n\n\n if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n rbuggyQSA.push(\".#.+[+~]\");\n } // Support: Firefox <=3.6 - 5 only\n // Old Firefox doesn't throw on a badly-escaped identifier.\n\n\n el.querySelectorAll(\"\\\\\\f\");\n rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n });\n assert(function (el) {\n el.innerHTML = \"\" + \"\"; // Support: Windows 8 Native Apps\n // The type and name attributes are restricted during .innerHTML assignment\n\n var input = document.createElement(\"input\");\n input.setAttribute(\"type\", \"hidden\");\n el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n // Enforce case-sensitivity of name attribute\n\n if (el.querySelectorAll(\"[name=d]\").length) {\n rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n // IE8 throws error here and will not see later tests\n\n\n if (el.querySelectorAll(\":enabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: IE9-11+\n // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n docElem.appendChild(el).disabled = true;\n\n if (el.querySelectorAll(\":disabled\").length !== 2) {\n rbuggyQSA.push(\":enabled\", \":disabled\");\n } // Support: Opera 10 - 11 only\n // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n el.querySelectorAll(\"*,:x\");\n rbuggyQSA.push(\",.*:\");\n });\n }\n\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n // Check to see if it's possible to do matchesSelector\n // on a disconnected node (IE 9)\n support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n // Gecko does not error, returns false instead\n\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push(\"!=\", pseudos);\n });\n }\n\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n /* Contains\n ---------------------------------------------------------------------- */\n\n hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n // Purposefully self-exclusive\n // As in, an element does not contain itself\n\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a,\n bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n\n return false;\n };\n /* Sorting\n ---------------------------------------------------------------------- */\n // Document order sorting\n\n sortOrder = hasCompare ? function (a, b) {\n // Flag for duplicate removal\n if (a === b) {\n hasDuplicate = true;\n return 0;\n } // Sort on method existence if only one input has compareDocumentPosition\n\n\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n if (compare) {\n return compare;\n } // Calculate position if both inputs belong to the same document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n 1; // Disconnected nodes\n\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n // Choose the first element that is related to our preferred document\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n return -1;\n } // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n\n if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n return 1;\n } // Maintain original order\n\n\n return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n }\n\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n // Exit early if the nodes are identical\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var cur,\n i = 0,\n aup = a.parentNode,\n bup = b.parentNode,\n ap = [a],\n bp = [b]; // Parentless nodes are either documents or disconnected\n\n if (!aup || !bup) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n return a == document ? -1 : b == document ? 1 :\n /* eslint-enable eqeqeq */\n aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n } else if (aup === bup) {\n return siblingCheck(a, b);\n } // Otherwise we need full lists of their ancestors for comparison\n\n\n cur = a;\n\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n\n cur = b;\n\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n } // Walk down the tree looking for a discrepancy\n\n\n while (ap[i] === bp[i]) {\n i++;\n }\n\n return i ? // Do a sibling check if the nodes have a common ancestor\n siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n\n /* eslint-disable eqeqeq */\n ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :\n /* eslint-enable eqeqeq */\n 0;\n };\n return document;\n };\n\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n\n Sizzle.matchesSelector = function (elem, expr) {\n setDocument(elem);\n\n if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n // fragment in IE 9\n elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n nonnativeSelectorCache(expr, true);\n }\n }\n\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n\n Sizzle.contains = function (context, elem) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((context.ownerDocument || context) != document) {\n setDocument(context);\n }\n\n return contains(context, elem);\n };\n\n Sizzle.attr = function (elem, name) {\n // Set document vars if needed\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n if ((elem.ownerDocument || elem) != document) {\n setDocument(elem);\n }\n\n var fn = Expr.attrHandle[name.toLowerCase()],\n // Don't get fooled by Object.prototype properties (jQuery #13807)\n val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n\n Sizzle.escape = function (sel) {\n return (sel + \"\").replace(rcssescape, fcssescape);\n };\n\n Sizzle.error = function (msg) {\n throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n };\n /**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\n\n\n Sizzle.uniqueSort = function (results) {\n var elem,\n duplicates = [],\n j = 0,\n i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n } // Clear input after sorting to release objects\n // See https://github.com/jquery/sizzle/pull/225\n\n\n sortInput = null;\n return results;\n };\n /**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\n\n\n getText = Sizzle.getText = function (elem) {\n var node,\n ret = \"\",\n i = 0,\n nodeType = elem.nodeType;\n\n if (!nodeType) {\n // If no nodeType, this is expected to be an array\n while (node = elem[i++]) {\n // Do not traverse comment nodes\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n // Use textContent for elements\n // innerText usage removed for consistency of new lines (jQuery #11153)\n if (typeof elem.textContent === \"string\") {\n return elem.textContent;\n } else {\n // Traverse its children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n } // Do not include comment or processing instruction nodes\n\n\n return ret;\n };\n\n Expr = Sizzle.selectors = {\n // Can be adjusted by the user\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n \">\": {\n dir: \"parentNode\",\n first: true\n },\n \" \": {\n dir: \"parentNode\"\n },\n \"+\": {\n dir: \"previousSibling\",\n first: true\n },\n \"~\": {\n dir: \"previousSibling\"\n }\n },\n preFilter: {\n \"ATTR\": function ATTR(match) {\n match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n if (match[2] === \"~=\") {\n match[3] = \" \" + match[3] + \" \";\n }\n\n return match.slice(0, 4);\n },\n \"CHILD\": function CHILD(match) {\n /* matches from matchExpr[\"CHILD\"]\n \t1 type (only|nth|...)\n \t2 what (child|of-type)\n \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n \t5 sign of xn-component\n \t6 x of xn-component\n \t7 sign of y-component\n \t8 y of y-component\n */\n match[1] = match[1].toLowerCase();\n\n if (match[1].slice(0, 3) === \"nth\") {\n // nth-* requires argument\n if (!match[3]) {\n Sizzle.error(match[0]);\n } // numeric x and y parameters for Expr.filter.CHILD\n // remember that false/true cast respectively to 0/1\n\n\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n\n return match;\n },\n \"PSEUDO\": function PSEUDO(match) {\n var excess,\n unquoted = !match[6] && match[2];\n\n if (matchExpr[\"CHILD\"].test(match[0])) {\n return null;\n } // Accept quoted arguments as-is\n\n\n if (match[3]) {\n match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\n excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis\n excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n // excess is a negative index\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n return match.slice(0, 3);\n }\n },\n filter: {\n \"TAG\": function TAG(nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === \"*\" ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n \"CLASS\": function CLASS(className) {\n var pattern = classCache[className + \" \"];\n return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n });\n },\n \"ATTR\": function ATTR(name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n\n if (result == null) {\n return operator === \"!=\";\n }\n\n if (!operator) {\n return true;\n }\n\n result += \"\";\n /* eslint-disable max-len */\n\n return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n /* eslint-enable max-len */\n };\n },\n \"CHILD\": function CHILD(type, what, _argument, first, last) {\n var simple = type.slice(0, 3) !== \"nth\",\n forward = type.slice(-4) !== \"last\",\n ofType = what === \"of-type\";\n return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n function (elem) {\n return !!elem.parentNode;\n } : function (elem, _context, xml) {\n var cache,\n uniqueCache,\n outerCache,\n node,\n nodeIndex,\n start,\n dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n parent = elem.parentNode,\n name = ofType && elem.nodeName.toLowerCase(),\n useCache = !xml && !ofType,\n diff = false;\n\n if (parent) {\n // :(first|last|only)-(child|of-type)\n if (simple) {\n while (dir) {\n node = elem;\n\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n start = dir = type === \"only\" && !start && \"nextSibling\";\n }\n\n return true;\n }\n\n start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n if (forward && useCache) {\n // Seek `elem` from a previously-cached index\n // ...in a gzip-friendly way\n node = parent;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n\n while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\n diff = nodeIndex = 0) || start.pop()) {\n // When found, cache indexes on `parent` and break\n if (node.nodeType === 1 && ++diff && node === elem) {\n uniqueCache[type] = [dirruns, nodeIndex, diff];\n break;\n }\n }\n } else {\n // Use previously-cached element index if available\n if (useCache) {\n // ...in a gzip-friendly way\n node = elem;\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex;\n } // xml :nth-child(...)\n // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n if (diff === false) {\n // Use the same loop as above to seek `elem` from the start\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n // Cache the index of each encountered element\n if (useCache) {\n outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n uniqueCache[type] = [dirruns, diff];\n }\n\n if (node === elem) {\n break;\n }\n }\n }\n }\n } // Incorporate the offset, then check against cycle size\n\n\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n \"PSEUDO\": function PSEUDO(pseudo, argument) {\n // pseudo-class names are case-insensitive\n // http://www.w3.org/TR/selectors/#pseudo-classes\n // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n // Remember that setFilters inherits from pseudos\n var args,\n fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n // arguments are needed to create the filter function\n // just as Sizzle does\n\n if (fn[expando]) {\n return fn(argument);\n } // But maintain support for old signatures\n\n\n if (fn.length > 1) {\n args = [pseudo, pseudo, \"\", argument];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx,\n matched = fn(seed, argument),\n i = matched.length;\n\n while (i--) {\n idx = indexOf(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n\n return fn;\n }\n },\n pseudos: {\n // Potentially complex pseudos\n \"not\": markFunction(function (selector) {\n // Trim the selector passed to compile\n // to avoid treating leading and trailing\n // spaces as combinators\n var input = [],\n results = [],\n matcher = compile(selector.replace(rtrim, \"$1\"));\n return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n var elem,\n unmatched = matcher(seed, null, xml, []),\n i = seed.length; // Match elements unmatched by `matcher`\n\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, _context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n input[0] = null;\n return !results.pop();\n };\n }),\n \"has\": markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n \"contains\": markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || getText(elem)).indexOf(text) > -1;\n };\n }),\n // \"Whether an element is represented by a :lang() selector\n // is based solely on the element's language value\n // being equal to the identifier C,\n // or beginning with the identifier C immediately followed by \"-\".\n // The matching of C against the element's language value is performed case-insensitively.\n // The identifier C does not have to be a valid language name.\"\n // http://www.w3.org/TR/selectors/#lang-pseudo\n \"lang\": markFunction(function (lang) {\n // lang value must be a valid identifier\n if (!ridentifier.test(lang || \"\")) {\n Sizzle.error(\"unsupported lang: \" + lang);\n }\n\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n return false;\n };\n }),\n // Miscellaneous\n \"target\": function target(elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n \"root\": function root(elem) {\n return elem === docElem;\n },\n \"focus\": function focus(elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n // Boolean properties\n \"enabled\": createDisabledPseudo(false),\n \"disabled\": createDisabledPseudo(true),\n \"checked\": function checked(elem) {\n // In CSS3, :checked should return both checked and selected elements\n // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n },\n \"selected\": function selected(elem) {\n // Accessing this property makes selected-by-default\n // options in Safari work properly\n if (elem.parentNode) {\n // eslint-disable-next-line no-unused-expressions\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n // Contents\n \"empty\": function empty(elem) {\n // http://www.w3.org/TR/selectors/#empty-pseudo\n // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n // but not by others (comment: 8; processing instruction: 7; etc.)\n // nodeType < 6 works because attributes (2) do not appear as children\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n\n return true;\n },\n \"parent\": function parent(elem) {\n return !Expr.pseudos[\"empty\"](elem);\n },\n // Element/input types\n \"header\": function header(elem) {\n return rheader.test(elem.nodeName);\n },\n \"input\": function input(elem) {\n return rinputs.test(elem.nodeName);\n },\n \"button\": function button(elem) {\n var name = elem.nodeName.toLowerCase();\n return name === \"input\" && elem.type === \"button\" || name === \"button\";\n },\n \"text\": function text(elem) {\n var attr;\n return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n },\n // Position-in-collection\n \"first\": createPositionalPseudo(function () {\n return [0];\n }),\n \"last\": createPositionalPseudo(function (_matchIndexes, length) {\n return [length - 1];\n }),\n \"eq\": createPositionalPseudo(function (_matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n \"even\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n }),\n \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n\n return matchIndexes;\n })\n }\n };\n Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n } // Easy API for creating new setFilters\n\n\n function setFilters() {}\n\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched,\n match,\n tokens,\n type,\n soFar,\n groups,\n preFilters,\n cached = tokenCache[selector + \" \"];\n\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while (soFar) {\n // Comma and first run\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n // Don't consume trailing commas as valid\n soFar = soFar.slice(match[0].length) || soFar;\n }\n\n groups.push(tokens = []);\n }\n\n matched = false; // Combinators\n\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n // Cast descendant combinators to space\n type: match[0].replace(rtrim, \" \")\n });\n soFar = soFar.slice(matched.length);\n } // Filters\n\n\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n\n if (!matched) {\n break;\n }\n } // Return the length of the invalid excess\n // if we're just parsing\n // Otherwise, throw an error or return tokens\n\n\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n tokenCache(selector, groups).slice(0);\n };\n\n function toSelector(tokens) {\n var i = 0,\n len = tokens.length,\n selector = \"\";\n\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n\n return selector;\n }\n\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir,\n skip = combinator.next,\n key = skip || dir,\n checkNonElements = base && key === \"parentNode\",\n doneName = done++;\n return combinator.first ? // Check against closest ancestor/preceding element\n function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n\n return false;\n } : // Check against all ancestor/preceding elements\n function (elem, context, xml) {\n var oldCache,\n uniqueCache,\n outerCache,\n newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n // Defend against cloned attroperties (jQuery gh-1709)\n\n uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n if (skip && skip === elem.nodeName.toLowerCase()) {\n elem = elem[dir] || elem;\n } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n // Assign to newCache so results back-propagate to previous elements\n return newCache[2] = oldCache[2];\n } else {\n // Reuse newcache so results back-propagate to previous elements\n uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n };\n }\n\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n\n return true;\n } : matchers[0];\n }\n\n function multipleContexts(selector, contexts, results) {\n var i = 0,\n len = contexts.length;\n\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n\n return results;\n }\n\n function condense(unmatched, map, filter, context, xml) {\n var elem,\n newUnmatched = [],\n i = 0,\n len = unmatched.length,\n mapped = map != null;\n\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n\n return newUnmatched;\n }\n\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n\n return markFunction(function (seed, results, context, xml) {\n var temp,\n i,\n elem,\n preMap = [],\n postMap = [],\n preexisting = results.length,\n // Get initial elements from seed or context\n elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n // Prefilter to get matcher input, preserving a map for seed-results synchronization\n matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n [] : // ...otherwise use results directly\n results : matcherIn; // Find primary matches\n\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n } // Apply postFilter\n\n\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n i = temp.length;\n\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n // Get the final matcherOut by condensing this intermediate into postFinder contexts\n temp = [];\n i = matcherOut.length;\n\n while (i--) {\n if (elem = matcherOut[i]) {\n // Restore matcherIn since elem is not yet a final match\n temp.push(matcherIn[i] = elem);\n }\n }\n\n postFinder(null, matcherOut = [], temp, xml);\n } // Move matched elements from seed to results to keep them synchronized\n\n\n i = matcherOut.length;\n\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n } // Add elements to results, through postFinder if defined\n\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n\n function matcherFromTokens(tokens) {\n var checkContext,\n matcher,\n j,\n len = tokens.length,\n leadingRelative = Expr.relative[tokens[0].type],\n implicitRelative = leadingRelative || Expr.relative[\" \"],\n i = leadingRelative ? 1 : 0,\n // The foundational matcher ensures that elements are reachable from top-level context(s)\n matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true),\n matchAnyContext = addCombinator(function (elem) {\n return indexOf(checkContext, elem) > -1;\n }, implicitRelative, true),\n matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n checkContext = null;\n return ret;\n }];\n\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n if (matcher[expando]) {\n // Find the next relative operator (if any) for proper handling\n j = ++i;\n\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n tokens.slice(0, i - 1).concat({\n value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n\n matchers.push(matcher);\n }\n }\n\n return elementMatcher(matchers);\n }\n\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0,\n byElement = elementMatchers.length > 0,\n superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n var elem,\n j,\n matcher,\n matchedCount = 0,\n i = \"0\",\n unmatched = seed && [],\n setMatched = [],\n contextBackup = outermostContext,\n // We must always have either seed elements or outermost context\n elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n // Use integer dirruns iff this is the outermost matcher\n dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n len = elems.length;\n\n if (outermost) {\n // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n outermostContext = context == document || context || outermost;\n } // Add elements passing elementMatchers directly to results\n // Support: IE<9, Safari\n // Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\n\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0; // Support: IE 11+, Edge 17 - 18+\n // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n // two documents; shallow comparisons work.\n // eslint-disable-next-line eqeqeq\n\n if (!context && elem.ownerDocument != document) {\n setDocument(elem);\n xml = !documentIsHTML;\n }\n\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context || document, xml)) {\n results.push(elem);\n break;\n }\n }\n\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n } // Track unmatched elements for set filters\n\n\n if (bySet) {\n // They will have gone through all possible matchers\n if (elem = !matcher && elem) {\n matchedCount--;\n } // Lengthen the array for every element, matched or not\n\n\n if (seed) {\n unmatched.push(elem);\n }\n }\n } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n // makes the latter nonnegative.\n\n\n matchedCount += i; // Apply set filters to unmatched elements\n // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n // no element matchers and no seed.\n // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n // numerically zero.\n\n if (bySet && i !== matchedCount) {\n j = 0;\n\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n\n if (seed) {\n // Reintegrate element matches to eliminate the need for sorting\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n } // Discard index placeholder values to get only actual matches\n\n\n setMatched = condense(setMatched);\n } // Add matches to results\n\n\n push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n } // Override manipulation of globals by nested matchers\n\n\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n\n compile = Sizzle.compile = function (selector, match\n /* Internal Use Only */\n ) {\n var i,\n setMatchers = [],\n elementMatchers = [],\n cached = compilerCache[selector + \" \"];\n\n if (!cached) {\n // Generate a function of recursive functions that can be used to check each element\n if (!match) {\n match = tokenize(selector);\n }\n\n i = match.length;\n\n while (i--) {\n cached = matcherFromTokens(match[i]);\n\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n } // Cache the compiled function\n\n\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n cached.selector = selector;\n }\n\n return cached;\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 */\n\n\n select = Sizzle.select = function (selector, context, results, seed) {\n var i,\n tokens,\n token,\n type,\n find,\n compiled = typeof selector === \"function\" && selector,\n match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n // (the latter of which guarantees us context)\n\n if (match.length === 1) {\n // Reduce context if the leading compound selector is an ID\n tokens = match[0] = match[0].slice(0);\n\n if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n if (!context) {\n return results; // Precompiled matchers will still verify ancestry, so step up a level\n } else if (compiled) {\n context = context.parentNode;\n }\n\n selector = selector.slice(tokens.shift().value.length);\n } // Fetch a seed set for right-to-left matching\n\n\n i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n while (i--) {\n token = tokens[i]; // Abort if we hit a combinator\n\n if (Expr.relative[type = token.type]) {\n break;\n }\n\n if (find = Expr.find[type]) {\n // Search, expanding context for leading sibling combinators\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n // If seed is empty or no tokens remain, we can return early\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n\n break;\n }\n }\n }\n } // Compile and execute a filtering function if one is not provided\n // Provide `match` to avoid retokenization if we modified the selector above\n\n\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n }; // One-time assignments\n // Sort stability\n\n\n support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n // Always assume duplicates if they aren't passed to the comparison function\n\n support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n // Detached nodes confoundingly follow *each other*\n\n support.sortDetached = assert(function (el) {\n // Should return 1, but returns 4 (following)\n return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n }); // Support: IE<8\n // Prevent attribute/property \"interpolation\"\n // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n if (!assert(function (el) {\n el.innerHTML = \"\";\n return el.firstChild.getAttribute(\"href\") === \"#\";\n })) {\n addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n if (!isXML) {\n return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n }\n });\n } // Support: IE<9\n // Use defaultValue in place of getAttribute(\"value\")\n\n\n if (!support.attributes || !assert(function (el) {\n el.innerHTML = \"\";\n el.firstChild.setAttribute(\"value\", \"\");\n return el.firstChild.getAttribute(\"value\") === \"\";\n })) {\n addHandle(\"value\", function (elem, _name, isXML) {\n if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n return elem.defaultValue;\n }\n });\n } // Support: IE<9\n // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n if (!assert(function (el) {\n return el.getAttribute(\"disabled\") == null;\n })) {\n addHandle(booleans, function (elem, name, isXML) {\n var val;\n\n if (!isXML) {\n return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n }\n });\n }\n\n return Sizzle;\n }(window);\n\n jQuery.find = Sizzle;\n jQuery.expr = Sizzle.selectors; // Deprecated\n\n jQuery.expr[\":\"] = jQuery.expr.pseudos;\n jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n jQuery.text = Sizzle.getText;\n jQuery.isXMLDoc = Sizzle.isXML;\n jQuery.contains = Sizzle.contains;\n jQuery.escapeSelector = Sizzle.escape;\n\n var dir = function dir(elem, _dir, until) {\n var matched = [],\n truncate = until !== undefined;\n\n while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n if (elem.nodeType === 1) {\n if (truncate && jQuery(elem).is(until)) {\n break;\n }\n\n matched.push(elem);\n }\n }\n\n return matched;\n };\n\n var _siblings = function siblings(n, elem) {\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== elem) {\n matched.push(n);\n }\n }\n\n return matched;\n };\n\n var rneedsContext = jQuery.expr.match.needsContext;\n\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n }\n\n var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n function winnow(elements, qualifier, not) {\n if (isFunction(qualifier)) {\n return jQuery.grep(elements, function (elem, i) {\n return !!qualifier.call(elem, i, elem) !== not;\n });\n } // Single element\n\n\n if (qualifier.nodeType) {\n return jQuery.grep(elements, function (elem) {\n return elem === qualifier !== not;\n });\n } // Arraylike of elements (jQuery, arguments, Array)\n\n\n if (typeof qualifier !== \"string\") {\n return jQuery.grep(elements, function (elem) {\n return indexOf.call(qualifier, elem) > -1 !== not;\n });\n } // Filtered directly for both simple and complex selectors\n\n\n return jQuery.filter(qualifier, elements, not);\n }\n\n jQuery.filter = function (expr, elems, not) {\n var elem = elems[0];\n\n if (not) {\n expr = \":not(\" + expr + \")\";\n }\n\n if (elems.length === 1 && elem.nodeType === 1) {\n return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n }\n\n return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n return elem.nodeType === 1;\n }));\n };\n\n jQuery.fn.extend({\n find: function find(selector) {\n var i,\n ret,\n len = this.length,\n self = this;\n\n if (typeof selector !== \"string\") {\n return this.pushStack(jQuery(selector).filter(function () {\n for (i = 0; i < len; i++) {\n if (jQuery.contains(self[i], this)) {\n return true;\n }\n }\n }));\n }\n\n ret = this.pushStack([]);\n\n for (i = 0; i < len; i++) {\n jQuery.find(selector, self[i], ret);\n }\n\n return len > 1 ? jQuery.uniqueSort(ret) : ret;\n },\n filter: function filter(selector) {\n return this.pushStack(winnow(this, selector || [], false));\n },\n not: function not(selector) {\n return this.pushStack(winnow(this, selector || [], true));\n },\n is: function is(selector) {\n return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n }\n }); // Initialize a jQuery object\n // A central reference to the root jQuery(document)\n\n var rootjQuery,\n // A simple way to check for HTML strings\n // Prioritize #id over to avoid XSS via location.hash (#9521)\n // Strict HTML recognition (#11290: must start with <)\n // Shortcut simple #id case for speed\n rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n init = jQuery.fn.init = function (selector, context, root) {\n var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n if (!selector) {\n return this;\n } // Method init() accepts an alternate rootjQuery\n // so migrate can support jQuery.sub (gh-2101)\n\n\n root = root || rootjQuery; // Handle HTML strings\n\n if (typeof selector === \"string\") {\n if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n // Assume that strings that start and end with <> are HTML and skip the regex check\n match = [null, selector, null];\n } else {\n match = rquickExpr.exec(selector);\n } // Match html or make sure no context is specified for #id\n\n\n if (match && (match[1] || !context)) {\n // HANDLE: $(html) -> $(array)\n if (match[1]) {\n context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n // Intentionally let the error be thrown if parseHTML is not present\n\n jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n for (match in context) {\n // Properties of context are called as methods if possible\n if (isFunction(this[match])) {\n this[match](context[match]); // ...and otherwise set as attributes\n } else {\n this.attr(match, context[match]);\n }\n }\n }\n\n return this; // HANDLE: $(#id)\n } else {\n elem = document.getElementById(match[2]);\n\n if (elem) {\n // Inject the element directly into the jQuery object\n this[0] = elem;\n this.length = 1;\n }\n\n return this;\n } // HANDLE: $(expr, $(...))\n\n } else if (!context || context.jquery) {\n return (context || root).find(selector); // HANDLE: $(expr, context)\n // (which is just equivalent to: $(context).find(expr)\n } else {\n return this.constructor(context).find(selector);\n } // HANDLE: $(DOMElement)\n\n } else if (selector.nodeType) {\n this[0] = selector;\n this.length = 1;\n return this; // HANDLE: $(function)\n // Shortcut for document ready\n } else if (isFunction(selector)) {\n return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n selector(jQuery);\n }\n\n return jQuery.makeArray(selector, this);\n }; // Give the init function the jQuery prototype for later instantiation\n\n\n init.prototype = jQuery.fn; // Initialize central reference\n\n rootjQuery = jQuery(document);\n var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n // Methods guaranteed to produce a unique set when starting from a unique set\n guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n jQuery.fn.extend({\n has: function has(target) {\n var targets = jQuery(target, this),\n l = targets.length;\n return this.filter(function () {\n var i = 0;\n\n for (; i < l; i++) {\n if (jQuery.contains(this, targets[i])) {\n return true;\n }\n }\n });\n },\n closest: function closest(selectors, context) {\n var cur,\n i = 0,\n l = this.length,\n matched = [],\n targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n if (!rneedsContext.test(selectors)) {\n for (; i < l; i++) {\n for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n // Always skip document fragments\n if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n matched.push(cur);\n break;\n }\n }\n }\n }\n\n return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n },\n // Determine the position of an element within the set\n index: function index(elem) {\n // No argument, return index in parent\n if (!elem) {\n return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n } // Index in selector\n\n\n if (typeof elem === \"string\") {\n return indexOf.call(jQuery(elem), this[0]);\n } // Locate the position of the desired element\n\n\n return indexOf.call(this, // If it receives a jQuery object, the first element is used\n elem.jquery ? elem[0] : elem);\n },\n add: function add(selector, context) {\n return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n },\n addBack: function addBack(selector) {\n return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n }\n });\n\n function sibling(cur, dir) {\n while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n return cur;\n }\n\n jQuery.each({\n parent: function parent(elem) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function parents(elem) {\n return dir(elem, \"parentNode\");\n },\n parentsUntil: function parentsUntil(elem, _i, until) {\n return dir(elem, \"parentNode\", until);\n },\n next: function next(elem) {\n return sibling(elem, \"nextSibling\");\n },\n prev: function prev(elem) {\n return sibling(elem, \"previousSibling\");\n },\n nextAll: function nextAll(elem) {\n return dir(elem, \"nextSibling\");\n },\n prevAll: function prevAll(elem) {\n return dir(elem, \"previousSibling\");\n },\n nextUntil: function nextUntil(elem, _i, until) {\n return dir(elem, \"nextSibling\", until);\n },\n prevUntil: function prevUntil(elem, _i, until) {\n return dir(elem, \"previousSibling\", until);\n },\n siblings: function siblings(elem) {\n return _siblings((elem.parentNode || {}).firstChild, elem);\n },\n children: function children(elem) {\n return _siblings(elem.firstChild);\n },\n contents: function contents(elem) {\n if (elem.contentDocument != null && // Support: IE 11+\n // elements with no `data` attribute has an object\n // `contentDocument` with a `null` prototype.\n getProto(elem.contentDocument)) {\n return elem.contentDocument;\n } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n\n\n if (nodeName(elem, \"template\")) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge([], elem.childNodes);\n }\n }, function (name, fn) {\n jQuery.fn[name] = function (until, selector) {\n var matched = jQuery.map(this, fn, until);\n\n if (name.slice(-5) !== \"Until\") {\n selector = until;\n }\n\n if (selector && typeof selector === \"string\") {\n matched = jQuery.filter(selector, matched);\n }\n\n if (this.length > 1) {\n // Remove duplicates\n if (!guaranteedUnique[name]) {\n jQuery.uniqueSort(matched);\n } // Reverse order for parents* and prev-derivatives\n\n\n if (rparentsprev.test(name)) {\n matched.reverse();\n }\n }\n\n return this.pushStack(matched);\n };\n });\n var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n function createOptions(options) {\n var object = {};\n jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n object[flag] = true;\n });\n return object;\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 */\n\n\n jQuery.Callbacks = function (options) {\n // Convert options from String-formatted to Object-formatted if needed\n // (we check in cache first)\n options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n var // Flag to know if list is currently firing\n firing,\n // Last fire value for non-forgettable lists\n memory,\n // Flag to know if list was already fired\n _fired,\n // Flag to prevent firing\n _locked,\n // Actual callback list\n list = [],\n // Queue of execution data for repeatable lists\n queue = [],\n // Index of currently firing callback (modified by add/remove as needed)\n firingIndex = -1,\n // Fire callbacks\n fire = function fire() {\n // Enforce single-firing\n _locked = _locked || options.once; // Execute callbacks for all pending executions,\n // respecting firingIndex overrides and runtime changes\n\n _fired = firing = true;\n\n for (; queue.length; firingIndex = -1) {\n memory = queue.shift();\n\n while (++firingIndex < list.length) {\n // Run callback and check for early termination\n if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n // Jump to end and forget the data so .add doesn't re-fire\n firingIndex = list.length;\n memory = false;\n }\n }\n } // Forget the data if we're done with it\n\n\n if (!options.memory) {\n memory = false;\n }\n\n firing = false; // Clean up if we're done firing for good\n\n if (_locked) {\n // Keep an empty list if we have data for future add calls\n if (memory) {\n list = []; // Otherwise, this object is spent\n } else {\n list = \"\";\n }\n }\n },\n // Actual Callbacks object\n self = {\n // Add a callback or a collection of callbacks to the list\n add: function add() {\n if (list) {\n // If we have memory from a past run, we should fire after adding\n if (memory && !firing) {\n firingIndex = list.length - 1;\n queue.push(memory);\n }\n\n (function add(args) {\n jQuery.each(args, function (_, arg) {\n if (isFunction(arg)) {\n if (!options.unique || !self.has(arg)) {\n list.push(arg);\n }\n } else if (arg && arg.length && toType(arg) !== \"string\") {\n // Inspect recursively\n add(arg);\n }\n });\n })(arguments);\n\n if (memory && !firing) {\n fire();\n }\n }\n\n return this;\n },\n // Remove a callback from the list\n remove: function remove() {\n jQuery.each(arguments, function (_, arg) {\n var index;\n\n while ((index = jQuery.inArray(arg, list, index)) > -1) {\n list.splice(index, 1); // Handle firing indexes\n\n if (index <= firingIndex) {\n firingIndex--;\n }\n }\n });\n return this;\n },\n // Check if a given callback is in the list.\n // If no argument is given, return whether or not list has callbacks attached.\n has: function has(fn) {\n return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n },\n // Remove all callbacks from the list\n empty: function empty() {\n if (list) {\n list = [];\n }\n\n return this;\n },\n // Disable .fire and .add\n // Abort any current/pending executions\n // Clear all callbacks and values\n disable: function disable() {\n _locked = queue = [];\n list = memory = \"\";\n return this;\n },\n disabled: function disabled() {\n return !list;\n },\n // Disable .fire\n // Also disable .add unless we have memory (since it would have no effect)\n // Abort any pending executions\n lock: function lock() {\n _locked = queue = [];\n\n if (!memory && !firing) {\n list = memory = \"\";\n }\n\n return this;\n },\n locked: function locked() {\n return !!_locked;\n },\n // Call all callbacks with the given context and arguments\n fireWith: function fireWith(context, args) {\n if (!_locked) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n queue.push(args);\n\n if (!firing) {\n fire();\n }\n }\n\n return this;\n },\n // Call all the callbacks with the given arguments\n fire: function fire() {\n self.fireWith(this, arguments);\n return this;\n },\n // To know if the callbacks have already been called at least once\n fired: function fired() {\n return !!_fired;\n }\n };\n\n return self;\n };\n\n function Identity(v) {\n return v;\n }\n\n function Thrower(ex) {\n throw ex;\n }\n\n function adoptValue(value, resolve, reject, noValue) {\n var method;\n\n try {\n // Check for promise aspect first to privilege synchronous behavior\n if (value && isFunction(method = value.promise)) {\n method.call(value).done(resolve).fail(reject); // Other thenables\n } else if (value && isFunction(method = value.then)) {\n method.call(value, resolve, reject); // Other non-thenables\n } else {\n // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n // * false: [ value ].slice( 0 ) => resolve( value )\n // * true: [ value ].slice( 1 ) => resolve()\n resolve.apply(undefined, [value].slice(noValue));\n } // For Promises/A+, convert exceptions into rejections\n // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n // Deferred#then to conditionally suppress rejection.\n\n } catch (value) {\n // Support: Android 4.0 only\n // Strict mode functions invoked without .call/.apply get global-object context\n reject.apply(undefined, [value]);\n }\n }\n\n jQuery.extend({\n Deferred: function Deferred(func) {\n var tuples = [// action, add listener, callbacks,\n // ... .then handlers, argument index, [final state]\n [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n _state = \"pending\",\n _promise = {\n state: function state() {\n return _state;\n },\n always: function always() {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n \"catch\": function _catch(fn) {\n return _promise.then(null, fn);\n },\n // Keep pipe for back-compat\n pipe: function\n /* fnDone, fnFail, fnProgress */\n pipe() {\n var fns = arguments;\n return jQuery.Deferred(function (newDefer) {\n jQuery.each(tuples, function (_i, tuple) {\n // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n // deferred.done(function() { bind to newDefer or newDefer.resolve })\n // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n\n if (returned && isFunction(returned.promise)) {\n returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n } else {\n newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n }\n });\n });\n fns = null;\n }).promise();\n },\n then: function then(onFulfilled, onRejected, onProgress) {\n var maxDepth = 0;\n\n function resolve(depth, deferred, handler, special) {\n return function () {\n var that = this,\n args = arguments,\n mightThrow = function mightThrow() {\n var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n // https://promisesaplus.com/#point-59\n // Ignore double-resolution attempts\n\n if (depth < maxDepth) {\n return;\n }\n\n returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n // https://promisesaplus.com/#point-48\n\n if (returned === deferred.promise()) {\n throw new TypeError(\"Thenable self-resolution\");\n } // Support: Promises/A+ sections 2.3.3.1, 3.5\n // https://promisesaplus.com/#point-54\n // https://promisesaplus.com/#point-75\n // Retrieve `then` only once\n\n\n then = returned && ( // Support: Promises/A+ section 2.3.4\n // https://promisesaplus.com/#point-64\n // Only check objects and functions for thenability\n _typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n if (isFunction(then)) {\n // Special processors (notify) just wait for resolution\n if (special) {\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n } else {\n // ...and disregard older resolution values\n maxDepth++;\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n } // Handle all other returned values\n\n } else {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Identity) {\n that = undefined;\n args = [returned];\n } // Process the value(s)\n // Default process is resolve\n\n\n (special || deferred.resolveWith)(that, args);\n }\n },\n // Only normal processors (resolve) catch and reject exceptions\n process = special ? mightThrow : function () {\n try {\n mightThrow();\n } catch (e) {\n if (jQuery.Deferred.exceptionHook) {\n jQuery.Deferred.exceptionHook(e, process.stackTrace);\n } // Support: Promises/A+ section 2.3.3.3.4.1\n // https://promisesaplus.com/#point-61\n // Ignore post-resolution exceptions\n\n\n if (depth + 1 >= maxDepth) {\n // Only substitute handlers pass on context\n // and multiple values (non-spec behavior)\n if (handler !== Thrower) {\n that = undefined;\n args = [e];\n }\n\n deferred.rejectWith(that, args);\n }\n }\n }; // Support: Promises/A+ section 2.3.3.3.1\n // https://promisesaplus.com/#point-57\n // Re-resolve promises immediately to dodge false rejection from\n // subsequent errors\n\n\n if (depth) {\n process();\n } else {\n // Call an optional hook to record the stack, in case of exception\n // since it's otherwise lost when execution goes async\n if (jQuery.Deferred.getStackHook) {\n process.stackTrace = jQuery.Deferred.getStackHook();\n }\n\n window.setTimeout(process);\n }\n };\n }\n\n return jQuery.Deferred(function (newDefer) {\n // progress_handlers.add( ... )\n tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n }).promise();\n },\n // Get a promise for this deferred\n // If obj is provided, the promise aspect is added to the object\n promise: function promise(obj) {\n return obj != null ? jQuery.extend(obj, _promise) : _promise;\n }\n },\n deferred = {}; // Add list-specific methods\n\n jQuery.each(tuples, function (i, tuple) {\n var list = tuple[2],\n stateString = tuple[5]; // promise.progress = list.add\n // promise.done = list.add\n // promise.fail = list.add\n\n _promise[tuple[1]] = list.add; // Handle state\n\n if (stateString) {\n list.add(function () {\n // state = \"resolved\" (i.e., fulfilled)\n // state = \"rejected\"\n _state = stateString;\n }, // rejected_callbacks.disable\n // fulfilled_callbacks.disable\n tuples[3 - i][2].disable, // rejected_handlers.disable\n // fulfilled_handlers.disable\n tuples[3 - i][3].disable, // progress_callbacks.lock\n tuples[0][2].lock, // progress_handlers.lock\n tuples[0][3].lock);\n } // progress_handlers.fire\n // fulfilled_handlers.fire\n // rejected_handlers.fire\n\n\n list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n // deferred.resolve = function() { deferred.resolveWith(...) }\n // deferred.reject = function() { deferred.rejectWith(...) }\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n return this;\n }; // deferred.notifyWith = list.fireWith\n // deferred.resolveWith = list.fireWith\n // deferred.rejectWith = list.fireWith\n\n\n deferred[tuple[0] + \"With\"] = list.fireWith;\n }); // Make the deferred a promise\n\n _promise.promise(deferred); // Call given func if any\n\n\n if (func) {\n func.call(deferred, deferred);\n } // All done!\n\n\n return deferred;\n },\n // Deferred helper\n when: function when(singleValue) {\n var // count of uncompleted subordinates\n remaining = arguments.length,\n // count of unprocessed arguments\n i = remaining,\n // subordinate fulfillment data\n resolveContexts = Array(i),\n resolveValues = _slice.call(arguments),\n // the primary Deferred\n primary = jQuery.Deferred(),\n // subordinate callback factory\n updateFunc = function updateFunc(i) {\n return function (value) {\n resolveContexts[i] = this;\n resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n if (! --remaining) {\n primary.resolveWith(resolveContexts, resolveValues);\n }\n };\n }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n if (remaining <= 1) {\n adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n return primary.then();\n }\n } // Multiple arguments are aggregated like Promise.all array elements\n\n\n while (i--) {\n adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n }\n\n return primary.promise();\n }\n }); // These usually indicate a programmer mistake during development,\n // warn about them ASAP rather than swallowing them by default.\n\n var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n jQuery.Deferred.exceptionHook = function (error, stack) {\n // Support: IE 8 - 9 only\n // Console exists when dev tools are open, which can happen at any time\n if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n }\n };\n\n jQuery.readyException = function (error) {\n window.setTimeout(function () {\n throw error;\n });\n }; // The deferred used on DOM ready\n\n\n var readyList = jQuery.Deferred();\n\n jQuery.fn.ready = function (fn) {\n readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n // happens at the time of error handling instead of callback\n // registration.\n .catch(function (error) {\n jQuery.readyException(error);\n });\n return this;\n };\n\n jQuery.extend({\n // Is the DOM ready to be used? Set to true once it occurs.\n isReady: false,\n // A counter to track how many items to wait for before\n // the ready event fires. See #6781\n readyWait: 1,\n // Handle when the DOM is ready\n ready: function ready(wait) {\n // Abort if there are pending holds or we're already ready\n if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n return;\n } // Remember that the DOM is ready\n\n\n jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n if (wait !== true && --jQuery.readyWait > 0) {\n return;\n } // If there are functions bound, to execute\n\n\n readyList.resolveWith(document, [jQuery]);\n }\n });\n jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n function completed() {\n document.removeEventListener(\"DOMContentLoaded\", completed);\n window.removeEventListener(\"load\", completed);\n jQuery.ready();\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\n\n\n if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n // Handle it asynchronously to allow scripts the opportunity to delay ready\n window.setTimeout(jQuery.ready);\n } else {\n // Use the handy event callback\n document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n window.addEventListener(\"load\", completed);\n } // Multifunctional method to get and set values of a collection\n // The value/s can optionally be executed if it's a function\n\n\n var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n var i = 0,\n len = elems.length,\n bulk = key == null; // Sets many values\n\n if (toType(key) === \"object\") {\n chainable = true;\n\n for (i in key) {\n access(elems, fn, i, key[i], true, emptyGet, raw);\n } // Sets one value\n\n } else if (value !== undefined) {\n chainable = true;\n\n if (!isFunction(value)) {\n raw = true;\n }\n\n if (bulk) {\n // Bulk operations run against the entire set\n if (raw) {\n fn.call(elems, value);\n fn = null; // ...except when executing function values\n } else {\n bulk = fn;\n\n fn = function fn(elem, _key, value) {\n return bulk.call(jQuery(elem), value);\n };\n }\n }\n\n if (fn) {\n for (; i < len; i++) {\n fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n }\n }\n }\n\n if (chainable) {\n return elems;\n } // Gets\n\n\n if (bulk) {\n return fn.call(elems);\n }\n\n return len ? fn(elems[0], key) : emptyGet;\n }; // Matches dashed string for camelizing\n\n\n var rmsPrefix = /^-ms-/,\n rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n function fcamelCase(_all, letter) {\n return letter.toUpperCase();\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)\n\n\n function camelCase(string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n }\n\n var acceptData = function acceptData(owner) {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n };\n\n function Data() {\n this.expando = jQuery.expando + Data.uid++;\n }\n\n Data.uid = 1;\n Data.prototype = {\n cache: function cache(owner) {\n // Check if the owner object already has a cache\n var value = owner[this.expando]; // If not, create one\n\n if (!value) {\n value = {}; // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return an empty object.\n\n if (acceptData(owner)) {\n // If it is a node unlikely to be stringify-ed or looped over\n // use plain assignment\n if (owner.nodeType) {\n owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n // configurable must be true to allow the property to be\n // deleted when data is removed\n } else {\n Object.defineProperty(owner, this.expando, {\n value: value,\n configurable: true\n });\n }\n }\n }\n\n return value;\n },\n set: function set(owner, data, value) {\n var prop,\n cache = this.cache(owner); // Handle: [ owner, key, value ] args\n // Always use camelCase key (gh-2257)\n\n if (typeof data === \"string\") {\n cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n } else {\n // Copy the properties one-by-one to the cache object\n for (prop in data) {\n cache[camelCase(prop)] = data[prop];\n }\n }\n\n return cache;\n },\n get: function get(owner, key) {\n return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n owner[this.expando] && owner[this.expando][camelCase(key)];\n },\n access: function access(owner, key, value) {\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n return this.get(owner, key);\n } // When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n\n\n this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n\n return value !== undefined ? value : key;\n },\n remove: function remove(owner, key) {\n var i,\n cache = owner[this.expando];\n\n if (cache === undefined) {\n return;\n }\n\n if (key !== undefined) {\n // Support array or space separated string of keys\n if (Array.isArray(key)) {\n // If key is an array of keys...\n // We always set camelCase keys, so remove that.\n key = key.map(camelCase);\n } else {\n key = camelCase(key); // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n\n key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n }\n\n i = key.length;\n\n while (i--) {\n delete cache[key[i]];\n }\n } // Remove the expando if there's no more data\n\n\n if (key === undefined || jQuery.isEmptyObject(cache)) {\n // Support: Chrome <=35 - 45\n // Webkit & Blink performance suffers when deleting properties\n // from DOM nodes, so set to undefined instead\n // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n if (owner.nodeType) {\n owner[this.expando] = undefined;\n } else {\n delete owner[this.expando];\n }\n }\n },\n hasData: function hasData(owner) {\n var cache = owner[this.expando];\n return cache !== undefined && !jQuery.isEmptyObject(cache);\n }\n };\n var dataPriv = new Data();\n var dataUser = new Data(); //\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\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n rmultiDash = /[A-Z]/g;\n\n function getData(data) {\n if (data === \"true\") {\n return true;\n }\n\n if (data === \"false\") {\n return false;\n }\n\n if (data === \"null\") {\n return null;\n } // Only convert to a number if it doesn't change the string\n\n\n if (data === +data + \"\") {\n return +data;\n }\n\n if (rbrace.test(data)) {\n return JSON.parse(data);\n }\n\n return data;\n }\n\n function dataAttr(elem, key, data) {\n var name; // If nothing was found internally, try to fetch any\n // data from the HTML5 data-* attribute\n\n if (data === undefined && elem.nodeType === 1) {\n name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n data = elem.getAttribute(name);\n\n if (typeof data === \"string\") {\n try {\n data = getData(data);\n } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n dataUser.set(elem, key, data);\n } else {\n data = undefined;\n }\n }\n\n return data;\n }\n\n jQuery.extend({\n hasData: function hasData(elem) {\n return dataUser.hasData(elem) || dataPriv.hasData(elem);\n },\n data: function data(elem, name, _data) {\n return dataUser.access(elem, name, _data);\n },\n removeData: function removeData(elem, name) {\n dataUser.remove(elem, name);\n },\n // TODO: Now that all calls to _data and _removeData have been replaced\n // with direct calls to dataPriv methods, these can be deprecated.\n _data: function _data(elem, name, data) {\n return dataPriv.access(elem, name, data);\n },\n _removeData: function _removeData(elem, name) {\n dataPriv.remove(elem, name);\n }\n });\n jQuery.fn.extend({\n data: function data(key, value) {\n var i,\n name,\n data,\n elem = this[0],\n attrs = elem && elem.attributes; // Gets all values\n\n if (key === undefined) {\n if (this.length) {\n data = dataUser.get(elem);\n\n if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n i = attrs.length;\n\n while (i--) {\n // Support: IE 11 only\n // The attrs elements can be null (#14894)\n if (attrs[i]) {\n name = attrs[i].name;\n\n if (name.indexOf(\"data-\") === 0) {\n name = camelCase(name.slice(5));\n dataAttr(elem, name, data[name]);\n }\n }\n }\n\n dataPriv.set(elem, \"hasDataAttrs\", true);\n }\n }\n\n return data;\n } // Sets multiple values\n\n\n if (_typeof(key) === \"object\") {\n return this.each(function () {\n dataUser.set(this, key);\n });\n }\n\n return access(this, function (value) {\n var data; // The calling jQuery object (element matches) is not empty\n // (and therefore has an element appears at this[ 0 ]) and the\n // `value` parameter was not undefined. An empty jQuery object\n // will result in `undefined` for elem = this[ 0 ] which will\n // throw an exception if an attempt to read a data cache is made.\n\n if (elem && value === undefined) {\n // Attempt to get data from the cache\n // The key will always be camelCased in Data\n data = dataUser.get(elem, key);\n\n if (data !== undefined) {\n return data;\n } // Attempt to \"discover\" the data in\n // HTML5 custom data-* attrs\n\n\n data = dataAttr(elem, key);\n\n if (data !== undefined) {\n return data;\n } // We tried really hard, but the data doesn't exist.\n\n\n return;\n } // Set the data...\n\n\n this.each(function () {\n // We always store the camelCased key\n dataUser.set(this, key, value);\n });\n }, null, value, arguments.length > 1, null, true);\n },\n removeData: function removeData(key) {\n return this.each(function () {\n dataUser.remove(this, key);\n });\n }\n });\n jQuery.extend({\n queue: function queue(elem, type, data) {\n var queue;\n\n if (elem) {\n type = (type || \"fx\") + \"queue\";\n queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n if (data) {\n if (!queue || Array.isArray(data)) {\n queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n } else {\n queue.push(data);\n }\n }\n\n return queue || [];\n }\n },\n dequeue: function dequeue(elem, type) {\n type = type || \"fx\";\n\n var queue = jQuery.queue(elem, type),\n startLength = queue.length,\n fn = queue.shift(),\n hooks = jQuery._queueHooks(elem, type),\n next = function next() {\n jQuery.dequeue(elem, type);\n }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n if (fn === \"inprogress\") {\n fn = queue.shift();\n startLength--;\n }\n\n if (fn) {\n // Add a progress sentinel to prevent the fx queue from being\n // automatically dequeued\n if (type === \"fx\") {\n queue.unshift(\"inprogress\");\n } // Clear up the last queue stop function\n\n\n delete hooks.stop;\n fn.call(elem, next, hooks);\n }\n\n if (!startLength && hooks) {\n hooks.empty.fire();\n }\n },\n // Not public - generate a queueHooks object, or return the current one\n _queueHooks: function _queueHooks(elem, type) {\n var key = type + \"queueHooks\";\n return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n empty: jQuery.Callbacks(\"once memory\").add(function () {\n dataPriv.remove(elem, [type + \"queue\", key]);\n })\n });\n }\n });\n jQuery.fn.extend({\n queue: function queue(type, data) {\n var setter = 2;\n\n if (typeof type !== \"string\") {\n data = type;\n type = \"fx\";\n setter--;\n }\n\n if (arguments.length < setter) {\n return jQuery.queue(this[0], type);\n }\n\n return data === undefined ? this : this.each(function () {\n var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n jQuery._queueHooks(this, type);\n\n if (type === \"fx\" && queue[0] !== \"inprogress\") {\n jQuery.dequeue(this, type);\n }\n });\n },\n dequeue: function dequeue(type) {\n return this.each(function () {\n jQuery.dequeue(this, type);\n });\n },\n clearQueue: function clearQueue(type) {\n return this.queue(type || \"fx\", []);\n },\n // Get a promise resolved when queues of a certain type\n // are emptied (fx is the type by default)\n promise: function promise(type, obj) {\n var tmp,\n count = 1,\n defer = jQuery.Deferred(),\n elements = this,\n i = this.length,\n resolve = function resolve() {\n if (! --count) {\n defer.resolveWith(elements, [elements]);\n }\n };\n\n if (typeof type !== \"string\") {\n obj = type;\n type = undefined;\n }\n\n type = type || \"fx\";\n\n while (i--) {\n tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n if (tmp && tmp.empty) {\n count++;\n tmp.empty.add(resolve);\n }\n }\n\n resolve();\n return defer.promise(obj);\n }\n });\n var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n var documentElement = document.documentElement;\n\n var isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem);\n },\n composed = {\n composed: true\n }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n // Check attachment across shadow DOM boundaries when possible (gh-3504)\n // Support: iOS 10.0-10.2 only\n // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n // leading to errors. We need to check for `getRootNode`.\n\n\n if (documentElement.getRootNode) {\n isAttached = function isAttached(elem) {\n return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n };\n }\n\n var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n // isHiddenWithinTree might be called from jQuery#filter function;\n // in that case, element will be second argument\n elem = el || elem; // Inline style trumps all\n\n return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n // Support: Firefox <=43 - 45\n // Disconnected elements can have computed display: none, so first confirm that elem is\n // in the document.\n isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n };\n\n function adjustCSS(elem, prop, valueParts, tween) {\n var adjusted,\n scale,\n maxIterations = 20,\n currentValue = tween ? function () {\n return tween.cur();\n } : function () {\n return jQuery.css(elem, prop, \"\");\n },\n initial = currentValue(),\n unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n // Starting value computation is required for potential unit mismatches\n initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n if (initialInUnit && initialInUnit[3] !== unit) {\n // Support: Firefox <=54\n // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n initial = initial / 2; // Trust units reported by jQuery.css\n\n unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n initialInUnit = +initial || 1;\n\n while (maxIterations--) {\n // Evaluate and update our best guess (doubling guesses that zero out).\n // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n jQuery.style(elem, prop, initialInUnit + unit);\n\n if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n maxIterations = 0;\n }\n\n initialInUnit = initialInUnit / scale;\n }\n\n initialInUnit = initialInUnit * 2;\n jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n valueParts = valueParts || [];\n }\n\n if (valueParts) {\n initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n if (tween) {\n tween.unit = unit;\n tween.start = initialInUnit;\n tween.end = adjusted;\n }\n }\n\n return adjusted;\n }\n\n var defaultDisplayMap = {};\n\n function getDefaultDisplay(elem) {\n var temp,\n doc = elem.ownerDocument,\n nodeName = elem.nodeName,\n display = defaultDisplayMap[nodeName];\n\n if (display) {\n return display;\n }\n\n temp = doc.body.appendChild(doc.createElement(nodeName));\n display = jQuery.css(temp, \"display\");\n temp.parentNode.removeChild(temp);\n\n if (display === \"none\") {\n display = \"block\";\n }\n\n defaultDisplayMap[nodeName] = display;\n return display;\n }\n\n function showHide(elements, show) {\n var display,\n elem,\n values = [],\n index = 0,\n length = elements.length; // Determine new display value for elements that need to change\n\n for (; index < length; index++) {\n elem = elements[index];\n\n if (!elem.style) {\n continue;\n }\n\n display = elem.style.display;\n\n if (show) {\n // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n // check is required in this first loop unless we have a nonempty display value (either\n // inline or about-to-be-restored)\n if (display === \"none\") {\n values[index] = dataPriv.get(elem, \"display\") || null;\n\n if (!values[index]) {\n elem.style.display = \"\";\n }\n }\n\n if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n values[index] = getDefaultDisplay(elem);\n }\n } else {\n if (display !== \"none\") {\n values[index] = \"none\"; // Remember what we're overwriting\n\n dataPriv.set(elem, \"display\", display);\n }\n }\n } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n for (index = 0; index < length; index++) {\n if (values[index] != null) {\n elements[index].style.display = values[index];\n }\n }\n\n return elements;\n }\n\n jQuery.fn.extend({\n show: function show() {\n return showHide(this, true);\n },\n hide: function hide() {\n return showHide(this);\n },\n toggle: function toggle(state) {\n if (typeof state === \"boolean\") {\n return state ? this.show() : this.hide();\n }\n\n return this.each(function () {\n if (isHiddenWithinTree(this)) {\n jQuery(this).show();\n } else {\n jQuery(this).hide();\n }\n });\n }\n });\n var rcheckableType = /^(?:checkbox|radio)$/i;\n var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n (function () {\n var fragment = document.createDocumentFragment(),\n div = fragment.appendChild(document.createElement(\"div\")),\n input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n // Check state lost if the name is set (#11217)\n // Support: Windows Web Apps (WWA)\n // `name` and `type` must use .setAttribute for WWA (#14901)\n\n input.setAttribute(\"type\", \"radio\");\n input.setAttribute(\"checked\", \"checked\");\n input.setAttribute(\"name\", \"t\");\n div.appendChild(input); // Support: Android <=4.1 only\n // Older WebKit doesn't clone checked state correctly in fragments\n\n support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n div.innerHTML = \"\";\n support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only\n // IE <=9 replaces \";\n support.option = !!div.lastChild;\n })(); // We have to close these tags to support XHTML (#13200)\n\n\n var wrapMap = {\n // XHTML parsers do not magically insert elements in the\n // same way that tag soup parsers do. So we cannot shorten\n // this by omitting or other required elements.\n thead: [1, \"\", \"
\"],\n col: [2, \"\", \"
\"],\n tr: [2, \"\", \"
\"],\n td: [3, \"\", \"
\"],\n _default: [0, \"\", \"\"]\n };\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td; // Support: IE <=9 only\n\n if (!support.option) {\n wrapMap.optgroup = wrapMap.option = [1, \"\"];\n }\n\n function getAll(context, tag) {\n // Support: IE <=9 - 11 only\n // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n var ret;\n\n if (typeof context.getElementsByTagName !== \"undefined\") {\n ret = context.getElementsByTagName(tag || \"*\");\n } else if (typeof context.querySelectorAll !== \"undefined\") {\n ret = context.querySelectorAll(tag || \"*\");\n } else {\n ret = [];\n }\n\n if (tag === undefined || tag && nodeName(context, tag)) {\n return jQuery.merge([context], ret);\n }\n\n return ret;\n } // Mark scripts as having already been evaluated\n\n\n function setGlobalEval(elems, refElements) {\n var i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n }\n }\n\n var rhtml = /<|&#?\\w+;/;\n\n function buildFragment(elems, context, scripts, selection, ignored) {\n var elem,\n tmp,\n tag,\n wrap,\n attached,\n j,\n fragment = context.createDocumentFragment(),\n nodes = [],\n i = 0,\n l = elems.length;\n\n for (; i < l; i++) {\n elem = elems[i];\n\n if (elem || elem === 0) {\n // Add nodes directly\n if (toType(elem) === \"object\") {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n } else if (!rhtml.test(elem)) {\n nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n } else {\n tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n wrap = wrapMap[tag] || wrapMap._default;\n tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n j = wrap[0];\n\n while (j--) {\n tmp = tmp.lastChild;\n } // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n\n\n jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n tmp.textContent = \"\";\n }\n }\n } // Remove wrapper from fragment\n\n\n fragment.textContent = \"\";\n i = 0;\n\n while (elem = nodes[i++]) {\n // Skip elements already in the context collection (trac-4087)\n if (selection && jQuery.inArray(elem, selection) > -1) {\n if (ignored) {\n ignored.push(elem);\n }\n\n continue;\n }\n\n attached = isAttached(elem); // Append to fragment\n\n tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n if (attached) {\n setGlobalEval(tmp);\n } // Capture executables\n\n\n if (scripts) {\n j = 0;\n\n while (elem = tmp[j++]) {\n if (rscriptType.test(elem.type || \"\")) {\n scripts.push(elem);\n }\n }\n }\n }\n\n return fragment;\n }\n\n var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\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).\n\n\n function expectSync(elem, type) {\n return elem === safeActiveElement() === (type === \"focus\");\n } // Support: IE <=9 only\n // Accessing document.activeElement can throw unexpectedly\n // https://bugs.jquery.com/ticket/13393\n\n\n function safeActiveElement() {\n try {\n return document.activeElement;\n } catch (err) {}\n }\n\n function _on(elem, types, selector, data, fn, one) {\n var origFn, type; // Types can be a map of types/handlers\n\n if (_typeof(types) === \"object\") {\n // ( types-Object, selector, data )\n if (typeof selector !== \"string\") {\n // ( types-Object, data )\n data = data || selector;\n selector = undefined;\n }\n\n for (type in types) {\n _on(elem, type, selector, data, types[type], one);\n }\n\n return elem;\n }\n\n if (data == null && fn == null) {\n // ( types, fn )\n fn = selector;\n data = selector = undefined;\n } else if (fn == null) {\n if (typeof selector === \"string\") {\n // ( types, selector, fn )\n fn = data;\n data = undefined;\n } else {\n // ( types, data, fn )\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n\n if (fn === false) {\n fn = returnFalse;\n } else if (!fn) {\n return elem;\n }\n\n if (one === 1) {\n origFn = fn;\n\n fn = function fn(event) {\n // Can use an empty set, since event contains the info\n jQuery().off(event);\n return origFn.apply(this, arguments);\n }; // Use same guid so caller can remove using origFn\n\n\n fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n }\n\n return elem.each(function () {\n jQuery.event.add(this, types, fn, data, selector);\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 */\n\n\n jQuery.event = {\n global: {},\n add: function add(elem, types, handler, data, selector) {\n var handleObjIn,\n eventHandle,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.get(elem); // Only attach events to objects that accept data\n\n if (!acceptData(elem)) {\n return;\n } // Caller can pass in an object of custom data in lieu of the handler\n\n\n if (handler.handler) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n } // Ensure that invalid selectors throw exceptions at attach time\n // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n if (selector) {\n jQuery.find.matchesSelector(documentElement, selector);\n } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n if (!handler.guid) {\n handler.guid = jQuery.guid++;\n } // Init the element's event structure and main handler, if this is the first\n\n\n if (!(events = elemData.events)) {\n events = elemData.events = Object.create(null);\n }\n\n if (!(eventHandle = elemData.handle)) {\n eventHandle = elemData.handle = function (e) {\n // Discard the second event of a jQuery.event.trigger() and\n // when an event is called after a page has unloaded\n return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n };\n } // Handle multiple events separated by a space\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n if (!type) {\n continue;\n } // If event changes its type, use the special event handlers for the changed type\n\n\n special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n handleObj = jQuery.extend({\n type: type,\n origType: origType,\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n namespace: namespaces.join(\".\")\n }, handleObjIn); // Init the event handler queue if we're the first\n\n if (!(handlers = events[type])) {\n handlers = events[type] = [];\n handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n if (elem.addEventListener) {\n elem.addEventListener(type, eventHandle);\n }\n }\n }\n\n if (special.add) {\n special.add.call(elem, handleObj);\n\n if (!handleObj.handler.guid) {\n handleObj.handler.guid = handler.guid;\n }\n } // Add to the element's handler list, delegates in front\n\n\n if (selector) {\n handlers.splice(handlers.delegateCount++, 0, handleObj);\n } else {\n handlers.push(handleObj);\n } // Keep track of which events have ever been used, for event optimization\n\n\n jQuery.event.global[type] = true;\n }\n },\n // Detach an event or set of events from an element\n remove: function remove(elem, types, handler, selector, mappedTypes) {\n var j,\n origCount,\n tmp,\n events,\n t,\n handleObj,\n special,\n handlers,\n type,\n namespaces,\n origType,\n elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n if (!elemData || !(events = elemData.events)) {\n return;\n } // Once for each type.namespace in types; type may be omitted\n\n\n types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n t = types.length;\n\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n if (!type) {\n for (type in events) {\n jQuery.event.remove(elem, type + types[t], handler, selector, true);\n }\n\n continue;\n }\n\n special = jQuery.event.special[type] || {};\n type = (selector ? special.delegateType : special.bindType) || type;\n handlers = events[type] || [];\n tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n origCount = j = handlers.length;\n\n while (j--) {\n handleObj = handlers[j];\n\n if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n handlers.splice(j, 1);\n\n if (handleObj.selector) {\n handlers.delegateCount--;\n }\n\n if (special.remove) {\n special.remove.call(elem, handleObj);\n }\n }\n } // Remove generic event handler if we removed something and no more handlers exist\n // (avoids potential for endless recursion during removal of special event handlers)\n\n\n if (origCount && !handlers.length) {\n if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n jQuery.removeEvent(elem, type, elemData.handle);\n }\n\n delete events[type];\n }\n } // Remove data and the expando if it's no longer used\n\n\n if (jQuery.isEmptyObject(events)) {\n dataPriv.remove(elem, \"handle events\");\n }\n },\n dispatch: function dispatch(nativeEvent) {\n var i,\n j,\n ret,\n matched,\n handleObj,\n handlerQueue,\n args = new Array(arguments.length),\n // Make a writable jQuery.Event from the native event object\n event = jQuery.event.fix(nativeEvent),\n handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n args[0] = event;\n\n for (i = 1; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n\n event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n return;\n } // Determine handlers\n\n\n handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n i = 0;\n\n while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n event.currentTarget = matched.elem;\n j = 0;\n\n while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n // If the event is namespaced, then each handler is only invoked if it is\n // specially universal or its namespaces are a superset of the event's.\n if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n if (ret !== undefined) {\n if ((event.result = ret) === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n } // Call the postDispatch hook for the mapped type\n\n\n if (special.postDispatch) {\n special.postDispatch.call(this, event);\n }\n\n return event.result;\n },\n handlers: function handlers(event, _handlers) {\n var i,\n handleObj,\n sel,\n matchedHandlers,\n matchedSelectors,\n handlerQueue = [],\n delegateCount = _handlers.delegateCount,\n cur = event.target; // Find delegate handlers\n\n if (delegateCount && // Support: IE <=9\n // Black-hole SVG instance trees (trac-13180)\n cur.nodeType && // Support: Firefox <=42\n // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n // Support: IE 11 only\n // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n !(event.type === \"click\" && event.button >= 1)) {\n for (; cur !== this; cur = cur.parentNode || this) {\n // Don't check non-elements (#13208)\n // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n matchedHandlers = [];\n matchedSelectors = {};\n\n for (i = 0; i < delegateCount; i++) {\n handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n sel = handleObj.selector + \" \";\n\n if (matchedSelectors[sel] === undefined) {\n matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n }\n\n if (matchedSelectors[sel]) {\n matchedHandlers.push(handleObj);\n }\n }\n\n if (matchedHandlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: matchedHandlers\n });\n }\n }\n }\n } // Add the remaining (directly-bound) handlers\n\n\n cur = this;\n\n if (delegateCount < _handlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: _handlers.slice(delegateCount)\n });\n }\n\n return handlerQueue;\n },\n addProp: function addProp(name, hook) {\n Object.defineProperty(jQuery.Event.prototype, name, {\n enumerable: true,\n configurable: true,\n get: isFunction(hook) ? function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n } : function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n set: function set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n });\n }\n });\n },\n fix: function fix(originalEvent) {\n return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n },\n special: {\n load: {\n // Prevent triggered image.load events from bubbling to window.load\n noBubble: true\n },\n click: {\n // Utilize native event to ensure correct state for checkable inputs\n setup: function setup(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Claim the first handler\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n // dataPriv.set( el, \"click\", ... )\n leverageNative(el, \"click\", returnTrue);\n } // Return false to allow normal processing in the caller\n\n\n return false;\n },\n trigger: function trigger(data) {\n // For mutual compressibility with _default, replace `this` access with a local var.\n // `|| data` is dead code meant only to preserve the variable through minification.\n var el = this || data; // Force setup before triggering a click\n\n if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n leverageNative(el, \"click\");\n } // Return non-false to allow normal event-path propagation\n\n\n return true;\n },\n // For cross-browser consistency, suppress native .click() on links\n // Also prevent it if we're currently inside a leveraged native-event stack\n _default: function _default(event) {\n var target = event.target;\n return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n }\n },\n beforeunload: {\n postDispatch: function postDispatch(event) {\n // Support: Firefox 20+\n // Firefox doesn't alert if the returnValue field is not set.\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n }\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.\n\n function leverageNative(el, type, expectSync) {\n // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n if (!expectSync) {\n if (dataPriv.get(el, type) === undefined) {\n jQuery.event.add(el, type, returnTrue);\n }\n\n return;\n } // Register the controller as a special universal handler for all event namespaces\n\n\n dataPriv.set(el, type, false);\n jQuery.event.add(el, type, {\n namespace: false,\n handler: function handler(event) {\n var notAsync,\n result,\n saved = dataPriv.get(this, type);\n\n if (event.isTrigger & 1 && this[type]) {\n // Interrupt processing of the outer synthetic .trigger()ed event\n // Saved data should be false in such cases, but might be a leftover capture object\n // from an async native handler (gh-4350)\n if (!saved.length) {\n // Store arguments for use when handling the inner native event\n // There will always be at least one argument (an event object), so this array\n // will not be confused with a leftover capture object.\n saved = _slice.call(arguments);\n dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n // Support: IE <=9 - 11+\n // focus() and blur() are asynchronous\n\n notAsync = expectSync(this, type);\n this[type]();\n result = dataPriv.get(this, type);\n\n if (saved !== result || notAsync) {\n dataPriv.set(this, type, false);\n } else {\n result = {};\n }\n\n if (saved !== result) {\n // Cancel the outer synthetic event\n event.stopImmediatePropagation();\n event.preventDefault(); // Support: Chrome 86+\n // In Chrome, if an element having a focusout handler is blurred by\n // clicking outside of it, it invokes the handler synchronously. If\n // that handler calls `.remove()` on the element, the data is cleared,\n // leaving `result` undefined. We need to guard against this.\n\n return result && result.value;\n } // If this is an inner synthetic event for an event with a bubbling surrogate\n // (focus or blur), assume that the surrogate already propagated from triggering the\n // native event and prevent that from happening again here.\n // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n // less bad than duplication.\n\n } else if ((jQuery.event.special[type] || {}).delegateType) {\n event.stopPropagation();\n } // If this is a native event triggered above, everything is now in order\n // Fire an inner synthetic event with the original arguments\n\n } else if (saved.length) {\n // ...and capture the result\n dataPriv.set(this, type, {\n value: jQuery.event.trigger( // Support: IE <=9 - 11+\n // Extend with the prototype to reset the above stopImmediatePropagation()\n jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n }); // Abort handling of the native event\n\n event.stopImmediatePropagation();\n }\n }\n });\n }\n\n jQuery.removeEvent = function (elem, type, handle) {\n // This \"if\" is needed for plain objects\n if (elem.removeEventListener) {\n elem.removeEventListener(type, handle);\n }\n };\n\n jQuery.Event = function (src, props) {\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof jQuery.Event)) {\n return new jQuery.Event(src, props);\n } // Event object\n\n\n if (src && src.type) {\n this.originalEvent = src;\n this.type = src.type; // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n\n this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n // Support: Safari <=6 - 7 only\n // Target should not be a text node (#504, #13143)\n\n this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n this.currentTarget = src.currentTarget;\n this.relatedTarget = src.relatedTarget; // Event type\n } else {\n this.type = src;\n } // Put explicitly provided properties onto the event object\n\n\n if (props) {\n jQuery.extend(this, props);\n } // Create a timestamp if incoming event doesn't have one\n\n\n this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n this[jQuery.expando] = true;\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\n\n\n jQuery.Event.prototype = {\n constructor: jQuery.Event,\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse,\n isSimulated: false,\n preventDefault: function preventDefault() {\n var e = this.originalEvent;\n this.isDefaultPrevented = returnTrue;\n\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n var e = this.originalEvent;\n this.isPropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n var e = this.originalEvent;\n this.isImmediatePropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n\n this.stopPropagation();\n }\n }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n jQuery.each({\n altKey: true,\n bubbles: true,\n cancelable: true,\n changedTouches: true,\n ctrlKey: true,\n detail: true,\n eventPhase: true,\n metaKey: true,\n pageX: true,\n pageY: true,\n shiftKey: true,\n view: true,\n \"char\": true,\n code: true,\n charCode: true,\n key: true,\n keyCode: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pointerId: true,\n pointerType: true,\n screenX: true,\n screenY: true,\n targetTouches: true,\n toElement: true,\n touches: true,\n which: true\n }, jQuery.event.addProp);\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (type, delegateType) {\n jQuery.event.special[type] = {\n // Utilize native event if possible so blur/focus sequence is correct\n setup: function setup() {\n // Claim the first handler\n // dataPriv.set( this, \"focus\", ... )\n // dataPriv.set( this, \"blur\", ... )\n leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n return false;\n },\n trigger: function trigger() {\n // Force setup before trigger\n leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n return true;\n },\n // Suppress native focus or blur as it's already being fired\n // in leverageNative.\n _default: function _default() {\n return true;\n },\n delegateType: delegateType\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).\n\n jQuery.each({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\",\n pointerenter: \"pointerover\",\n pointerleave: \"pointerout\"\n }, function (orig, fix) {\n jQuery.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function handle(event) {\n var ret,\n target = this,\n related = event.relatedTarget,\n handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n // NB: No relatedTarget if the mouse left/entered the browser window\n\n if (!related || related !== target && !jQuery.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n\n return ret;\n }\n };\n });\n jQuery.fn.extend({\n on: function on(types, selector, data, fn) {\n return _on(this, types, selector, data, fn);\n },\n one: function one(types, selector, data, fn) {\n return _on(this, types, selector, data, fn, 1);\n },\n off: function off(types, selector, fn) {\n var handleObj, type;\n\n if (types && types.preventDefault && types.handleObj) {\n // ( event ) dispatched jQuery.Event\n handleObj = types.handleObj;\n jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n return this;\n }\n\n if (_typeof(types) === \"object\") {\n // ( types-object [, selector] )\n for (type in types) {\n this.off(type, selector, types[type]);\n }\n\n return this;\n }\n\n if (selector === false || typeof selector === \"function\") {\n // ( types [, fn] )\n fn = selector;\n selector = undefined;\n }\n\n if (fn === false) {\n fn = returnFalse;\n }\n\n return this.each(function () {\n jQuery.event.remove(this, types, fn, selector);\n });\n }\n });\n var // Support: IE <=10 - 11, Edge 12 - 13 only\n // In IE/Edge using regex groups here causes severe slowdowns.\n // See https://connect.microsoft.com/IE/feedback/details/1736512/\n rnoInnerhtml = /\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n function manipulationTarget(elem, content) {\n if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n return jQuery(elem).children(\"tbody\")[0] || elem;\n }\n\n return elem;\n } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n function disableScript(elem) {\n elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n return elem;\n }\n\n function restoreScript(elem) {\n if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n elem.type = elem.type.slice(5);\n } else {\n elem.removeAttribute(\"type\");\n }\n\n return elem;\n }\n\n function cloneCopyEvent(src, dest) {\n var i, l, type, pdataOld, udataOld, udataCur, events;\n\n if (dest.nodeType !== 1) {\n return;\n } // 1. Copy private data: events, handlers, etc.\n\n\n if (dataPriv.hasData(src)) {\n pdataOld = dataPriv.get(src);\n events = pdataOld.events;\n\n if (events) {\n dataPriv.remove(dest, \"handle events\");\n\n for (type in events) {\n for (i = 0, l = events[type].length; i < l; i++) {\n jQuery.event.add(dest, type, events[type][i]);\n }\n }\n }\n } // 2. Copy user data\n\n\n if (dataUser.hasData(src)) {\n udataOld = dataUser.access(src);\n udataCur = jQuery.extend({}, udataOld);\n dataUser.set(dest, udataCur);\n }\n } // Fix IE bugs, see support tests\n\n\n function fixInput(src, dest) {\n var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n dest.defaultValue = src.defaultValue;\n }\n }\n\n function domManip(collection, args, callback, ignored) {\n // Flatten any nested arrays\n args = flat(args);\n var fragment,\n first,\n scripts,\n hasScripts,\n node,\n doc,\n i = 0,\n l = collection.length,\n iNoClone = l - 1,\n value = args[0],\n valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n return collection.each(function (index) {\n var self = collection.eq(index);\n\n if (valueIsFunction) {\n args[0] = value.call(this, index, self.html());\n }\n\n domManip(self, args, callback, ignored);\n });\n }\n\n if (l) {\n fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n first = fragment.firstChild;\n\n if (fragment.childNodes.length === 1) {\n fragment = first;\n } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n if (first || ignored) {\n scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n hasScripts = scripts.length; // Use the original fragment for the last item\n // instead of the first because it can end up\n // being emptied incorrectly in certain situations (#8070).\n\n for (; i < l; i++) {\n node = fragment;\n\n if (i !== iNoClone) {\n node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n if (hasScripts) {\n // Support: Android <=4.0 only, PhantomJS 1 only\n // push.apply(_, arraylike) throws on ancient WebKit\n jQuery.merge(scripts, getAll(node, \"script\"));\n }\n }\n\n callback.call(collection[i], node, i);\n }\n\n if (hasScripts) {\n doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n for (i = 0; i < hasScripts; i++) {\n node = scripts[i];\n\n if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n // Optional AJAX dependency, but won't run scripts if not present\n if (jQuery._evalUrl && !node.noModule) {\n jQuery._evalUrl(node.src, {\n nonce: node.nonce || node.getAttribute(\"nonce\")\n }, doc);\n }\n } else {\n DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n }\n }\n }\n }\n }\n }\n\n return collection;\n }\n\n function _remove(elem, selector, keepData) {\n var node,\n nodes = selector ? jQuery.filter(selector, elem) : elem,\n i = 0;\n\n for (; (node = nodes[i]) != null; i++) {\n if (!keepData && node.nodeType === 1) {\n jQuery.cleanData(getAll(node));\n }\n\n if (node.parentNode) {\n if (keepData && isAttached(node)) {\n setGlobalEval(getAll(node, \"script\"));\n }\n\n node.parentNode.removeChild(node);\n }\n }\n\n return elem;\n }\n\n jQuery.extend({\n htmlPrefilter: function htmlPrefilter(html) {\n return html;\n },\n clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n var i,\n l,\n srcElements,\n destElements,\n clone = elem.cloneNode(true),\n inPage = isAttached(elem); // Fix IE cloning issues\n\n if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n destElements = getAll(clone);\n srcElements = getAll(elem);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n fixInput(srcElements[i], destElements[i]);\n }\n } // Copy the events from the original to the clone\n\n\n if (dataAndEvents) {\n if (deepDataAndEvents) {\n srcElements = srcElements || getAll(elem);\n destElements = destElements || getAll(clone);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n cloneCopyEvent(srcElements[i], destElements[i]);\n }\n } else {\n cloneCopyEvent(elem, clone);\n }\n } // Preserve script evaluation history\n\n\n destElements = getAll(clone, \"script\");\n\n if (destElements.length > 0) {\n setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n } // Return the cloned set\n\n\n return clone;\n },\n cleanData: function cleanData(elems) {\n var data,\n elem,\n type,\n special = jQuery.event.special,\n i = 0;\n\n for (; (elem = elems[i]) !== undefined; i++) {\n if (acceptData(elem)) {\n if (data = elem[dataPriv.expando]) {\n if (data.events) {\n for (type in data.events) {\n if (special[type]) {\n jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n } else {\n jQuery.removeEvent(elem, type, data.handle);\n }\n }\n } // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n\n\n elem[dataPriv.expando] = undefined;\n }\n\n if (elem[dataUser.expando]) {\n // Support: Chrome <=35 - 45+\n // Assign undefined instead of using delete, see Data#remove\n elem[dataUser.expando] = undefined;\n }\n }\n }\n }\n });\n jQuery.fn.extend({\n detach: function detach(selector) {\n return _remove(this, selector, true);\n },\n remove: function remove(selector) {\n return _remove(this, selector);\n },\n text: function text(value) {\n return access(this, function (value) {\n return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n this.textContent = value;\n }\n });\n }, null, value, arguments.length);\n },\n append: function append() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.appendChild(elem);\n }\n });\n },\n prepend: function prepend() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.insertBefore(elem, target.firstChild);\n }\n });\n },\n before: function before() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this);\n }\n });\n },\n after: function after() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this.nextSibling);\n }\n });\n },\n empty: function empty() {\n var elem,\n i = 0;\n\n for (; (elem = this[i]) != null; i++) {\n if (elem.nodeType === 1) {\n // Prevent memory leaks\n jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n elem.textContent = \"\";\n }\n }\n\n return this;\n },\n clone: function clone(dataAndEvents, deepDataAndEvents) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n return this.map(function () {\n return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n });\n },\n html: function html(value) {\n return access(this, function (value) {\n var elem = this[0] || {},\n i = 0,\n l = this.length;\n\n if (value === undefined && elem.nodeType === 1) {\n return elem.innerHTML;\n } // See if we can take a shortcut and just use innerHTML\n\n\n if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n value = jQuery.htmlPrefilter(value);\n\n try {\n for (; i < l; i++) {\n elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n if (elem.nodeType === 1) {\n jQuery.cleanData(getAll(elem, false));\n elem.innerHTML = value;\n }\n }\n\n elem = 0; // If using innerHTML throws an exception, use the fallback method\n } catch (e) {}\n }\n\n if (elem) {\n this.empty().append(value);\n }\n }, null, value, arguments.length);\n },\n replaceWith: function replaceWith() {\n var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n return domManip(this, arguments, function (elem) {\n var parent = this.parentNode;\n\n if (jQuery.inArray(this, ignored) < 0) {\n jQuery.cleanData(getAll(this));\n\n if (parent) {\n parent.replaceChild(elem, this);\n }\n } // Force callback invocation\n\n }, ignored);\n }\n });\n jQuery.each({\n appendTo: \"append\",\n prependTo: \"prepend\",\n insertBefore: \"before\",\n insertAfter: \"after\",\n replaceAll: \"replaceWith\"\n }, function (name, original) {\n jQuery.fn[name] = function (selector) {\n var elems,\n ret = [],\n insert = jQuery(selector),\n last = insert.length - 1,\n i = 0;\n\n for (; i <= last; i++) {\n elems = i === last ? this : this.clone(true);\n jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n push.apply(ret, elems.get());\n }\n\n return this.pushStack(ret);\n };\n });\n var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n var getStyles = function getStyles(elem) {\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n var view = elem.ownerDocument.defaultView;\n\n if (!view || !view.opener) {\n view = window;\n }\n\n return view.getComputedStyle(elem);\n };\n\n var swap = function swap(elem, options, callback) {\n var ret,\n name,\n old = {}; // Remember the old values, and insert the new ones\n\n for (name in options) {\n old[name] = elem.style[name];\n elem.style[name] = options[name];\n }\n\n ret = callback.call(elem); // Revert the old values\n\n for (name in options) {\n elem.style[name] = old[name];\n }\n\n return ret;\n };\n\n var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n (function () {\n // Executing both pixelPosition & boxSizingReliable tests require only one layout\n // so they're executed at the same time to save the second computation.\n function computeStyleTests() {\n // This is a singleton, we need to execute it only once\n if (!div) {\n return;\n }\n\n container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n documentElement.appendChild(container).appendChild(div);\n var divStyle = window.getComputedStyle(div);\n pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n // Some styles come back with percentage values, even though they shouldn't\n\n div.style.right = \"60%\";\n pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n // Detect overflow:scroll screwiness (gh-3699)\n // Support: Chrome <=64\n // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n div.style.position = \"absolute\";\n scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n // it will also be a sign that checks already performed\n\n div = null;\n }\n\n function roundPixelMeasures(measure) {\n return Math.round(parseFloat(measure));\n }\n\n var pixelPositionVal,\n boxSizingReliableVal,\n scrollboxSizeVal,\n pixelBoxStylesVal,\n reliableTrDimensionsVal,\n reliableMarginLeftVal,\n container = document.createElement(\"div\"),\n div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n if (!div.style) {\n return;\n } // Support: IE <=9 - 11 only\n // Style of cloned element affects source element cloned (#8908)\n\n\n div.style.backgroundClip = \"content-box\";\n div.cloneNode(true).style.backgroundClip = \"\";\n support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n jQuery.extend(support, {\n boxSizingReliable: function boxSizingReliable() {\n computeStyleTests();\n return boxSizingReliableVal;\n },\n pixelBoxStyles: function pixelBoxStyles() {\n computeStyleTests();\n return pixelBoxStylesVal;\n },\n pixelPosition: function pixelPosition() {\n computeStyleTests();\n return pixelPositionVal;\n },\n reliableMarginLeft: function reliableMarginLeft() {\n computeStyleTests();\n return reliableMarginLeftVal;\n },\n scrollboxSize: function scrollboxSize() {\n computeStyleTests();\n return scrollboxSizeVal;\n },\n // Support: IE 9 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Behavior in IE 9 is more subtle than in newer versions & it passes\n // some versions of this test; make sure not to make it pass there!\n //\n // Support: Firefox 70+\n // Only Firefox includes border widths\n // in computed dimensions. (gh-4529)\n reliableTrDimensions: function reliableTrDimensions() {\n var table, tr, trChild, trStyle;\n\n if (reliableTrDimensionsVal == null) {\n table = document.createElement(\"table\");\n tr = document.createElement(\"tr\");\n trChild = document.createElement(\"div\");\n table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n tr.style.cssText = \"border:1px solid\"; // Support: Chrome 86+\n // Height set through cssText does not get applied.\n // Computed height then comes back as 0.\n\n tr.style.height = \"1px\";\n trChild.style.height = \"9px\"; // Support: Android 8 Chrome 86+\n // In our bodyBackground.html iframe,\n // display for all div elements is set to \"inline\",\n // which causes a problem only in Android 8 Chrome 86.\n // Ensuring the div is display: block\n // gets around this issue.\n\n trChild.style.display = \"block\";\n documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n trStyle = window.getComputedStyle(tr);\n reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n documentElement.removeChild(table);\n }\n\n return reliableTrDimensionsVal;\n }\n });\n })();\n\n function curCSS(elem, name, computed) {\n var width,\n minWidth,\n maxWidth,\n ret,\n // Support: Firefox 51+\n // Retrieving style before computed somehow\n // fixes an issue with getting wrong values\n // on detached elements\n style = elem.style;\n computed = computed || getStyles(elem); // getPropertyValue is needed for:\n // .css('filter') (IE 9 only, #12537)\n // .css('--customProperty) (#3144)\n\n if (computed) {\n ret = computed.getPropertyValue(name) || computed[name];\n\n if (ret === \"\" && !isAttached(elem)) {\n ret = jQuery.style(elem, name);\n } // A tribute to the \"awesome hack by Dean Edwards\"\n // Android Browser returns percentage for some values,\n // but width seems to be reliably pixels.\n // This is against the CSSOM draft spec:\n // https://drafts.csswg.org/cssom/#resolved-values\n\n\n if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n // Remember the original values\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width; // Revert the changed values\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret !== undefined ? // Support: IE <=9 - 11 only\n // IE returns zIndex value as an integer.\n ret + \"\" : ret;\n }\n\n function addGetHookIf(conditionFn, hookFn) {\n // Define the hook, we'll check on the first run if it's really needed.\n return {\n get: function get() {\n if (conditionFn()) {\n // Hook not needed (or it's not possible to use it due\n // to missing dependency), remove it.\n delete this.get;\n return;\n } // Hook needed; redefine it so that the support test is not executed again.\n\n\n return (this.get = hookFn).apply(this, arguments);\n }\n };\n }\n\n var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n emptyStyle = document.createElement(\"div\").style,\n vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n function vendorPropName(name) {\n // Check for vendor prefixed names\n var capName = name[0].toUpperCase() + name.slice(1),\n i = cssPrefixes.length;\n\n while (i--) {\n name = cssPrefixes[i] + capName;\n\n if (name in emptyStyle) {\n return name;\n }\n }\n } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n function finalPropName(name) {\n var final = jQuery.cssProps[name] || vendorProps[name];\n\n if (final) {\n return final;\n }\n\n if (name in emptyStyle) {\n return name;\n }\n\n return vendorProps[name] = vendorPropName(name) || name;\n }\n\n var // Swappable if display is none or starts with table\n // except \"table\", \"table-cell\", or \"table-caption\"\n // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n rcustomProp = /^--/,\n cssShow = {\n position: \"absolute\",\n visibility: \"hidden\",\n display: \"block\"\n },\n cssNormalTransform = {\n letterSpacing: \"0\",\n fontWeight: \"400\"\n };\n\n function setPositiveNumber(_elem, value, subtract) {\n // Any relative (+/-) values have already been\n // normalized at this point\n var matches = rcssNum.exec(value);\n return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n }\n\n function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n var i = dimension === \"width\" ? 1 : 0,\n extra = 0,\n delta = 0; // Adjustment may not be necessary\n\n if (box === (isBorderBox ? \"border\" : \"content\")) {\n return 0;\n }\n\n for (; i < 4; i += 2) {\n // Both box models exclude margin\n if (box === \"margin\") {\n delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n if (!isBorderBox) {\n // Add padding\n delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n if (box !== \"padding\") {\n delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n } else {\n extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n // \"padding\" or \"margin\"\n\n } else {\n // For \"content\", subtract padding\n if (box === \"content\") {\n delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n } // For \"content\" or \"padding\", subtract border\n\n\n if (box !== \"margin\") {\n delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n }\n }\n } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n if (!isBorderBox && computedVal >= 0) {\n // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n // Assuming integer scroll gutter, subtract the rest and round down\n delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n // Use an explicit zero to avoid NaN (gh-3964)\n )) || 0;\n }\n\n return delta;\n }\n\n function getWidthOrHeight(elem, dimension, extra) {\n // Start with computed style\n var styles = getStyles(elem),\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n // Fake content-box until we know it's needed to know the true value.\n boxSizingNeeded = !support.boxSizingReliable() || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n valueIsBorderBox = isBorderBox,\n val = curCSS(elem, dimension, styles),\n offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n if (rnumnonpx.test(val)) {\n if (!extra) {\n return val;\n }\n\n val = \"auto\";\n } // Support: IE 9 - 11 only\n // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n // In those cases, the computed value can be trusted to be border-box.\n\n\n if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n // IE/Edge misreport `getComputedStyle` of table rows with width/height\n // set in CSS while `offset*` properties report correct values.\n // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n // This happens for inline elements with no explicit setting (gh-3571)\n val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n elem.getClientRects().length) {\n isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n // retrieved value as a content box dimension.\n\n valueIsBorderBox = offsetProp in elem;\n\n if (valueIsBorderBox) {\n val = elem[offsetProp];\n }\n } // Normalize \"\" and auto\n\n\n val = parseFloat(val) || 0; // Adjust for the element's box model\n\n return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n val) + \"px\";\n }\n\n jQuery.extend({\n // Add in style property hooks for overriding the default\n // behavior of getting and setting a style property\n cssHooks: {\n opacity: {\n get: function get(elem, computed) {\n if (computed) {\n // We should always get a number back from opacity\n var ret = curCSS(elem, \"opacity\");\n return ret === \"\" ? \"1\" : ret;\n }\n }\n }\n },\n // Don't automatically add \"px\" to these possibly-unitless properties\n cssNumber: {\n \"animationIterationCount\": true,\n \"columnCount\": true,\n \"fillOpacity\": true,\n \"flexGrow\": true,\n \"flexShrink\": true,\n \"fontWeight\": true,\n \"gridArea\": true,\n \"gridColumn\": true,\n \"gridColumnEnd\": true,\n \"gridColumnStart\": true,\n \"gridRow\": true,\n \"gridRowEnd\": true,\n \"gridRowStart\": true,\n \"lineHeight\": true,\n \"opacity\": true,\n \"order\": true,\n \"orphans\": true,\n \"widows\": true,\n \"zIndex\": true,\n \"zoom\": true\n },\n // Add in properties whose names you wish to fix before\n // setting or getting the value\n cssProps: {},\n // Get and set the style property on a DOM Node\n style: function style(elem, name, value, extra) {\n // Don't set styles on text and comment nodes\n if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n return;\n } // Make sure that we're working with the right name\n\n\n var ret,\n type,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name),\n style = elem.style; // Make sure that we're working with the right name. We don't\n // want to query the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Gets hook for the prefixed version, then unprefixed version\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n if (value !== undefined) {\n type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n type = \"number\";\n } // Make sure that null and NaN values aren't set (#7116)\n\n\n if (value == null || value !== value) {\n return;\n } // If a number was passed in, add the unit (except for certain CSS properties)\n // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n // \"px\" to a few hardcoded values.\n\n\n if (type === \"number\" && !isCustomProp) {\n value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n } // background-* props affect original clone's values\n\n\n if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n style[name] = \"inherit\";\n } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n if (isCustomProp) {\n style.setProperty(name, value);\n } else {\n style[name] = value;\n }\n }\n } else {\n // If a hook was provided get the non-computed value from there\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n return ret;\n } // Otherwise just get the value from the style object\n\n\n return style[name];\n }\n },\n css: function css(elem, name, extra, styles) {\n var val,\n num,\n hooks,\n origName = camelCase(name),\n isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n // want to modify the value if it is a CSS custom property\n // since they are user-defined.\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n } // Try prefixed name followed by the unprefixed name\n\n\n hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n if (hooks && \"get\" in hooks) {\n val = hooks.get(elem, true, extra);\n } // Otherwise, if a way to get the computed value exists, use that\n\n\n if (val === undefined) {\n val = curCSS(elem, name, styles);\n } // Convert \"normal\" to computed value\n\n\n if (val === \"normal\" && name in cssNormalTransform) {\n val = cssNormalTransform[name];\n } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n if (extra === \"\" || extra) {\n num = parseFloat(val);\n return extra === true || isFinite(num) ? num || 0 : val;\n }\n\n return val;\n }\n });\n jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n jQuery.cssHooks[dimension] = {\n get: function get(elem, computed, extra) {\n if (computed) {\n // Certain elements can have dimension info if we invisibly show them\n // but it must have a current display style that would benefit\n return rdisplayswap.test(jQuery.css(elem, \"display\")) && ( // Support: Safari 8+\n // Table columns in Safari have non-zero offsetWidth & zero\n // getBoundingClientRect().width unless display is changed.\n // Support: IE <=11 only\n // Running getBoundingClientRect on a disconnected node\n // in IE throws an error.\n !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n return getWidthOrHeight(elem, dimension, extra);\n }) : getWidthOrHeight(elem, dimension, extra);\n }\n },\n set: function set(elem, value, extra) {\n var matches,\n styles = getStyles(elem),\n // Only read styles.position if the test has a chance to fail\n // to avoid forcing a reflow.\n scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n boxSizingNeeded = scrollboxSizeBuggy || extra,\n isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n // faking a content-box to get border and padding (gh-3699)\n\n if (isBorderBox && scrollboxSizeBuggy) {\n subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n } // Convert to pixels if value adjustment is needed\n\n\n if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n elem.style[dimension] = value;\n value = jQuery.css(elem, dimension);\n }\n\n return setPositiveNumber(elem, value, subtract);\n }\n };\n });\n jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n if (computed) {\n return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n marginLeft: 0\n }, function () {\n return elem.getBoundingClientRect().left;\n })) + \"px\";\n }\n }); // These hooks are used by animate to expand properties\n\n jQuery.each({\n margin: \"\",\n padding: \"\",\n border: \"Width\"\n }, function (prefix, suffix) {\n jQuery.cssHooks[prefix + suffix] = {\n expand: function expand(value) {\n var i = 0,\n expanded = {},\n // Assumes a single number if not a string\n parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n for (; i < 4; i++) {\n expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n }\n\n return expanded;\n }\n };\n\n if (prefix !== \"margin\") {\n jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n }\n });\n jQuery.fn.extend({\n css: function css(name, value) {\n return access(this, function (elem, name, value) {\n var styles,\n len,\n map = {},\n i = 0;\n\n if (Array.isArray(name)) {\n styles = getStyles(elem);\n len = name.length;\n\n for (; i < len; i++) {\n map[name[i]] = jQuery.css(elem, name[i], false, styles);\n }\n\n return map;\n }\n\n return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n }, name, value, arguments.length > 1);\n }\n });\n\n function Tween(elem, options, prop, end, easing) {\n return new Tween.prototype.init(elem, options, prop, end, easing);\n }\n\n jQuery.Tween = Tween;\n Tween.prototype = {\n constructor: Tween,\n init: function init(elem, options, prop, end, easing, unit) {\n this.elem = elem;\n this.prop = prop;\n this.easing = easing || jQuery.easing._default;\n this.options = options;\n this.start = this.now = this.cur();\n this.end = end;\n this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n },\n cur: function cur() {\n var hooks = Tween.propHooks[this.prop];\n return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n },\n run: function run(percent) {\n var eased,\n hooks = Tween.propHooks[this.prop];\n\n if (this.options.duration) {\n this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n } else {\n this.pos = eased = percent;\n }\n\n this.now = (this.end - this.start) * eased + this.start;\n\n if (this.options.step) {\n this.options.step.call(this.elem, this.now, this);\n }\n\n if (hooks && hooks.set) {\n hooks.set(this);\n } else {\n Tween.propHooks._default.set(this);\n }\n\n return this;\n }\n };\n Tween.prototype.init.prototype = Tween.prototype;\n Tween.propHooks = {\n _default: {\n get: function get(tween) {\n var result; // Use a property on the element directly when it is not a DOM element,\n // or when there is no matching style property that exists.\n\n if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n return tween.elem[tween.prop];\n } // Passing an empty string as a 3rd parameter to .css will automatically\n // attempt a parseFloat and fallback to a string if the parse fails.\n // Simple values such as \"10px\" are parsed to Float;\n // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n return !result || result === \"auto\" ? 0 : result;\n },\n set: function set(tween) {\n // Use step hook for back compat.\n // Use cssHook if its there.\n // Use .style if available and use plain properties where available.\n if (jQuery.fx.step[tween.prop]) {\n jQuery.fx.step[tween.prop](tween);\n } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n } else {\n tween.elem[tween.prop] = tween.now;\n }\n }\n }\n }; // Support: IE <=9 only\n // Panic based approach to setting things on disconnected nodes\n\n Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n set: function set(tween) {\n if (tween.elem.nodeType && tween.elem.parentNode) {\n tween.elem[tween.prop] = tween.now;\n }\n }\n };\n jQuery.easing = {\n linear: function linear(p) {\n return p;\n },\n swing: function swing(p) {\n return 0.5 - Math.cos(p * Math.PI) / 2;\n },\n _default: \"swing\"\n };\n jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n jQuery.fx.step = {};\n var fxNow,\n inProgress,\n rfxtypes = /^(?:toggle|show|hide)$/,\n rrun = /queueHooks$/;\n\n function schedule() {\n if (inProgress) {\n if (document.hidden === false && window.requestAnimationFrame) {\n window.requestAnimationFrame(schedule);\n } else {\n window.setTimeout(schedule, jQuery.fx.interval);\n }\n\n jQuery.fx.tick();\n }\n } // Animations created synchronously will run synchronously\n\n\n function createFxNow() {\n window.setTimeout(function () {\n fxNow = undefined;\n });\n return fxNow = Date.now();\n } // Generate parameters to create a standard animation\n\n\n function genFx(type, includeWidth) {\n var which,\n i = 0,\n attrs = {\n height: type\n }; // If we include width, step value is 1 to do all cssExpand values,\n // otherwise step value is 2 to skip over Left and Right\n\n includeWidth = includeWidth ? 1 : 0;\n\n for (; i < 4; i += 2 - includeWidth) {\n which = cssExpand[i];\n attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n }\n\n if (includeWidth) {\n attrs.opacity = attrs.width = type;\n }\n\n return attrs;\n }\n\n function createTween(value, prop, animation) {\n var tween,\n collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n index = 0,\n length = collection.length;\n\n for (; index < length; index++) {\n if (tween = collection[index].call(animation, prop, value)) {\n // We're done with this property\n return tween;\n }\n }\n }\n\n function defaultPrefilter(elem, props, opts) {\n var prop,\n value,\n toggle,\n hooks,\n oldfire,\n propTween,\n restoreDisplay,\n display,\n isBox = \"width\" in props || \"height\" in props,\n anim = this,\n orig = {},\n style = elem.style,\n hidden = elem.nodeType && isHiddenWithinTree(elem),\n dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n if (!opts.queue) {\n hooks = jQuery._queueHooks(elem, \"fx\");\n\n if (hooks.unqueued == null) {\n hooks.unqueued = 0;\n oldfire = hooks.empty.fire;\n\n hooks.empty.fire = function () {\n if (!hooks.unqueued) {\n oldfire();\n }\n };\n }\n\n hooks.unqueued++;\n anim.always(function () {\n // Ensure the complete handler is called before this completes\n anim.always(function () {\n hooks.unqueued--;\n\n if (!jQuery.queue(elem, \"fx\").length) {\n hooks.empty.fire();\n }\n });\n });\n } // Detect show/hide animations\n\n\n for (prop in props) {\n value = props[prop];\n\n if (rfxtypes.test(value)) {\n delete props[prop];\n toggle = toggle || value === \"toggle\";\n\n if (value === (hidden ? \"hide\" : \"show\")) {\n // Pretend to be hidden if this is a \"show\" and\n // there is still data from a stopped show/hide\n if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n hidden = true; // Ignore all other no-op show/hide data\n } else {\n continue;\n }\n }\n\n orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n }\n } // Bail out if this is a no-op like .hide().hide()\n\n\n propTween = !jQuery.isEmptyObject(props);\n\n if (!propTween && jQuery.isEmptyObject(orig)) {\n return;\n } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n if (isBox && elem.nodeType === 1) {\n // Support: IE <=9 - 11, Edge 12 - 15\n // Record all 3 overflow attributes because IE does not infer the shorthand\n // from identically-valued overflowX and overflowY and Edge just mirrors\n // the overflowX value there.\n opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n restoreDisplay = dataShow && dataShow.display;\n\n if (restoreDisplay == null) {\n restoreDisplay = dataPriv.get(elem, \"display\");\n }\n\n display = jQuery.css(elem, \"display\");\n\n if (display === \"none\") {\n if (restoreDisplay) {\n display = restoreDisplay;\n } else {\n // Get nonempty value(s) by temporarily forcing visibility\n showHide([elem], true);\n restoreDisplay = elem.style.display || restoreDisplay;\n display = jQuery.css(elem, \"display\");\n showHide([elem]);\n }\n } // Animate inline elements as inline-block\n\n\n if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n if (jQuery.css(elem, \"float\") === \"none\") {\n // Restore the original display value at the end of pure show/hide animations\n if (!propTween) {\n anim.done(function () {\n style.display = restoreDisplay;\n });\n\n if (restoreDisplay == null) {\n display = style.display;\n restoreDisplay = display === \"none\" ? \"\" : display;\n }\n }\n\n style.display = \"inline-block\";\n }\n }\n }\n\n if (opts.overflow) {\n style.overflow = \"hidden\";\n anim.always(function () {\n style.overflow = opts.overflow[0];\n style.overflowX = opts.overflow[1];\n style.overflowY = opts.overflow[2];\n });\n } // Implement show/hide animations\n\n\n propTween = false;\n\n for (prop in orig) {\n // General show/hide setup for this element animation\n if (!propTween) {\n if (dataShow) {\n if (\"hidden\" in dataShow) {\n hidden = dataShow.hidden;\n }\n } else {\n dataShow = dataPriv.access(elem, \"fxshow\", {\n display: restoreDisplay\n });\n } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n if (toggle) {\n dataShow.hidden = !hidden;\n } // Show elements before animating them\n\n\n if (hidden) {\n showHide([elem], true);\n }\n /* eslint-disable no-loop-func */\n\n\n anim.done(function () {\n /* eslint-enable no-loop-func */\n // The final step of a \"hide\" animation is actually hiding the element\n if (!hidden) {\n showHide([elem]);\n }\n\n dataPriv.remove(elem, \"fxshow\");\n\n for (prop in orig) {\n jQuery.style(elem, prop, orig[prop]);\n }\n });\n } // Per-property setup\n\n\n propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n if (!(prop in dataShow)) {\n dataShow[prop] = propTween.start;\n\n if (hidden) {\n propTween.end = propTween.start;\n propTween.start = 0;\n }\n }\n }\n }\n\n function propFilter(props, specialEasing) {\n var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n for (index in props) {\n name = camelCase(index);\n easing = specialEasing[name];\n value = props[index];\n\n if (Array.isArray(value)) {\n easing = value[1];\n value = props[index] = value[0];\n }\n\n if (index !== name) {\n props[name] = value;\n delete props[index];\n }\n\n hooks = jQuery.cssHooks[name];\n\n if (hooks && \"expand\" in hooks) {\n value = hooks.expand(value);\n delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n // Reusing 'index' because we have the correct \"name\"\n\n for (index in value) {\n if (!(index in props)) {\n props[index] = value[index];\n specialEasing[index] = easing;\n }\n }\n } else {\n specialEasing[name] = easing;\n }\n }\n }\n\n function Animation(elem, properties, options) {\n var result,\n stopped,\n index = 0,\n length = Animation.prefilters.length,\n deferred = jQuery.Deferred().always(function () {\n // Don't match elem in the :animated selector\n delete tick.elem;\n }),\n tick = function tick() {\n if (stopped) {\n return false;\n }\n\n var currentTime = fxNow || createFxNow(),\n remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n // Support: Android 2.3 only\n // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n temp = remaining / animation.duration || 0,\n percent = 1 - temp,\n index = 0,\n length = animation.tweens.length;\n\n for (; index < length; index++) {\n animation.tweens[index].run(percent);\n }\n\n deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n if (percent < 1 && length) {\n return remaining;\n } // If this was an empty animation, synthesize a final progress notification\n\n\n if (!length) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n } // Resolve the animation and report its conclusion\n\n\n deferred.resolveWith(elem, [animation]);\n return false;\n },\n animation = deferred.promise({\n elem: elem,\n props: jQuery.extend({}, properties),\n opts: jQuery.extend(true, {\n specialEasing: {},\n easing: jQuery.easing._default\n }, options),\n originalProperties: properties,\n originalOptions: options,\n startTime: fxNow || createFxNow(),\n duration: options.duration,\n tweens: [],\n createTween: function createTween(prop, end) {\n var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n animation.tweens.push(tween);\n return tween;\n },\n stop: function stop(gotoEnd) {\n var index = 0,\n // If we are going to the end, we want to run all the tweens\n // otherwise we skip this part\n length = gotoEnd ? animation.tweens.length : 0;\n\n if (stopped) {\n return this;\n }\n\n stopped = true;\n\n for (; index < length; index++) {\n animation.tweens[index].run(1);\n } // Resolve when we played the last frame; otherwise, reject\n\n\n if (gotoEnd) {\n deferred.notifyWith(elem, [animation, 1, 0]);\n deferred.resolveWith(elem, [animation, gotoEnd]);\n } else {\n deferred.rejectWith(elem, [animation, gotoEnd]);\n }\n\n return this;\n }\n }),\n props = animation.props;\n\n propFilter(props, animation.opts.specialEasing);\n\n for (; index < length; index++) {\n result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n if (result) {\n if (isFunction(result.stop)) {\n jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n }\n\n return result;\n }\n }\n\n jQuery.map(props, createTween, animation);\n\n if (isFunction(animation.opts.start)) {\n animation.opts.start.call(elem, animation);\n } // Attach callbacks from options\n\n\n animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n jQuery.fx.timer(jQuery.extend(tick, {\n elem: elem,\n anim: animation,\n queue: animation.opts.queue\n }));\n return animation;\n }\n\n jQuery.Animation = jQuery.extend(Animation, {\n tweeners: {\n \"*\": [function (prop, value) {\n var tween = this.createTween(prop, value);\n adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n return tween;\n }]\n },\n tweener: function tweener(props, callback) {\n if (isFunction(props)) {\n callback = props;\n props = [\"*\"];\n } else {\n props = props.match(rnothtmlwhite);\n }\n\n var prop,\n index = 0,\n length = props.length;\n\n for (; index < length; index++) {\n prop = props[index];\n Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n Animation.tweeners[prop].unshift(callback);\n }\n },\n prefilters: [defaultPrefilter],\n prefilter: function prefilter(callback, prepend) {\n if (prepend) {\n Animation.prefilters.unshift(callback);\n } else {\n Animation.prefilters.push(callback);\n }\n }\n });\n\n jQuery.speed = function (speed, easing, fn) {\n var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n complete: fn || !fn && easing || isFunction(speed) && speed,\n duration: speed,\n easing: fn && easing || easing && !isFunction(easing) && easing\n }; // Go to the end state if fx are off\n\n if (jQuery.fx.off) {\n opt.duration = 0;\n } else {\n if (typeof opt.duration !== \"number\") {\n if (opt.duration in jQuery.fx.speeds) {\n opt.duration = jQuery.fx.speeds[opt.duration];\n } else {\n opt.duration = jQuery.fx.speeds._default;\n }\n }\n } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n if (opt.queue == null || opt.queue === true) {\n opt.queue = \"fx\";\n } // Queueing\n\n\n opt.old = opt.complete;\n\n opt.complete = function () {\n if (isFunction(opt.old)) {\n opt.old.call(this);\n }\n\n if (opt.queue) {\n jQuery.dequeue(this, opt.queue);\n }\n };\n\n return opt;\n };\n\n jQuery.fn.extend({\n fadeTo: function fadeTo(speed, to, easing, callback) {\n // Show any hidden elements after setting opacity to 0\n return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n .end().animate({\n opacity: to\n }, speed, easing, callback);\n },\n animate: function animate(prop, speed, easing, callback) {\n var empty = jQuery.isEmptyObject(prop),\n optall = jQuery.speed(speed, easing, callback),\n doAnimation = function doAnimation() {\n // Operate on a copy of prop so per-property easing won't be lost\n var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n if (empty || dataPriv.get(this, \"finish\")) {\n anim.stop(true);\n }\n };\n\n doAnimation.finish = doAnimation;\n return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n },\n stop: function stop(type, clearQueue, gotoEnd) {\n var stopQueue = function stopQueue(hooks) {\n var stop = hooks.stop;\n delete hooks.stop;\n stop(gotoEnd);\n };\n\n if (typeof type !== \"string\") {\n gotoEnd = clearQueue;\n clearQueue = type;\n type = undefined;\n }\n\n if (clearQueue) {\n this.queue(type || \"fx\", []);\n }\n\n return this.each(function () {\n var dequeue = true,\n index = type != null && type + \"queueHooks\",\n timers = jQuery.timers,\n data = dataPriv.get(this);\n\n if (index) {\n if (data[index] && data[index].stop) {\n stopQueue(data[index]);\n }\n } else {\n for (index in data) {\n if (data[index] && data[index].stop && rrun.test(index)) {\n stopQueue(data[index]);\n }\n }\n }\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n timers[index].anim.stop(gotoEnd);\n dequeue = false;\n timers.splice(index, 1);\n }\n } // Start the next in the queue if the last step wasn't forced.\n // Timers currently will call their complete callbacks, which\n // will dequeue but only if they were gotoEnd.\n\n\n if (dequeue || !gotoEnd) {\n jQuery.dequeue(this, type);\n }\n });\n },\n finish: function finish(type) {\n if (type !== false) {\n type = type || \"fx\";\n }\n\n return this.each(function () {\n var index,\n data = dataPriv.get(this),\n queue = data[type + \"queue\"],\n hooks = data[type + \"queueHooks\"],\n timers = jQuery.timers,\n length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n data.finish = true; // Empty the queue first\n\n jQuery.queue(this, type, []);\n\n if (hooks && hooks.stop) {\n hooks.stop.call(this, true);\n } // Look for any active animations, and finish them\n\n\n for (index = timers.length; index--;) {\n if (timers[index].elem === this && timers[index].queue === type) {\n timers[index].anim.stop(true);\n timers.splice(index, 1);\n }\n } // Look for any animations in the old queue and finish them\n\n\n for (index = 0; index < length; index++) {\n if (queue[index] && queue[index].finish) {\n queue[index].finish.call(this);\n }\n } // Turn off finishing flag\n\n\n delete data.finish;\n });\n }\n });\n jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n var cssFn = jQuery.fn[name];\n\n jQuery.fn[name] = function (speed, easing, callback) {\n return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n };\n }); // Generate shortcuts for custom animations\n\n jQuery.each({\n slideDown: genFx(\"show\"),\n slideUp: genFx(\"hide\"),\n slideToggle: genFx(\"toggle\"),\n fadeIn: {\n opacity: \"show\"\n },\n fadeOut: {\n opacity: \"hide\"\n },\n fadeToggle: {\n opacity: \"toggle\"\n }\n }, function (name, props) {\n jQuery.fn[name] = function (speed, easing, callback) {\n return this.animate(props, speed, easing, callback);\n };\n });\n jQuery.timers = [];\n\n jQuery.fx.tick = function () {\n var timer,\n i = 0,\n timers = jQuery.timers;\n fxNow = Date.now();\n\n for (; i < timers.length; i++) {\n timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n if (!timer() && timers[i] === timer) {\n timers.splice(i--, 1);\n }\n }\n\n if (!timers.length) {\n jQuery.fx.stop();\n }\n\n fxNow = undefined;\n };\n\n jQuery.fx.timer = function (timer) {\n jQuery.timers.push(timer);\n jQuery.fx.start();\n };\n\n jQuery.fx.interval = 13;\n\n jQuery.fx.start = function () {\n if (inProgress) {\n return;\n }\n\n inProgress = true;\n schedule();\n };\n\n jQuery.fx.stop = function () {\n inProgress = null;\n };\n\n jQuery.fx.speeds = {\n slow: 600,\n fast: 200,\n // Default speed\n _default: 400\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/\n\n jQuery.fn.delay = function (time, type) {\n time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n type = type || \"fx\";\n return this.queue(type, function (next, hooks) {\n var timeout = window.setTimeout(next, time);\n\n hooks.stop = function () {\n window.clearTimeout(timeout);\n };\n });\n };\n\n (function () {\n var input = document.createElement(\"input\"),\n select = document.createElement(\"select\"),\n opt = select.appendChild(document.createElement(\"option\"));\n input.type = \"checkbox\"; // Support: Android <=4.3 only\n // Default value for a checkbox should be \"on\"\n\n support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n // Must access selectedIndex to make default options select\n\n support.optSelected = opt.selected; // Support: IE <=11 only\n // An input loses its value after becoming a radio\n\n input = document.createElement(\"input\");\n input.value = \"t\";\n input.type = \"radio\";\n support.radioValue = input.value === \"t\";\n })();\n\n var boolHook,\n attrHandle = jQuery.expr.attrHandle;\n jQuery.fn.extend({\n attr: function attr(name, value) {\n return access(this, jQuery.attr, name, value, arguments.length > 1);\n },\n removeAttr: function removeAttr(name) {\n return this.each(function () {\n jQuery.removeAttr(this, name);\n });\n }\n });\n jQuery.extend({\n attr: function attr(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n } // Fallback to prop when attributes are not supported\n\n\n if (typeof elem.getAttribute === \"undefined\") {\n return jQuery.prop(elem, name, value);\n } // Attribute hooks are determined by the lowercase version\n // Grab necessary hook if one is defined\n\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n }\n\n if (value !== undefined) {\n if (value === null) {\n jQuery.removeAttr(elem, name);\n return;\n }\n\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n elem.setAttribute(name, value + \"\");\n return value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n return ret == null ? undefined : ret;\n },\n attrHooks: {\n type: {\n set: function set(elem, value) {\n if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n var val = elem.value;\n elem.setAttribute(\"type\", value);\n\n if (val) {\n elem.value = val;\n }\n\n return value;\n }\n }\n }\n },\n removeAttr: function removeAttr(elem, value) {\n var name,\n i = 0,\n // Attribute names can contain non-HTML whitespace characters\n // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n attrNames = value && value.match(rnothtmlwhite);\n\n if (attrNames && elem.nodeType === 1) {\n while (name = attrNames[i++]) {\n elem.removeAttribute(name);\n }\n }\n }\n }); // Hooks for boolean attributes\n\n boolHook = {\n set: function set(elem, value, name) {\n if (value === false) {\n // Remove boolean attributes when set to false\n jQuery.removeAttr(elem, name);\n } else {\n elem.setAttribute(name, name);\n }\n\n return name;\n }\n };\n jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n var getter = attrHandle[name] || jQuery.find.attr;\n\n attrHandle[name] = function (elem, name, isXML) {\n var ret,\n handle,\n lowercaseName = name.toLowerCase();\n\n if (!isXML) {\n // Avoid an infinite loop by temporarily removing this function from the getter\n handle = attrHandle[lowercaseName];\n attrHandle[lowercaseName] = ret;\n ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n attrHandle[lowercaseName] = handle;\n }\n\n return ret;\n };\n });\n var rfocusable = /^(?:input|select|textarea|button)$/i,\n rclickable = /^(?:a|area)$/i;\n jQuery.fn.extend({\n prop: function prop(name, value) {\n return access(this, jQuery.prop, name, value, arguments.length > 1);\n },\n removeProp: function removeProp(name) {\n return this.each(function () {\n delete this[jQuery.propFix[name] || name];\n });\n }\n });\n jQuery.extend({\n prop: function prop(elem, name, value) {\n var ret,\n hooks,\n nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n // Fix name and attach hooks\n name = jQuery.propFix[name] || name;\n hooks = jQuery.propHooks[name];\n }\n\n if (value !== undefined) {\n if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n return elem[name] = value;\n }\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n return elem[name];\n },\n propHooks: {\n tabIndex: {\n get: function get(elem) {\n // Support: IE <=9 - 11 only\n // elem.tabIndex doesn't always return the\n // correct value when it hasn't been explicitly set\n // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n // Use proper attribute retrieval(#12072)\n var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n if (tabindex) {\n return parseInt(tabindex, 10);\n }\n\n if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n return 0;\n }\n\n return -1;\n }\n }\n },\n propFix: {\n \"for\": \"htmlFor\",\n \"class\": \"className\"\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\n\n if (!support.optSelected) {\n jQuery.propHooks.selected = {\n get: function get(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent && parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n\n return null;\n },\n set: function set(elem) {\n /* eslint no-unused-expressions: \"off\" */\n var parent = elem.parentNode;\n\n if (parent) {\n parent.selectedIndex;\n\n if (parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n }\n }\n };\n }\n\n jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n jQuery.propFix[this.toLowerCase()] = this;\n }); // Strip and collapse whitespace according to HTML spec\n // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n function stripAndCollapse(value) {\n var tokens = value.match(rnothtmlwhite) || [];\n return tokens.join(\" \");\n }\n\n function getClass(elem) {\n return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n }\n\n function classesToArray(value) {\n if (Array.isArray(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return value.match(rnothtmlwhite) || [];\n }\n\n return [];\n }\n\n jQuery.fn.extend({\n addClass: function addClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).addClass(value.call(this, j, getClass(this)));\n });\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n cur += clazz + \" \";\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n removeClass: function removeClass(value) {\n var classes,\n elem,\n cur,\n curValue,\n clazz,\n j,\n finalValue,\n i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n jQuery(this).removeClass(value.call(this, j, getClass(this)));\n });\n }\n\n if (!arguments.length) {\n return this.attr(\"class\", \"\");\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n if (cur) {\n j = 0;\n\n while (clazz = classes[j++]) {\n // Remove *all* instances\n while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n cur = cur.replace(\" \" + clazz + \" \", \" \");\n }\n } // Only assign if different to avoid unneeded rendering.\n\n\n finalValue = stripAndCollapse(cur);\n\n if (curValue !== finalValue) {\n elem.setAttribute(\"class\", finalValue);\n }\n }\n }\n }\n\n return this;\n },\n toggleClass: function toggleClass(value, stateVal) {\n var type = _typeof(value),\n isValidValue = type === \"string\" || Array.isArray(value);\n\n if (typeof stateVal === \"boolean\" && isValidValue) {\n return stateVal ? this.addClass(value) : this.removeClass(value);\n }\n\n if (isFunction(value)) {\n return this.each(function (i) {\n jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n });\n }\n\n return this.each(function () {\n var className, i, self, classNames;\n\n if (isValidValue) {\n // Toggle individual class names\n i = 0;\n self = jQuery(this);\n classNames = classesToArray(value);\n\n while (className = classNames[i++]) {\n // Check each className given, space separated list\n if (self.hasClass(className)) {\n self.removeClass(className);\n } else {\n self.addClass(className);\n }\n } // Toggle whole class name\n\n } else if (value === undefined || type === \"boolean\") {\n className = getClass(this);\n\n if (className) {\n // Store className if set\n dataPriv.set(this, \"__className__\", className);\n } // If the element has a class name or if we're passed `false`,\n // then remove the whole classname (if there was one, the above saved it).\n // Otherwise bring back whatever was previously saved (if anything),\n // falling back to the empty string if nothing was stored.\n\n\n if (this.setAttribute) {\n this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n }\n }\n });\n },\n hasClass: function hasClass(selector) {\n var className,\n elem,\n i = 0;\n className = \" \" + selector + \" \";\n\n while (elem = this[i++]) {\n if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n return true;\n }\n }\n\n return false;\n }\n });\n var rreturn = /\\r/g;\n jQuery.fn.extend({\n val: function val(value) {\n var hooks,\n ret,\n valueIsFunction,\n elem = this[0];\n\n if (!arguments.length) {\n if (elem) {\n hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n return ret;\n }\n\n ret = elem.value; // Handle most common string cases\n\n if (typeof ret === \"string\") {\n return ret.replace(rreturn, \"\");\n } // Handle cases where value is null/undef or number\n\n\n return ret == null ? \"\" : ret;\n }\n\n return;\n }\n\n valueIsFunction = isFunction(value);\n return this.each(function (i) {\n var val;\n\n if (this.nodeType !== 1) {\n return;\n }\n\n if (valueIsFunction) {\n val = value.call(this, i, jQuery(this).val());\n } else {\n val = value;\n } // Treat null/undefined as \"\"; convert numbers to string\n\n\n if (val == null) {\n val = \"\";\n } else if (typeof val === \"number\") {\n val += \"\";\n } else if (Array.isArray(val)) {\n val = jQuery.map(val, function (value) {\n return value == null ? \"\" : value + \"\";\n });\n }\n\n hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n this.value = val;\n }\n });\n }\n });\n jQuery.extend({\n valHooks: {\n option: {\n get: function get(elem) {\n var val = jQuery.find.attr(elem, \"value\");\n return val != null ? val : // Support: IE <=10 - 11 only\n // option.text throws exceptions (#14686, #14858)\n // Strip and collapse whitespace\n // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n stripAndCollapse(jQuery.text(elem));\n }\n },\n select: {\n get: function get(elem) {\n var value,\n option,\n i,\n options = elem.options,\n index = elem.selectedIndex,\n one = elem.type === \"select-one\",\n values = one ? null : [],\n max = one ? index + 1 : options.length;\n\n if (index < 0) {\n i = max;\n } else {\n i = one ? index : 0;\n } // Loop through all the selected options\n\n\n for (; i < max; i++) {\n option = options[i]; // Support: IE <=9 only\n // IE8-9 doesn't update selected after form reset (#2551)\n\n if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n // Get the specific value for the option\n value = jQuery(option).val(); // We don't need an array for one selects\n\n if (one) {\n return value;\n } // Multi-Selects return an array\n\n\n values.push(value);\n }\n }\n\n return values;\n },\n set: function set(elem, value) {\n var optionSet,\n option,\n options = elem.options,\n values = jQuery.makeArray(value),\n i = options.length;\n\n while (i--) {\n option = options[i];\n /* eslint-disable no-cond-assign */\n\n if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n optionSet = true;\n }\n /* eslint-enable no-cond-assign */\n\n } // Force browsers to behave consistently when non-matching value is set\n\n\n if (!optionSet) {\n elem.selectedIndex = -1;\n }\n\n return values;\n }\n }\n }\n }); // Radios and checkboxes getter/setter\n\n jQuery.each([\"radio\", \"checkbox\"], function () {\n jQuery.valHooks[this] = {\n set: function set(elem, value) {\n if (Array.isArray(value)) {\n return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n }\n }\n };\n\n if (!support.checkOn) {\n jQuery.valHooks[this].get = function (elem) {\n return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n };\n }\n }); // Return jQuery for attributes-only inclusion\n\n support.focusin = \"onfocusin\" in window;\n\n var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n stopPropagationCallback = function stopPropagationCallback(e) {\n e.stopPropagation();\n };\n\n jQuery.extend(jQuery.event, {\n trigger: function trigger(event, data, elem, onlyHandlers) {\n var i,\n cur,\n tmp,\n bubbleType,\n ontype,\n handle,\n special,\n lastElement,\n eventPath = [elem || document],\n type = hasOwn.call(event, \"type\") ? event.type : event,\n namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n if (elem.nodeType === 3 || elem.nodeType === 8) {\n return;\n } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n if (rfocusMorph.test(type + jQuery.event.triggered)) {\n return;\n }\n\n if (type.indexOf(\".\") > -1) {\n // Namespaced trigger; create a regexp to match event type in handle()\n namespaces = type.split(\".\");\n type = namespaces.shift();\n namespaces.sort();\n }\n\n ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n event.isTrigger = onlyHandlers ? 2 : 3;\n event.namespace = namespaces.join(\".\");\n event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n event.result = undefined;\n\n if (!event.target) {\n event.target = elem;\n } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n special = jQuery.event.special[type] || {};\n\n if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n return;\n } // Determine event propagation path in advance, per W3C events spec (#9951)\n // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n bubbleType = special.delegateType || type;\n\n if (!rfocusMorph.test(bubbleType + type)) {\n cur = cur.parentNode;\n }\n\n for (; cur; cur = cur.parentNode) {\n eventPath.push(cur);\n tmp = cur;\n } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n if (tmp === (elem.ownerDocument || document)) {\n eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n }\n } // Fire handlers on the event path\n\n\n i = 0;\n\n while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n lastElement = cur;\n event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n\n if (handle) {\n handle.apply(cur, data);\n } // Native handler\n\n\n handle = ontype && cur[ontype];\n\n if (handle && handle.apply && acceptData(cur)) {\n event.result = handle.apply(cur, data);\n\n if (event.result === false) {\n event.preventDefault();\n }\n }\n }\n\n event.type = type; // If nobody prevented the default action, do it now\n\n if (!onlyHandlers && !event.isDefaultPrevented()) {\n if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n // Call a native DOM method on the target with the same name as the event.\n // Don't do default actions on window, that's where global variables be (#6170)\n if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n // Don't re-trigger an onFOO event when we call its FOO() method\n tmp = elem[ontype];\n\n if (tmp) {\n elem[ontype] = null;\n } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n jQuery.event.triggered = type;\n\n if (event.isPropagationStopped()) {\n lastElement.addEventListener(type, stopPropagationCallback);\n }\n\n elem[type]();\n\n if (event.isPropagationStopped()) {\n lastElement.removeEventListener(type, stopPropagationCallback);\n }\n\n jQuery.event.triggered = undefined;\n\n if (tmp) {\n elem[ontype] = tmp;\n }\n }\n }\n }\n\n return event.result;\n },\n // Piggyback on a donor event to simulate a different one\n // Used only for `focus(in | out)` events\n simulate: function simulate(type, elem, event) {\n var e = jQuery.extend(new jQuery.Event(), event, {\n type: type,\n isSimulated: true\n });\n jQuery.event.trigger(e, null, elem);\n }\n });\n jQuery.fn.extend({\n trigger: function trigger(type, data) {\n return this.each(function () {\n jQuery.event.trigger(type, data, this);\n });\n },\n triggerHandler: function triggerHandler(type, data) {\n var elem = this[0];\n\n if (elem) {\n return jQuery.event.trigger(type, data, elem, true);\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\n\n if (!support.focusin) {\n jQuery.each({\n focus: \"focusin\",\n blur: \"focusout\"\n }, function (orig, fix) {\n // Attach a single capturing handler on the document while someone wants focusin/focusout\n var handler = function handler(event) {\n jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n };\n\n jQuery.event.special[fix] = {\n setup: function setup() {\n // Handle: regular nodes (via `this.ownerDocument`), window\n // (via `this.document`) & document (via `this`).\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix);\n\n if (!attaches) {\n doc.addEventListener(orig, handler, true);\n }\n\n dataPriv.access(doc, fix, (attaches || 0) + 1);\n },\n teardown: function teardown() {\n var doc = this.ownerDocument || this.document || this,\n attaches = dataPriv.access(doc, fix) - 1;\n\n if (!attaches) {\n doc.removeEventListener(orig, handler, true);\n dataPriv.remove(doc, fix);\n } else {\n dataPriv.access(doc, fix, attaches);\n }\n }\n };\n });\n }\n\n var location = window.location;\n var nonce = {\n guid: Date.now()\n };\n var rquery = /\\?/; // Cross-browser xml parsing\n\n jQuery.parseXML = function (data) {\n var xml, parserErrorElem;\n\n if (!data || typeof data !== \"string\") {\n return null;\n } // Support: IE 9 - 11 only\n // IE throws on parseFromString with invalid input.\n\n\n try {\n xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n } catch (e) {}\n\n parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\n if (!xml || parserErrorElem) {\n jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function (el) {\n return el.textContent;\n }).join(\"\\n\") : data));\n }\n\n return xml;\n };\n\n var rbracket = /\\[\\]$/,\n rCRLF = /\\r?\\n/g,\n rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n function buildParams(prefix, obj, traditional, add) {\n var name;\n\n if (Array.isArray(obj)) {\n // Serialize array item.\n jQuery.each(obj, function (i, v) {\n if (traditional || rbracket.test(prefix)) {\n // Treat each array item as a scalar.\n add(prefix, v);\n } else {\n // Item is non-scalar (array or object), encode its numeric index.\n buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n }\n });\n } else if (!traditional && toType(obj) === \"object\") {\n // Serialize object item.\n for (name in obj) {\n buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n }\n } else {\n // Serialize scalar item.\n add(prefix, obj);\n }\n } // Serialize an array of form elements or a set of\n // key/values into a query string\n\n\n jQuery.param = function (a, traditional) {\n var prefix,\n s = [],\n add = function add(key, valueOrFunction) {\n // If value is a function, invoke it and use its return value\n var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n };\n\n if (a == null) {\n return \"\";\n } // If an array was passed in, assume that it is an array of form elements.\n\n\n if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n // Serialize the form elements\n jQuery.each(a, function () {\n add(this.name, this.value);\n });\n } else {\n // If traditional, encode the \"old\" way (the way 1.3.2 or older\n // did it), otherwise encode params recursively.\n for (prefix in a) {\n buildParams(prefix, a[prefix], traditional, add);\n }\n } // Return the resulting serialization\n\n\n return s.join(\"&\");\n };\n\n jQuery.fn.extend({\n serialize: function serialize() {\n return jQuery.param(this.serializeArray());\n },\n serializeArray: function serializeArray() {\n return this.map(function () {\n // Can add propHook for \"elements\" to filter or add form elements\n var elements = jQuery.prop(this, \"elements\");\n return elements ? jQuery.makeArray(elements) : this;\n }).filter(function () {\n var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n }).map(function (_i, elem) {\n var val = jQuery(this).val();\n\n if (val == null) {\n return null;\n }\n\n if (Array.isArray(val)) {\n return jQuery.map(val, function (val) {\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n });\n }\n\n return {\n name: elem.name,\n value: val.replace(rCRLF, \"\\r\\n\")\n };\n }).get();\n }\n });\n var r20 = /%20/g,\n rhash = /#.*$/,\n rantiCache = /([?&])_=[^&]*/,\n rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n // #7653, #8125, #8152: local protocol detection\n rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n rnoContent = /^(?:GET|HEAD)$/,\n rprotocol = /^\\/\\//,\n\n /* Prefilters\n * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n * 2) These are called:\n * - BEFORE asking for a transport\n * - AFTER param serialization (s.data is a string if s.processData is true)\n * 3) key is the dataType\n * 4) the catchall symbol \"*\" can be used\n * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n */\n prefilters = {},\n\n /* Transports bindings\n * 1) key is the dataType\n * 2) the catchall symbol \"*\" can be used\n * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n */\n transports = {},\n // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n allTypes = \"*/\".concat(\"*\"),\n // Anchor tag for parsing the document origin\n originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n function addToPrefiltersOrTransports(structure) {\n // dataTypeExpression is optional and defaults to \"*\"\n return function (dataTypeExpression, func) {\n if (typeof dataTypeExpression !== \"string\") {\n func = dataTypeExpression;\n dataTypeExpression = \"*\";\n }\n\n var dataType,\n i = 0,\n dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n if (isFunction(func)) {\n // For each dataType in the dataTypeExpression\n while (dataType = dataTypes[i++]) {\n // Prepend if requested\n if (dataType[0] === \"+\") {\n dataType = dataType.slice(1) || \"*\";\n (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n } else {\n (structure[dataType] = structure[dataType] || []).push(func);\n }\n }\n }\n };\n } // Base inspection function for prefilters and transports\n\n\n function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n var inspected = {},\n seekingTransport = structure === transports;\n\n function inspect(dataType) {\n var selected;\n inspected[dataType] = true;\n jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n options.dataTypes.unshift(dataTypeOrTransport);\n inspect(dataTypeOrTransport);\n return false;\n } else if (seekingTransport) {\n return !(selected = dataTypeOrTransport);\n }\n });\n return selected;\n }\n\n return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n } // A special extend for ajax options\n // that takes \"flat\" options (not to be deep extended)\n // Fixes #9887\n\n\n function ajaxExtend(target, src) {\n var key,\n deep,\n flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n for (key in src) {\n if (src[key] !== undefined) {\n (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n }\n }\n\n if (deep) {\n jQuery.extend(true, target, deep);\n }\n\n return target;\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 */\n\n\n function ajaxHandleResponses(s, jqXHR, responses) {\n var ct,\n type,\n finalDataType,\n firstDataType,\n contents = s.contents,\n dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n while (dataTypes[0] === \"*\") {\n dataTypes.shift();\n\n if (ct === undefined) {\n ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n }\n } // Check if we're dealing with a known content-type\n\n\n if (ct) {\n for (type in contents) {\n if (contents[type] && contents[type].test(ct)) {\n dataTypes.unshift(type);\n break;\n }\n }\n } // Check to see if we have a response for the expected dataType\n\n\n if (dataTypes[0] in responses) {\n finalDataType = dataTypes[0];\n } else {\n // Try convertible dataTypes\n for (type in responses) {\n if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n finalDataType = type;\n break;\n }\n\n if (!firstDataType) {\n firstDataType = type;\n }\n } // Or just use first one\n\n\n finalDataType = finalDataType || firstDataType;\n } // If we found a dataType\n // We add the dataType to the list if needed\n // and return the corresponding response\n\n\n if (finalDataType) {\n if (finalDataType !== dataTypes[0]) {\n dataTypes.unshift(finalDataType);\n }\n\n return responses[finalDataType];\n }\n }\n /* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\n\n\n function ajaxConvert(s, response, jqXHR, isSuccess) {\n var conv2,\n current,\n conv,\n tmp,\n prev,\n converters = {},\n // Work with a copy of dataTypes in case we need to modify it for conversion\n dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n if (dataTypes[1]) {\n for (conv in s.converters) {\n converters[conv.toLowerCase()] = s.converters[conv];\n }\n }\n\n current = dataTypes.shift(); // Convert to each sequential dataType\n\n while (current) {\n if (s.responseFields[current]) {\n jqXHR[s.responseFields[current]] = response;\n } // Apply the dataFilter if provided\n\n\n if (!prev && isSuccess && s.dataFilter) {\n response = s.dataFilter(response, s.dataType);\n }\n\n prev = current;\n current = dataTypes.shift();\n\n if (current) {\n // There's only work to do if current dataType is non-auto\n if (current === \"*\") {\n current = prev; // Convert response if prev dataType is non-auto and differs from current\n } else if (prev !== \"*\" && prev !== current) {\n // Seek a direct converter\n conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n if (!conv) {\n for (conv2 in converters) {\n // If conv2 outputs current\n tmp = conv2.split(\" \");\n\n if (tmp[1] === current) {\n // If prev can be converted to accepted input\n conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n if (conv) {\n // Condense equivalence converters\n if (conv === true) {\n conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n } else if (converters[conv2] !== true) {\n current = tmp[0];\n dataTypes.unshift(tmp[1]);\n }\n\n break;\n }\n }\n }\n } // Apply converter (if not an equivalence)\n\n\n if (conv !== true) {\n // Unless errors are allowed to bubble, catch and return them\n if (conv && s.throws) {\n response = conv(response);\n } else {\n try {\n response = conv(response);\n } catch (e) {\n return {\n state: \"parsererror\",\n error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n };\n }\n }\n }\n }\n }\n }\n\n return {\n state: \"success\",\n data: response\n };\n }\n\n jQuery.extend({\n // Counter for holding the number of active queries\n active: 0,\n // Last-Modified header cache for next request\n lastModified: {},\n etag: {},\n ajaxSettings: {\n url: location.href,\n type: \"GET\",\n isLocal: rlocalProtocol.test(location.protocol),\n global: true,\n processData: true,\n async: true,\n contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n /*\n timeout: 0,\n data: null,\n dataType: null,\n username: null,\n password: null,\n cache: null,\n throws: false,\n traditional: false,\n headers: {},\n */\n accepts: {\n \"*\": allTypes,\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\"\n },\n contents: {\n xml: /\\bxml\\b/,\n html: /\\bhtml/,\n json: /\\bjson\\b/\n },\n responseFields: {\n xml: \"responseXML\",\n text: \"responseText\",\n json: \"responseJSON\"\n },\n // Data converters\n // Keys separate source (or catchall \"*\") and destination types with a single space\n converters: {\n // Convert anything to text\n \"* text\": String,\n // Text to html (true = no transformation)\n \"text html\": true,\n // Evaluate text as a json expression\n \"text json\": JSON.parse,\n // Parse text as xml\n \"text xml\": jQuery.parseXML\n },\n // For options that shouldn't be deep extended:\n // you can add your own custom options here if\n // and when you create one that shouldn't be\n // deep extended (see ajaxExtend)\n flatOptions: {\n url: true,\n context: true\n }\n },\n // Creates a full fledged settings object into target\n // with both ajaxSettings and settings fields.\n // If target is omitted, writes into ajaxSettings.\n ajaxSetup: function ajaxSetup(target, settings) {\n return settings ? // Building a settings object\n ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n ajaxExtend(jQuery.ajaxSettings, target);\n },\n ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n ajaxTransport: addToPrefiltersOrTransports(transports),\n // Main method\n ajax: function ajax(url, options) {\n // If url is an object, simulate pre-1.5 signature\n if (_typeof(url) === \"object\") {\n options = url;\n url = undefined;\n } // Force options to be an object\n\n\n options = options || {};\n\n var transport,\n // URL without anti-cache param\n cacheURL,\n // Response headers\n responseHeadersString,\n responseHeaders,\n // timeout handle\n timeoutTimer,\n // Url cleanup var\n urlAnchor,\n // Request state (becomes false upon send and true upon completion)\n completed,\n // To know if global events are to be dispatched\n fireGlobals,\n // Loop variable\n i,\n // uncached part of the url\n uncached,\n // Create the final options object\n s = jQuery.ajaxSetup({}, options),\n // Callbacks context\n callbackContext = s.context || s,\n // Context for global events is callbackContext if it is a DOM node or jQuery collection\n globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n // Deferreds\n deferred = jQuery.Deferred(),\n completeDeferred = jQuery.Callbacks(\"once memory\"),\n // Status-dependent callbacks\n _statusCode = s.statusCode || {},\n // Headers (they are sent all at once)\n requestHeaders = {},\n requestHeadersNames = {},\n // Default abort message\n strAbort = \"canceled\",\n // Fake xhr\n jqXHR = {\n readyState: 0,\n // Builds headers hashtable if needed\n getResponseHeader: function getResponseHeader(key) {\n var match;\n\n if (completed) {\n if (!responseHeaders) {\n responseHeaders = {};\n\n while (match = rheaders.exec(responseHeadersString)) {\n responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n }\n }\n\n match = responseHeaders[key.toLowerCase() + \" \"];\n }\n\n return match == null ? null : match.join(\", \");\n },\n // Raw string\n getAllResponseHeaders: function getAllResponseHeaders() {\n return completed ? responseHeadersString : null;\n },\n // Caches the header\n setRequestHeader: function setRequestHeader(name, value) {\n if (completed == null) {\n name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n requestHeaders[name] = value;\n }\n\n return this;\n },\n // Overrides response content-type header\n overrideMimeType: function overrideMimeType(type) {\n if (completed == null) {\n s.mimeType = type;\n }\n\n return this;\n },\n // Status-dependent callbacks\n statusCode: function statusCode(map) {\n var code;\n\n if (map) {\n if (completed) {\n // Execute the appropriate callbacks\n jqXHR.always(map[jqXHR.status]);\n } else {\n // Lazy-add the new callbacks in a way that preserves old ones\n for (code in map) {\n _statusCode[code] = [_statusCode[code], map[code]];\n }\n }\n }\n\n return this;\n },\n // Cancel the request\n abort: function abort(statusText) {\n var finalText = statusText || strAbort;\n\n if (transport) {\n transport.abort(finalText);\n }\n\n done(0, finalText);\n return this;\n }\n }; // Attach deferreds\n\n\n deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n // Handle falsy url in the settings object (#10093: consistency with old signature)\n // We also use the url parameter if available\n\n s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n if (s.crossDomain == null) {\n urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n // IE throws exception on accessing the href property if url is malformed,\n // e.g. http://example.com:80x/\n\n try {\n urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n // Anchor's host property isn't correctly set when s.url is relative\n\n urlAnchor.href = urlAnchor.href;\n s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n } catch (e) {\n // If there is an error parsing the URL, assume it is crossDomain,\n // it can be rejected by the transport if it is invalid\n s.crossDomain = true;\n }\n } // Convert data if not already a string\n\n\n if (s.data && s.processData && typeof s.data !== \"string\") {\n s.data = jQuery.param(s.data, s.traditional);\n } // Apply prefilters\n\n\n inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n if (completed) {\n return jqXHR;\n } // We can fire global events as of now if asked to\n // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n if (fireGlobals && jQuery.active++ === 0) {\n jQuery.event.trigger(\"ajaxStart\");\n } // Uppercase the type\n\n\n s.type = s.type.toUpperCase(); // Determine if request has content\n\n s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n // and/or If-None-Match header later on\n // Remove hash to simplify url manipulation\n\n cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n if (!s.hasContent) {\n // Remember the hash so we can put it back\n uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n if (s.data && (s.processData || typeof s.data === \"string\")) {\n cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n delete s.data;\n } // Add or update anti-cache param if needed\n\n\n if (s.cache === false) {\n cacheURL = cacheURL.replace(rantiCache, \"$1\");\n uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n s.data = s.data.replace(r20, \"+\");\n } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n if (s.ifModified) {\n if (jQuery.lastModified[cacheURL]) {\n jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n }\n\n if (jQuery.etag[cacheURL]) {\n jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n }\n } // Set the correct header, if data is being sent\n\n\n if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n } // Set the Accepts header for the server, depending on the dataType\n\n\n jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n for (i in s.headers) {\n jqXHR.setRequestHeader(i, s.headers[i]);\n } // Allow custom headers/mimetypes and early abort\n\n\n if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n // Abort if not done already and return\n return jqXHR.abort();\n } // Aborting is no longer a cancellation\n\n\n strAbort = \"abort\"; // Install callbacks on deferreds\n\n completeDeferred.add(s.complete);\n jqXHR.done(s.success);\n jqXHR.fail(s.error); // Get transport\n\n transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n if (!transport) {\n done(-1, \"No Transport\");\n } else {\n jqXHR.readyState = 1; // Send global event\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n } // If request was aborted inside ajaxSend, stop there\n\n\n if (completed) {\n return jqXHR;\n } // Timeout\n\n\n if (s.async && s.timeout > 0) {\n timeoutTimer = window.setTimeout(function () {\n jqXHR.abort(\"timeout\");\n }, s.timeout);\n }\n\n try {\n completed = false;\n transport.send(requestHeaders, done);\n } catch (e) {\n // Rethrow post-completion exceptions\n if (completed) {\n throw e;\n } // Propagate others as results\n\n\n done(-1, e);\n }\n } // Callback for when everything is done\n\n\n function done(status, nativeStatusText, responses, headers) {\n var isSuccess,\n success,\n error,\n response,\n modified,\n statusText = nativeStatusText; // Ignore repeat invocations\n\n if (completed) {\n return;\n }\n\n completed = true; // Clear timeout if it exists\n\n if (timeoutTimer) {\n window.clearTimeout(timeoutTimer);\n } // Dereference transport for early garbage collection\n // (no matter how long the jqXHR object will be used)\n\n\n transport = undefined; // Cache response headers\n\n responseHeadersString = headers || \"\"; // Set readyState\n\n jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n if (responses) {\n response = ajaxHandleResponses(s, jqXHR, responses);\n } // Use a noop converter for missing script but not if jsonp\n\n\n if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) {\n s.converters[\"text script\"] = function () {};\n } // Convert no matter what (that way responseXXX fields are always set)\n\n\n response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n if (isSuccess) {\n // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n if (s.ifModified) {\n modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n if (modified) {\n jQuery.lastModified[cacheURL] = modified;\n }\n\n modified = jqXHR.getResponseHeader(\"etag\");\n\n if (modified) {\n jQuery.etag[cacheURL] = modified;\n }\n } // if no content\n\n\n if (status === 204 || s.type === \"HEAD\") {\n statusText = \"nocontent\"; // if not modified\n } else if (status === 304) {\n statusText = \"notmodified\"; // If we have data, let's convert it\n } else {\n statusText = response.state;\n success = response.data;\n error = response.error;\n isSuccess = !error;\n }\n } else {\n // Extract error from statusText and normalize for non-aborts\n error = statusText;\n\n if (status || !statusText) {\n statusText = \"error\";\n\n if (status < 0) {\n status = 0;\n }\n }\n } // Set data for the fake xhr object\n\n\n jqXHR.status = status;\n jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n if (isSuccess) {\n deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n } else {\n deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n } // Status-dependent callbacks\n\n\n jqXHR.statusCode(_statusCode);\n _statusCode = undefined;\n\n if (fireGlobals) {\n globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n } // Complete\n\n\n completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n if (fireGlobals) {\n globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n if (! --jQuery.active) {\n jQuery.event.trigger(\"ajaxStop\");\n }\n }\n }\n\n return jqXHR;\n },\n getJSON: function getJSON(url, data, callback) {\n return jQuery.get(url, data, callback, \"json\");\n },\n getScript: function getScript(url, callback) {\n return jQuery.get(url, undefined, callback, \"script\");\n }\n });\n jQuery.each([\"get\", \"post\"], function (_i, method) {\n jQuery[method] = function (url, data, callback, type) {\n // Shift arguments if data argument was omitted\n if (isFunction(data)) {\n type = type || callback;\n callback = data;\n data = undefined;\n } // The url can be an options object (which then must have .url)\n\n\n return jQuery.ajax(jQuery.extend({\n url: url,\n type: method,\n dataType: type,\n data: data,\n success: callback\n }, jQuery.isPlainObject(url) && url));\n };\n });\n jQuery.ajaxPrefilter(function (s) {\n var i;\n\n for (i in s.headers) {\n if (i.toLowerCase() === \"content-type\") {\n s.contentType = s.headers[i] || \"\";\n }\n }\n });\n\n jQuery._evalUrl = function (url, options, doc) {\n return jQuery.ajax({\n url: url,\n // Make this explicit, since user can override this through ajaxSetup (#11264)\n type: \"GET\",\n dataType: \"script\",\n cache: true,\n async: false,\n global: false,\n // Only evaluate the response if it is successful (gh-4126)\n // dataFilter is not invoked for failure responses, so using it instead\n // of the default converter is kludgy but it works.\n converters: {\n \"text script\": function textScript() {}\n },\n dataFilter: function dataFilter(response) {\n jQuery.globalEval(response, options, doc);\n }\n });\n };\n\n jQuery.fn.extend({\n wrapAll: function wrapAll(html) {\n var wrap;\n\n if (this[0]) {\n if (isFunction(html)) {\n html = html.call(this[0]);\n } // The elements to wrap the target around\n\n\n wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n if (this[0].parentNode) {\n wrap.insertBefore(this[0]);\n }\n\n wrap.map(function () {\n var elem = this;\n\n while (elem.firstElementChild) {\n elem = elem.firstElementChild;\n }\n\n return elem;\n }).append(this);\n }\n\n return this;\n },\n wrapInner: function wrapInner(html) {\n if (isFunction(html)) {\n return this.each(function (i) {\n jQuery(this).wrapInner(html.call(this, i));\n });\n }\n\n return this.each(function () {\n var self = jQuery(this),\n contents = self.contents();\n\n if (contents.length) {\n contents.wrapAll(html);\n } else {\n self.append(html);\n }\n });\n },\n wrap: function wrap(html) {\n var htmlIsFunction = isFunction(html);\n return this.each(function (i) {\n jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n });\n },\n unwrap: function unwrap(selector) {\n this.parent(selector).not(\"body\").each(function () {\n jQuery(this).replaceWith(this.childNodes);\n });\n return this;\n }\n });\n\n jQuery.expr.pseudos.hidden = function (elem) {\n return !jQuery.expr.pseudos.visible(elem);\n };\n\n jQuery.expr.pseudos.visible = function (elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n };\n\n jQuery.ajaxSettings.xhr = function () {\n try {\n return new window.XMLHttpRequest();\n } catch (e) {}\n };\n\n var xhrSuccessStatus = {\n // File protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE <=9 only\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrSupported = jQuery.ajaxSettings.xhr();\n support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n support.ajax = xhrSupported = !!xhrSupported;\n jQuery.ajaxTransport(function (options) {\n var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n if (support.cors || xhrSupported && !options.crossDomain) {\n return {\n send: function send(headers, complete) {\n var i,\n xhr = options.xhr();\n xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n if (options.xhrFields) {\n for (i in options.xhrFields) {\n xhr[i] = options.xhrFields[i];\n }\n } // Override mime type if needed\n\n\n if (options.mimeType && xhr.overrideMimeType) {\n xhr.overrideMimeType(options.mimeType);\n } // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n\n\n if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n } // Set headers\n\n\n for (i in headers) {\n xhr.setRequestHeader(i, headers[i]);\n } // Callback\n\n\n _callback = function callback(type) {\n return function () {\n if (_callback) {\n _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n if (type === \"abort\") {\n xhr.abort();\n } else if (type === \"error\") {\n // Support: IE <=9 only\n // On a manual native abort, IE9 throws\n // errors on any property access that is not readyState\n if (typeof xhr.status !== \"number\") {\n complete(0, \"error\");\n } else {\n complete( // File: protocol always yields status 0; see #8605, #14207\n xhr.status, xhr.statusText);\n }\n } else {\n complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n // IE9 has no XHR2 but throws on binary (trac-11426)\n // For XHR2 non-text, let the caller handle it (gh-2498)\n (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n binary: xhr.response\n } : {\n text: xhr.responseText\n }, xhr.getAllResponseHeaders());\n }\n }\n };\n }; // Listen to events\n\n\n xhr.onload = _callback();\n errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n // Use onreadystatechange to replace onabort\n // to handle uncaught aborts\n\n if (xhr.onabort !== undefined) {\n xhr.onabort = errorCallback;\n } else {\n xhr.onreadystatechange = function () {\n // Check readyState before timeout as it changes\n if (xhr.readyState === 4) {\n // Allow onerror to be called first,\n // but that will not handle a native abort\n // Also, save errorCallback to a variable\n // as xhr.onerror cannot be accessed\n window.setTimeout(function () {\n if (_callback) {\n errorCallback();\n }\n });\n }\n };\n } // Create the abort callback\n\n\n _callback = _callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send(options.hasContent && options.data || null);\n } catch (e) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if (_callback) {\n throw e;\n }\n }\n },\n abort: function abort() {\n if (_callback) {\n _callback();\n }\n }\n };\n }\n }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n jQuery.ajaxPrefilter(function (s) {\n if (s.crossDomain) {\n s.contents.script = false;\n }\n }); // Install script dataType\n\n jQuery.ajaxSetup({\n accepts: {\n script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n },\n contents: {\n script: /\\b(?:java|ecma)script\\b/\n },\n converters: {\n \"text script\": function textScript(text) {\n jQuery.globalEval(text);\n return text;\n }\n }\n }); // Handle cache's special case and crossDomain\n\n jQuery.ajaxPrefilter(\"script\", function (s) {\n if (s.cache === undefined) {\n s.cache = false;\n }\n\n if (s.crossDomain) {\n s.type = \"GET\";\n }\n }); // Bind script tag hack transport\n\n jQuery.ajaxTransport(\"script\", function (s) {\n // This transport only deals with cross domain or forced-by-attrs requests\n if (s.crossDomain || s.scriptAttrs) {\n var script, _callback2;\n\n return {\n send: function send(_, complete) {\n script = jQuery(\"