{"version":3,"sources":["lazysizes.js","ls.bgset.js","ofi.js","svg4everybody.js","util.js","colcade.js","jquery.magnific-popup.js","sharer.js","swiper.js","wallop.js","waypoints.js","codyhouse/_1_anim-menu-btn.js","codyhouse/_2_flexi-header.js","codyhouse/_2_hiding-nav.js","accordion.js","animations.js","backtotop.js","brand.js","header.js","hero.js","modal.js","stickyshare.js","supports.js","tabs.js","video.js"],"names":["window","factory","lazySizes","document","lazysizes","lazySizesCfg","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","srcAttr","srcsetAttr","sizesAttr","minSize","customMedia","init","expFactor","hFac","loadMode","loadHidden","ricTimeout","throttleDelay","lazySizesConfig","lazysizesConfig","getElementsByClassName","cfg","noSupport","docElem","documentElement","Date","supportPicture","HTMLPictureElement","addEventListener","setTimeout","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","forEach","Array","prototype","hasClass","ele","cls","RegExp","test","addClass","setAttribute","trim","removeClass","reg","replace","addRemoveLoadEvents","dom","fn","add","action","evt","triggerEvent","elem","name","detail","noBubbles","noCancelable","event","createEvent","instance","initEvent","dispatchEvent","updatePolyfill","el","full","polyfill","picturefill","pf","src","reevaluate","elements","getCSS","style","getComputedStyle","getWidth","parent","width","offsetWidth","_lazysizesWidth","parentNode","rAF","firstFns","secondFns","fns","run","runFns","length","running","waiting","shift","rafBatch","queue","apply","this","arguments","push","hidden","_lsFlush","rAFIt","simple","that","args","debounce","func","timeout","timestamp","later","last","now","loader","preloadElems","isCompleted","resetPreloadingTimer","started","eLvW","elvH","eLtop","eLleft","eLright","eLbottom","isBodyHidden","lastTime","gDelay","rICTimeout","idleCallback","regImg","regIframe","supportScroll","navigator","userAgent","currentExpand","isLoading","lowRuns","resetPreloading","e","target","isVisible","body","isNestedVisible","elemExpand","outerRect","visible","offsetParent","getBoundingClientRect","left","right","top","bottom","checkElements","eLlen","i","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","defaultExpand","preloadExpand","lazyloadElems","_lazyRace","prematureUnveil","unveilElement","expand","clientHeight","clientWidth","_defEx","innerWidth","innerHeight","preloadAfterLoad","throttledCheckElements","isPriority","delay","switchLoadingClass","_lazyCache","rafSwitchLoadingClass","rafedSwitchLoadingClass","handleSources","source","sourceSrcset","lazyUnveil","isAuto","sizes","isImg","srcset","isPicture","firesLoad","defaultPrevented","nodeName","clearTimeout","call","getElementsByTagName","contentWindow","location","changeIframeSrc","isLoaded","complete","naturalWidth","loading","autoSizer","updateElem","afterScroll","altLoadmodeScrollListner","onload","_","MutationObserver","observe","childList","subtree","attributes","setInterval","readyState","checkElems","unveil","_aLSL","sizeElement","sources","len","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","fire","gW","module","exports","globalInstall","removeEventListener","bind","require","regWhite","regSplitSet","regSource","regType","regBgUrlEscape","allowedBackgroundSize","contain","cover","setTypeOrMedia","match","typeMatch","proxyLoad","_lazybgset","image","bg","currentSrc","useSrc","JSON","stringify","backgroundImage","_lazybgsetLoading","set","getAttribute","createElement","alt","sets","img","picture","ratio","optimumx","removeChild","Object","defineProperty","value","writable","split","display","className","appendChild","removeAttribute","createPicture","bgSize","getPropertyValue","backgroundSize","getBgSize","_lazysizesParentFit","objectFitImages","OFI","propRegex","testImg","Image","object-position","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","height","placeholder","onImageReady","callback","fixOne","parsed","fontFamily","props","exec","getStyle","ofi","skipTest","naturalHeight","descriptors","get","ss","keepSrcUsable","err","console","warn","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundPosition","backgroundRepeat","backgroundOrigin","fix","imgs","opts","startAutoMode","querySelectorAll","tagName","watchMQ","getOfiImageMaybe","HTMLImageElement","String","hijackAttributes","root","define","amd","svg4everybody","embed","svg","fragment","createDocumentFragment","viewBox","hasAttribute","clone","cloneNode","childNodes","firstChild","loadreadystatechange","xhr","onreadystatechange","cachedDocument","_cachedDocument","implementation","createHTMLDocument","innerHTML","responseText","_cachedTarget","_embeds","splice","map","item","id","getElementById","getSVGAncestor","node","toLowerCase","rawopts","inIframe","self","requests","uses","numberOfSvgUseElementsToBypass","oninterval","index","use","validate","srcSplit","url","join","XMLHttpRequest","open","send","Util","classList","contains","slice","remove","toggleClass","bool","setAttributes","attrs","key","getChildrenByClassName","children","childrenByClass","is","selector","nodeType","qa","setHeight","start","to","element","duration","cb","change","currentTime","animateHeight","progress","val","parseInt","scrollTo","final","scrollY","scrollTop","animateScroll","Math","easeInOutQuad","moveFocus","focus","activeElement","getIndexInArray","array","indexOf","cssSupports","property","CSS","supports","g","toUpperCase","extend","extended","deep","toString","merge","obj","hasOwnProperty","osHasReducedMotion","matchMedia","matchMediaObj","matches","Element","msMatchesSelector","webkitMatchesSelector","closest","s","parentElement","CustomEvent","params","bubbles","cancelable","undefined","initCustomEvent","Event","t","b","c","d","focusTab","detectClick","resetFocusTabs","detectTab","keyCode","outlineStyle","setProperty","Colcade","options","getQueryElement","colcadeGUID","instances","option","create","proto","a","GUID","htmlInit","attrParts","part","pair","makeArray","ary","isArray","querySelect","querySelector","errorCheck","guid","reload","_windowResizeHandler","onWindowResize","_loadHandler","onLoad","errors","columns","items","Error","updateColumns","updateItems","layout","getActiveColumns","filter","column","activeColumns","_layout","columnHeights","layoutItems","layoutItem","minHeight","min","offsetHeight","append","elems","getQueryItems","concat","prepend","measureColumnHeight","boundingRect","lastChildRect","lastElementChild","resizeTimeout","onDebouncedResize","isSameLength","isSameColumns","destroy","onReady","docReady","data","makeJQueryPlugin","$","jQuery","colcade","arg0","$elems","methodName","returnValue","each","methodCall","Zepto","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","MagnificPopup","_isJQ","_window","_mfpOn","f","ev","on","_getEl","appendTo","html","raw","_mfpTrigger","triggerHandler","st","callbacks","charAt","_getCloseBtn","type","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","constructor","appVersion","isLowIE","isIE8","all","isAndroid","isIOS","supportsTransition","v","pop","supportsTransitions","probablyMobile","popupsCache","isObj","toArray","isOpen","types","mainEl","eq","defaults","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","wrap","attr","_checkIfClose","container","contentContainer","preloader","tLoading","modules","n","closeBtnInside","template","values","close_replaceWith","alignTop","css","overflow","overflowY","overflowX","position","fixedBgPos","updateSize","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","mainClass","_addClassToMFP","updateItemHTML","prependTo","_lastFocusedEl","content","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","REMOVING_CLASS","detach","empty","_removeClassFromMFP","off","removeAttr","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","parseEl","markup","newContent","appendContent","preloaded","find","addGroup","eHandler","mfpEl","_openClick","eName","delegate","midClick","which","ctrlKey","metaKey","altKey","shiftKey","disableOn","isFunction","preventDefault","stopPropagation","updateStatus","status","text","stopImmediatePropagation","closeOnContent","closeOnBg","cName","scrollHeight","_parseMarkup","arr","EVENT_NS","replaceWith","scrollbarSize","scrollDiv","cssText","registerModule","jqEl","itemOpts","_hiddenClass","_inlinePlaceholder","_lastInlineElement","_putInlineElementsBack","after","hiddenClass","tNotFound","initInline","CLOSE_EVENT","getInline","inlineSt","inline","inlineElement","_ajaxCur","_removeAjaxCursor","_destroyAjaxRequest","req","abort","settings","cursor","tError","initAjax","ajax","getAjax","success","textStatus","jqXHR","temp","finished","error","loadError","_imgInterval","_getTitle","title","titleSrc","verticalFit","initImage","imgSt","resizeImage","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","counter","mfpSetInterval","getImage","guard","onLoadComplete","loaded","onLoadError","img_replaceWith","hasMozTransform","enabled","easing","opener","initZoom","zoomSt","zoom","openTimeout","animatedImg","getElToAnimate","newImg","transition","cssObj","zIndex","-webkit-backface-visibility","showMainContent","_allowZoom","_getItemToZoom","_getOffset","isLarge","offset","paddingTop","paddingBottom","MozTransform","_fixIframeBugs","isShowing","srcAction","patterns","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","substr","lastIndexOf","dataObj","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","next","prev","l","arrowLeft","arrowRight","click","_preloadTimeout","preloadNearbyImages","goTo","newIndex","p","preloadBefore","preloadAfter","_preloadItem","replaceSrc","m","initRetina","devicePixelRatio","retina","isNaN","max-width","w","Sharer","currentTarget","srcElement","share","getValue","startsWith","sharer","facebook","shareUrl","u","hashtag","linkedin","mini","twitter","hashtags","via","email","subject","isLink","whatsapp","telegram","pinterest","media","description","skype","sms","messenger","link","urlSharer","keys","str","encodeURIComponent","href","popWidth","popHeight","screenX","popParams","screenY","newWindow","button","dataset","fetch","templateUrl","then","response","json","message","innerText","global","Swiper","doc","blur","hash","win","history","screen","Dom7","context","els","tempParent","toCreate","unique","uniqueArray","Class","Methods","classes","j","toggle","arguments$1","attrName","dom7ElementDataStorage","dataKey","transform","elStyle","webkitTransform","webkitTransitionDuration","transitionDuration","assign","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","dom7EventData","unshift","parents","k","handleEvent","events","event$1","dom7LiveListeners","proxyListener","dom7Listeners","handlers","handler","dom7proxy","trigger","dataIndex","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","parseFloat","outerHeight","box","clientTop","clientLeft","scrollLeft","scrollX","textContent","compareWith","child","previousSibling","returnIndex","newChild","tempDiv","insertBefore","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","foundElements","found","matchedItems","toAdd","Utils","deleteProps","object","nextTick","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","OTransform","MsTransform","msTransform","m41","m42","parseUrlQuery","param","query","urlToParse","paramsPart","decodeURIComponent","isObject","o","len$1","nextSource","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","enumerable","Support","touch","Modernizr","maxTouchPoints","DocumentTouch","pointerEvents","PointerEvent","observer","passiveListener","supportsPassive","gestures","SwiperClass","eventsListeners","eventName","staticAccessors","components","configurable","priority","method","once","onceHandler","f7proxy","eventHandler","emit","useModulesParams","instanceParams","moduleName","useModules","modulesParams","moduleParams","modulePropName","moduleProp","moduleEventName","installModule","static","install","defineProperties","update","$el","isHorizontal","isVertical","size","updateSlides","$wrapperEl","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginBottom","slidesPerColumn","floor","ceil","slidesPerView","slidesPerColumnFill","max","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","row","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","-webkit-box-ordinal-group","-moz-box-ordinal-group","-ms-flex-order","-webkit-order","order","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","boxSizing$1","swiperSlideSize","centeredSlides","abs","effect","setWrapperSize","i$1","slidesGridItem","i$2","slidesGridItem$1","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesSize$1","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","translate","offsetCenter","slideVisibleClass","visibleSlidesIndexes","visibleSlides","slideProgress","minTranslate","slideBefore","slideAfter","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","loop","slideDuplicateClass","slideDuplicateActiveClass","nextSlide","slideNextClass","prevSlide","slidePrevClass","slideDuplicateNextClass","slideDuplicatePrevClass","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","swiper","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","destroyed","transition$1","transitionStart","autoHeight","dir","slideTo","initialSlide","allowSlideNext","allowSlidePrev","onSlideToWrapperTransitionEnd","slideToLoop","loopedSlides","slideNext","loopFix","_clientLeft","slidePrev","normalize","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","threshold","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","loopAdditionalSlides","prependSlides","appendSlides","diff","loopDestroy","grabCursor","setGrabCursor","moving","simulateTouch","isLocked","unsetGrabCursor","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","ie","edge","firefox","windows","electron","macos","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","Device","ios","androidChrome","desktop","cordova","phonegap","os","osVersion","webView","standalone","webview","pixelRatio","onResize","breakpoints","setBreakpoint","autoplay","paused","dummyEventAttached","dummyEventListener","touchEventsTarget","edgeSwipeDetection","edgeSwipeThreshold","freeMode","freeModeMomentum","freeModeMomentumRatio","freeModeMomentumBounce","freeModeMomentumBounceRatio","freeModeMomentumVelocityRatio","freeModeSticky","freeModeMinimumVelocity","touchRatio","touchAngle","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","allowTouchMove","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","preventClicks","preventClicksPropagation","preloadImages","updateOnImagesReady","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","containerModifierClass","slideClass","slideBlankClass","wrapperClass","prototypes","attachEvents","touchEvents","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","isTouchEvent","isTouched","isMoved","allowClick","currentX","targetTouches","pageX","currentY","pageY","startX","startY","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","shouldPreventDefault","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","diffX","diffY","sqrt","pow","atan2","PI","nested","startTranslate","allowMomentumBounce","disableParentSwiper","velocities","time","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","lastMoveEvent","velocityEvent","distance","velocity","momentumDuration","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","moveDistance","currentSlideSize","stopIndex","groupSize","navigation","nextEl","prevEl","onScroll","onClick","move","end","passive","cancel","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","directionChanged","needsReLoop","changeDirection","points","point","sort","wasLocked","lastSlidePosition","addClasses","classNames","suffixes","suffix","removeClasses","images","loadImage","imageEl","checkForComplete","onerror","imagesLoaded","imagesToLoad","extendedDefaults","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","shadowRoot","touchEventsTouch","touchEventsDesktop","clickTimeout","__proto__","spv","breakLoop","translateValue","newDirection","needUpdate","currentDirection","slideEl","deleteInstance","cleanStyles","extendDefaults","newDefaults","Device$1","Support$1","support","Browser","isEdge","isSafari","isUiWebView","Browser$1","browser","Resize","resize","resizeHandler","orientationChangeHandler","Observer","WebkitMutationObserver","attach","ObserverFunc","mutations","observerUpdate","characterData","observers","observeParents","containerParents","observeSlideChildren","disconnect","Observer$1","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","isSupported","hasFeature","isEventSupported","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","handle","mousewheel","releaseOnEdges","delta","rtlFactor","forceToAxis","invert","newEvent","sign","ignoreWheelEvents","sensitivity","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","getTime","enable","eventsTarged","disable","Navigation","ref","$nextEl","$prevEl","disabledClass","lockClass","onPrevClick","onNextClick","Pagination","pagination","current","paginationType","bullets","firstIndex","lastIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bullet","$bullet","bulletIndex","bulletActiveClass","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","formatFractionCurrent","formatFractionTotal","progressbarDirection","progressbarOpposite","scale","scaleX","scaleY","renderCustom","render","paginationHTML","numberOfBullets","renderBullet","bulletClass","renderFraction","currentClass","totalClass","renderProgressbar","progressbarFillClass","clickable","clickableClass","modifierClass","progressbarOppositeClass","Controller","LinearSpline","maxIndex","minIndex","guess","i1","i3","binarySearch","interpolate","x2","getInterpolateFunction","controller","spline","setTranslate$1","controlledTranslate","controlled","control","setControlledTranslate","by","inverse","setControlledTransition","a11y","makeElFocusable","addElRole","role","addElLabel","label","disableEl","enableEl","onEnterKey","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","Autoplay","$activeSlideEl","reverseDirection","stopOnLastSlide","pause","waitForTransition","onTransitionEnd","Fade","$slideEl","tx","ty","slideOpacity","fadeEffect","crossFade","opacity","eventTriggered","triggerEvents","hideOnClick","toEdge","fromEdge","isHidden","bulletElement","number","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","notificationClass","paginationUpdate","disableOnInteraction","onVisibilityChange","visibilityState","beforeTransitionStart","sliderFirstMove","touchEnd","beforeInit","overwriteParams","Wallop","selectorPool","buttonPreviousClass","buttonNextClass","itemClass","currentItemClass","showPreviousClass","showNextClass","hidePreviousClass","hideNextClass","carousel","whitelist","form","$selector","origOptions","userOptions","attrname","extendOptions","reset","buttonPrevious","buttonNext","bindEvents","createCustomEvent","currentItemIndex","allItemsArray","updateButtonStates","_this","WS","$$","lastItemIndex","removeAllHelperSettings","isForwards","previous","wallopEl","Number","keyCounter","allWaypoints","Waypoint","Adapter","adapter","horizontal","triggerPoint","group","Group","findOrCreate","Context","findOrCreateByElement","offsetAliases","queueTrigger","refresh","invokeAll","allWaypointsArray","waypointKey","destroyAll","disableAll","enableAll","refreshAll","viewportHeight","viewportWidth","adapters","continuous","bottom-in-view","right-in-view","requestAnimationFrameShim","contexts","oldWindowLoad","didScroll","didResize","oldScroll","waypoints","vertical","waypointContextKey","windowContext","createThrottledScrollHandler","createThrottledResizeHandler","waypoint","checkEmpty","horizontalEmpty","isEmptyObject","verticalEmpty","isWindow","handleResize","scrollHandler","handleScroll","isTouch","triggeredGroups","axes","newScroll","forward","backward","axisKey","wasBeforeTriggerPoint","nowAfterTriggerPoint","groupKey","flushTriggers","contextOffset","contextScroll","contextDimension","contextModifier","wasBeforeScroll","nowAfterScroll","triggeredForward","adjustment","oldTriggerPoint","elementOffset","freshWaypoint","findByElement","contextId","mozRequestAnimationFrame","webkitRequestAnimationFrame","byTriggerPoint","byReverseTriggerPoint","groups","clearTriggerQueues","triggerQueues","up","down","reverse","inArray","first","getWindow","defaultView","NoFrameworkAdapter","removeListeners","listeners","eventParts","namespace","ownerDocument","pageYOffset","pageXOffset","nsHandlers","includeMargin","computedStyle","menuBtns","btn","flexHeader","menuTrigger","firstFocusableElement","focusableEle","firstFocusable","getClientRects","getMenuFirstFocusable","focusMenu","hidingNav","mainNav","subNav","scrolling","previousTop","currentTop","scrollDelta","scrollOffset","headerHeight","navIsFixed","triggerMobile","triggerMobileClass","getTriggerMobileMenu","resetHideNav","hideNavScrollDown","hideNavScrollUp","initSecondaryNav","Accordion","showClass","multiItems","initAccordion","aria-expanded","aria-controls","aria-labelledby","initAccordionEvents","triggerAccordion","animateAccordion","initHeight","finalHeight","resetContentVisibility","closeSiblings","accordions","wrapper","backTop","checkBackToTop","windowTop","scrollDuration","header","checkHeaderVisible","linklist","VW","VH","AR","currentLink","slideshowInterval","imgW","imgH","IAR","canvas0","ctx0","getContext","canvas1","ctx1","canvas2","ctx2","canvas3","ctx3","IS_ACTIVE","isAnimating","currentImage","prevImage","imagesloaded","partMove","imagesList","linkList","partList","xpos","radius","alist","handleImageComplete","preInit","drawImages","ctx","xPrev","xNext","imgPrev","imgNext","globalAlpha","drawImage","clearRect","save","beginPath","arc","fill","globalCompositeOperation","changeImage","TweenMax","ease","Power1","easeInOut","onUpdate","onComplete","onListClick","trgt","selectLink","calculateScreen","resizeBg","image1","slideshowChange","addEL","wait","immediate","debounceResize","callNow","checkStickyShare","onCookiePolicyAccepted","fbLang","fbAsyncInit","FB","appId","fbAppId","autoLogAppEvents","xfbml","version","fbApiInit","loadScript","tabs","tabsWallop","tabsControls","play","video","videoId","show","playlistItems","hide"],"mappings":"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","file":"scripts.min.js","sourcesContent":["(function(window, factory) {\n var lazySizes = factory(window, window.document);\n window.lazySizes = lazySizes;\n if(typeof module == 'object' && module.exports){\n module.exports = lazySizes;\n }\n}(typeof window != 'undefined' ?\n window : {}, function l(window, document) {\n 'use strict';\n /*jshint eqnull:true */\n\n var lazysizes, lazySizesCfg;\n\n (function(){\n var prop;\n\n var lazySizesDefaults = {\n lazyClass: 'lazyload',\n loadedClass: 'lazyloaded',\n loadingClass: 'lazyloading',\n preloadClass: 'lazypreload',\n errorClass: 'lazyerror',\n //strictClass: 'lazystrict',\n autosizesClass: 'lazyautosizes',\n srcAttr: 'data-src',\n srcsetAttr: 'data-srcset',\n sizesAttr: 'data-sizes',\n //preloadAfterLoad: false,\n minSize: 40,\n customMedia: {},\n init: true,\n expFactor: 1.5,\n hFac: 0.8,\n loadMode: 2,\n loadHidden: true,\n ricTimeout: 0,\n throttleDelay: 125,\n };\n\n lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n for(prop in lazySizesDefaults){\n if(!(prop in lazySizesCfg)){\n lazySizesCfg[prop] = lazySizesDefaults[prop];\n }\n }\n })();\n\n if (!document || !document.getElementsByClassName) {\n return {\n init: function () {},\n cfg: lazySizesCfg,\n noSupport: true,\n };\n }\n\n var docElem = document.documentElement;\n\n var Date = window.Date;\n\n var supportPicture = window.HTMLPictureElement;\n\n var _addEventListener = 'addEventListener';\n\n var _getAttribute = 'getAttribute';\n\n var addEventListener = window[_addEventListener];\n\n var setTimeout = window.setTimeout;\n\n var requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n var requestIdleCallback = window.requestIdleCallback;\n\n var regPicture = /^picture$/i;\n\n var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n var regClassCache = {};\n\n var forEach = Array.prototype.forEach;\n\n var hasClass = function(ele, cls) {\n if(!regClassCache[cls]){\n regClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n }\n return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n };\n\n var addClass = function(ele, cls) {\n if (!hasClass(ele, cls)){\n ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n }\n };\n\n var removeClass = function(ele, cls) {\n var reg;\n if ((reg = hasClass(ele,cls))) {\n ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n }\n };\n\n var addRemoveLoadEvents = function(dom, fn, add){\n var action = add ? _addEventListener : 'removeEventListener';\n if(add){\n addRemoveLoadEvents(dom, fn);\n }\n loadEvents.forEach(function(evt){\n dom[action](evt, fn);\n });\n };\n\n var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n var event = document.createEvent('Event');\n\n if(!detail){\n detail = {};\n }\n\n detail.instance = lazysizes;\n\n event.initEvent(name, !noBubbles, !noCancelable);\n\n event.detail = detail;\n\n elem.dispatchEvent(event);\n return event;\n };\n\n var updatePolyfill = function (el, full){\n var polyfill;\n if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n if(full && full.src && !el[_getAttribute]('srcset')){\n el.setAttribute('srcset', full.src);\n }\n polyfill({reevaluate: true, elements: [el]});\n } else if(full && full.src){\n el.src = full.src;\n }\n };\n\n var getCSS = function (elem, style){\n return (getComputedStyle(elem, null) || {})[style];\n };\n\n var getWidth = function(elem, parent, width){\n width = width || elem.offsetWidth;\n\n while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n width = parent.offsetWidth;\n parent = parent.parentNode;\n }\n\n return width;\n };\n\n var rAF = (function(){\n var running, waiting;\n var firstFns = [];\n var secondFns = [];\n var fns = firstFns;\n\n var run = function(){\n var runFns = fns;\n\n fns = firstFns.length ? secondFns : firstFns;\n\n running = true;\n waiting = false;\n\n while(runFns.length){\n runFns.shift()();\n }\n\n running = false;\n };\n\n var rafBatch = function(fn, queue){\n if(running && !queue){\n fn.apply(this, arguments);\n } else {\n fns.push(fn);\n\n if(!waiting){\n waiting = true;\n (document.hidden ? setTimeout : requestAnimationFrame)(run);\n }\n }\n };\n\n rafBatch._lsFlush = run;\n\n return rafBatch;\n })();\n\n var rAFIt = function(fn, simple){\n return simple ?\n function() {\n rAF(fn);\n } :\n function(){\n var that = this;\n var args = arguments;\n rAF(function(){\n fn.apply(that, args);\n });\n }\n ;\n };\n\n var throttle = function(fn){\n var running;\n var lastTime = 0;\n var gDelay = lazySizesCfg.throttleDelay;\n var rICTimeout = lazySizesCfg.ricTimeout;\n var run = function(){\n running = false;\n lastTime = Date.now();\n fn();\n };\n var idleCallback = requestIdleCallback && rICTimeout > 49 ?\n function(){\n requestIdleCallback(run, {timeout: rICTimeout});\n\n if(rICTimeout !== lazySizesCfg.ricTimeout){\n rICTimeout = lazySizesCfg.ricTimeout;\n }\n } :\n rAFIt(function(){\n setTimeout(run);\n }, true)\n ;\n\n return function(isPriority){\n var delay;\n\n if((isPriority = isPriority === true)){\n rICTimeout = 33;\n }\n\n if(running){\n return;\n }\n\n running = true;\n\n delay = gDelay - (Date.now() - lastTime);\n\n if(delay < 0){\n delay = 0;\n }\n\n if(isPriority || delay < 9){\n idleCallback();\n } else {\n setTimeout(idleCallback, delay);\n }\n };\n };\n\n //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n var debounce = function(func) {\n var timeout, timestamp;\n var wait = 99;\n var run = function(){\n timeout = null;\n func();\n };\n var later = function() {\n var last = Date.now() - timestamp;\n\n if (last < wait) {\n setTimeout(later, wait - last);\n } else {\n (requestIdleCallback || run)(run);\n }\n };\n\n return function() {\n timestamp = Date.now();\n\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n };\n };\n\n var loader = (function(){\n var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n var regImg = /^img$/i;\n var regIframe = /^iframe$/i;\n\n var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n var shrinkExpand = 0;\n var currentExpand = 0;\n\n var isLoading = 0;\n var lowRuns = -1;\n\n var resetPreloading = function(e){\n isLoading--;\n if(!e || isLoading < 0 || !e.target){\n isLoading = 0;\n }\n };\n\n var isVisible = function (elem) {\n if (isBodyHidden == null) {\n isBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n }\n\n return isBodyHidden || (getCSS(elem.parentNode, 'visibility') != 'hidden' && getCSS(elem, 'visibility') != 'hidden');\n };\n\n var isNestedVisible = function(elem, elemExpand){\n var outerRect;\n var parent = elem;\n var visible = isVisible(elem);\n\n eLtop -= elemExpand;\n eLbottom += elemExpand;\n eLleft -= elemExpand;\n eLright += elemExpand;\n\n while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n visible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n if(visible && getCSS(parent, 'overflow') != 'visible'){\n outerRect = parent.getBoundingClientRect();\n visible = eLright > outerRect.left &&\n eLleft < outerRect.right &&\n eLbottom > outerRect.top - 1 &&\n eLtop < outerRect.bottom + 1\n ;\n }\n }\n\n return visible;\n };\n\n var checkElements = function() {\n var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n beforeExpandVal, defaultExpand, preloadExpand, hFac;\n var lazyloadElems = lazysizes.elements;\n\n if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n i = 0;\n\n lowRuns++;\n\n for(; i < eLlen; i++){\n\n if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n elemExpand = currentExpand;\n }\n\n if (!defaultExpand) {\n defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n lazySizesCfg.expand;\n\n lazysizes._defEx = defaultExpand;\n\n preloadExpand = defaultExpand * lazySizesCfg.expFactor;\n hFac = lazySizesCfg.hFac;\n isBodyHidden = null;\n\n if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n currentExpand = preloadExpand;\n lowRuns = 0;\n } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n currentExpand = defaultExpand;\n } else {\n currentExpand = shrinkExpand;\n }\n }\n\n if(beforeExpandVal !== elemExpand){\n eLvW = innerWidth + (elemExpand * hFac);\n elvH = innerHeight + elemExpand;\n elemNegativeExpand = elemExpand * -1;\n beforeExpandVal = elemExpand;\n }\n\n rect = lazyloadElems[i].getBoundingClientRect();\n\n if ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n (eLtop = rect.top) <= elvH &&\n (eLright = rect.right) >= elemNegativeExpand * hFac &&\n (eLleft = rect.left) <= eLvW &&\n (eLbottom || eLright || eLleft || eLtop) &&\n (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n unveilElement(lazyloadElems[i]);\n loadedSomething = true;\n if(isLoading > 9){break;}\n } else if(!loadedSomething && isCompleted && !autoLoadElem &&\n isLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n (preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n autoLoadElem = preloadElems[0] || lazyloadElems[i];\n }\n }\n\n if(autoLoadElem && !loadedSomething){\n unveilElement(autoLoadElem);\n }\n }\n };\n\n var throttledCheckElements = throttle(checkElements);\n\n var switchLoadingClass = function(e){\n var elem = e.target;\n\n if (elem._lazyCache) {\n delete elem._lazyCache;\n return;\n }\n\n resetPreloading(e);\n addClass(elem, lazySizesCfg.loadedClass);\n removeClass(elem, lazySizesCfg.loadingClass);\n addRemoveLoadEvents(elem, rafSwitchLoadingClass);\n triggerEvent(elem, 'lazyloaded');\n };\n var rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n var rafSwitchLoadingClass = function(e){\n rafedSwitchLoadingClass({target: e.target});\n };\n\n var changeIframeSrc = function(elem, src){\n try {\n elem.contentWindow.location.replace(src);\n } catch(e){\n elem.src = src;\n }\n };\n\n var handleSources = function(source){\n var customMedia;\n\n var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n source.setAttribute('media', customMedia);\n }\n\n if(sourceSrcset){\n source.setAttribute('srcset', sourceSrcset);\n }\n };\n\n var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n var src, srcset, parent, isPicture, event, firesLoad;\n\n if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n if(sizes){\n if(isAuto){\n addClass(elem, lazySizesCfg.autosizesClass);\n } else {\n elem.setAttribute('sizes', sizes);\n }\n }\n\n srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n src = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n if(isImg) {\n parent = elem.parentNode;\n isPicture = parent && regPicture.test(parent.nodeName || '');\n }\n\n firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n event = {target: elem};\n\n addClass(elem, lazySizesCfg.loadingClass);\n\n if(firesLoad){\n clearTimeout(resetPreloadingTimer);\n resetPreloadingTimer = setTimeout(resetPreloading, 2500);\n addRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n }\n\n if(isPicture){\n forEach.call(parent.getElementsByTagName('source'), handleSources);\n }\n\n if(srcset){\n elem.setAttribute('srcset', srcset);\n } else if(src && !isPicture){\n if(regIframe.test(elem.nodeName)){\n changeIframeSrc(elem, src);\n } else {\n elem.src = src;\n }\n }\n\n if(isImg && (srcset || isPicture)){\n updatePolyfill(elem, {src: src});\n }\n }\n\n if(elem._lazyRace){\n delete elem._lazyRace;\n }\n removeClass(elem, lazySizesCfg.lazyClass);\n\n rAF(function(){\n // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n var isLoaded = elem.complete && elem.naturalWidth > 1;\n\n if( !firesLoad || isLoaded){\n if (isLoaded) {\n addClass(elem, 'ls-is-cached');\n }\n switchLoadingClass(event);\n elem._lazyCache = true;\n setTimeout(function(){\n if ('_lazyCache' in elem) {\n delete elem._lazyCache;\n }\n }, 9);\n }\n if (elem.loading == 'lazy') {\n isLoading--;\n }\n }, true);\n });\n\n var unveilElement = function (elem){\n if (elem._lazyRace) {return;}\n var detail;\n\n var isImg = regImg.test(elem.nodeName);\n\n //allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n var isAuto = sizes == 'auto';\n\n if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n detail = triggerEvent(elem, 'lazyunveilread').detail;\n\n if(isAuto){\n autoSizer.updateElem(elem, true, elem.offsetWidth);\n }\n\n elem._lazyRace = true;\n isLoading++;\n\n lazyUnveil(elem, detail, isAuto, sizes, isImg);\n };\n\n var afterScroll = debounce(function(){\n lazySizesCfg.loadMode = 3;\n throttledCheckElements();\n });\n\n var altLoadmodeScrollListner = function(){\n if(lazySizesCfg.loadMode == 3){\n lazySizesCfg.loadMode = 2;\n }\n afterScroll();\n };\n\n var onload = function(){\n if(isCompleted){return;}\n if(Date.now() - started < 999){\n setTimeout(onload, 999);\n return;\n }\n\n\n isCompleted = true;\n\n lazySizesCfg.loadMode = 3;\n\n throttledCheckElements();\n\n addEventListener('scroll', altLoadmodeScrollListner, true);\n };\n\n return {\n _: function(){\n started = Date.now();\n\n lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n addEventListener('scroll', throttledCheckElements, true);\n\n addEventListener('resize', throttledCheckElements, true);\n\n if(window.MutationObserver){\n new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n } else {\n docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n setInterval(throttledCheckElements, 999);\n }\n\n addEventListener('hashchange', throttledCheckElements, true);\n\n //, 'fullscreenchange'\n ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n document[_addEventListener](name, throttledCheckElements, true);\n });\n\n if((/d$|^c/.test(document.readyState))){\n onload();\n } else {\n addEventListener('load', onload);\n document[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n setTimeout(onload, 20000);\n }\n\n if(lazysizes.elements.length){\n checkElements();\n rAF._lsFlush();\n } else {\n throttledCheckElements();\n }\n },\n checkElems: throttledCheckElements,\n unveil: unveilElement,\n _aLSL: altLoadmodeScrollListner,\n };\n })();\n\n\n var autoSizer = (function(){\n var autosizesElems;\n\n var sizeElement = rAFIt(function(elem, parent, event, width){\n var sources, i, len;\n elem._lazysizesWidth = width;\n width += 'px';\n\n elem.setAttribute('sizes', width);\n\n if(regPicture.test(parent.nodeName || '')){\n sources = parent.getElementsByTagName('source');\n for(i = 0, len = sources.length; i < len; i++){\n sources[i].setAttribute('sizes', width);\n }\n }\n\n if(!event.detail.dataAttr){\n updatePolyfill(elem, event.detail);\n }\n });\n var getSizeElement = function (elem, dataAttr, width){\n var event;\n var parent = elem.parentNode;\n\n if(parent){\n width = getWidth(elem, parent, width);\n event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n if(!event.defaultPrevented){\n width = event.detail.width;\n\n if(width && width !== elem._lazysizesWidth){\n sizeElement(elem, parent, event, width);\n }\n }\n }\n };\n\n var updateElementsSizes = function(){\n var i;\n var len = autosizesElems.length;\n if(len){\n i = 0;\n\n for(; i < len; i++){\n getSizeElement(autosizesElems[i]);\n }\n }\n };\n\n var debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n return {\n _: function(){\n autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n addEventListener('resize', debouncedUpdateElementsSizes);\n },\n checkElems: debouncedUpdateElementsSizes,\n updateElem: getSizeElement\n };\n })();\n\n var init = function(){\n if(!init.i && document.getElementsByClassName){\n init.i = true;\n autoSizer._();\n loader._();\n }\n };\n\n setTimeout(function(){\n if(lazySizesCfg.init){\n init();\n }\n });\n\n lazysizes = {\n cfg: lazySizesCfg,\n autoSizer: autoSizer,\n loader: loader,\n init: init,\n uP: updatePolyfill,\n aC: addClass,\n rC: removeClass,\n hC: hasClass,\n fire: triggerEvent,\n gW: getWidth,\n rAF: rAF,\n };\n\n return lazysizes;\n }\n));","(function(window, factory) {\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(window, function(window, document, lazySizes) {\n\t'use strict';\n\tif(!window.addEventListener){return;}\n\n\tvar lazySizesCfg = lazySizes.cfg;\n\tvar regWhite = /\\s+/g;\n\tvar regSplitSet = /\\s*\\|\\s+|\\s+\\|\\s*/g;\n\tvar regSource = /^(.+?)(?:\\s+\\[\\s*(.+?)\\s*\\])(?:\\s+\\[\\s*(.+?)\\s*\\])?$/;\n\tvar regType = /^\\s*\\(*\\s*type\\s*:\\s*(.+?)\\s*\\)*\\s*$/;\n\tvar regBgUrlEscape = /\\(|\\)|'/;\n\tvar allowedBackgroundSize = {contain: 1, cover: 1};\n\tvar proxyWidth = function(elem){\n\t\tvar width = lazySizes.gW(elem, elem.parentNode);\n\n\t\tif(!elem._lazysizesWidth || width > elem._lazysizesWidth){\n\t\t\telem._lazysizesWidth = width;\n\t\t}\n\t\treturn elem._lazysizesWidth;\n\t};\n\tvar getBgSize = function(elem){\n\t\tvar bgSize;\n\n\t\tbgSize = (getComputedStyle(elem) || {getPropertyValue: function(){}}).getPropertyValue('background-size');\n\n\t\tif(!allowedBackgroundSize[bgSize] && allowedBackgroundSize[elem.style.backgroundSize]){\n\t\t\tbgSize = elem.style.backgroundSize;\n\t\t}\n\n\t\treturn bgSize;\n\t};\n\tvar setTypeOrMedia = function(source, match){\n\t\tif(match){\n\t\t\tvar typeMatch = match.match(regType);\n\t\t\tif(typeMatch && typeMatch[1]){\n\t\t\t\tsource.setAttribute('type', typeMatch[1]);\n\t\t\t} else {\n\t\t\t\tsource.setAttribute('media', lazySizesCfg.customMedia[match] || match);\n\t\t\t}\n\t\t}\n\t};\n\tvar createPicture = function(sets, elem, img){\n\t\tvar picture = document.createElement('picture');\n\t\tvar sizes = elem.getAttribute(lazySizesCfg.sizesAttr);\n\t\tvar ratio = elem.getAttribute('data-ratio');\n\t\tvar optimumx = elem.getAttribute('data-optimumx');\n\n\t\tif(elem._lazybgset && elem._lazybgset.parentNode == elem){\n\t\t\telem.removeChild(elem._lazybgset);\n\t\t}\n\n\t\tObject.defineProperty(img, '_lazybgset', {\n\t\t\tvalue: elem,\n\t\t\twritable: true\n\t\t});\n\t\tObject.defineProperty(elem, '_lazybgset', {\n\t\t\tvalue: picture,\n\t\t\twritable: true\n\t\t});\n\n\t\tsets = sets.replace(regWhite, ' ').split(regSplitSet);\n\n\t\tpicture.style.display = 'none';\n\t\timg.className = lazySizesCfg.lazyClass;\n\n\t\tif(sets.length == 1 && !sizes){\n\t\t\tsizes = 'auto';\n\t\t}\n\n\t\tsets.forEach(function(set){\n\t\t\tvar match;\n\t\t\tvar source = document.createElement('source');\n\n\t\t\tif(sizes && sizes != 'auto'){\n\t\t\t\tsource.setAttribute('sizes', sizes);\n\t\t\t}\n\n\t\t\tif((match = set.match(regSource))){\n\t\t\t\tsource.setAttribute(lazySizesCfg.srcsetAttr, match[1]);\n\n\t\t\t\tsetTypeOrMedia(source, match[2]);\n\t\t\t\tsetTypeOrMedia(source, match[3]);\n\t\t\t} else {\n\t\t\t\tsource.setAttribute(lazySizesCfg.srcsetAttr, set);\n\t\t\t}\n\n\t\t\tpicture.appendChild(source);\n\t\t});\n\n\t\tif(sizes){\n\t\t\timg.setAttribute(lazySizesCfg.sizesAttr, sizes);\n\t\t\telem.removeAttribute(lazySizesCfg.sizesAttr);\n\t\t\telem.removeAttribute('sizes');\n\t\t}\n\t\tif(optimumx){\n\t\t\timg.setAttribute('data-optimumx', optimumx);\n\t\t}\n\t\tif(ratio) {\n\t\t\timg.setAttribute('data-ratio', ratio);\n\t\t}\n\n\t\tpicture.appendChild(img);\n\n\t\telem.appendChild(picture);\n\t};\n\n\tvar proxyLoad = function(e){\n\t\tif(!e.target._lazybgset){return;}\n\n\t\tvar image = e.target;\n\t\tvar elem = image._lazybgset;\n\t\tvar bg = image.currentSrc || image.src;\n\n\n\t\tif(bg){\n\t\t\tvar event = lazySizes.fire(elem, 'bgsetproxy', {\n\t\t\t\tsrc: bg,\n\t\t\t\tuseSrc: regBgUrlEscape.test(bg) ? JSON.stringify(bg) : bg,\n\t\t\t});\n\n\t\t\tif(!event.defaultPrevented){\n\t\t\t\telem.style.backgroundImage = 'url(' + event.detail.useSrc + ')';\n\t\t\t}\n\t\t}\n\n\t\tif(image._lazybgsetLoading){\n\t\t\tlazySizes.fire(elem, '_lazyloaded', {}, false, true);\n\t\t\tdelete image._lazybgsetLoading;\n\t\t}\n\t};\n\n\taddEventListener('lazybeforeunveil', function(e){\n\t\tvar set, image, elem;\n\n\t\tif(e.defaultPrevented || !(set = e.target.getAttribute('data-bgset'))){return;}\n\n\t\telem = e.target;\n\t\timage = document.createElement('img');\n\n\t\timage.alt = '';\n\n\t\timage._lazybgsetLoading = true;\n\t\te.detail.firesLoad = true;\n\n\t\tcreatePicture(set, elem, image);\n\n\t\tsetTimeout(function(){\n\t\t\tlazySizes.loader.unveil(image);\n\n\t\t\tlazySizes.rAF(function(){\n\t\t\t\tlazySizes.fire(image, '_lazyloaded', {}, true, true);\n\t\t\t\tif(image.complete) {\n\t\t\t\t\tproxyLoad({target: image});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t});\n\n\tdocument.addEventListener('load', proxyLoad, true);\n\n\twindow.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.detail.instance != lazySizes){return;}\n\t\tif(e.target._lazybgset && e.detail.dataAttr){\n\t\t\tvar elem = e.target._lazybgset;\n\t\t\tvar bgSize = getBgSize(elem);\n\n\t\t\tif(allowedBackgroundSize[bgSize]){\n\t\t\t\te.target._lazysizesParentFit = bgSize;\n\n\t\t\t\tlazySizes.rAF(function(){\n\t\t\t\t\te.target.setAttribute('data-parent-fit', bgSize);\n\t\t\t\t\tif(e.target._lazysizesParentFit){\n\t\t\t\t\t\tdelete e.target._lazysizesParentFit;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, true);\n\n\tdocument.documentElement.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.defaultPrevented || !e.target._lazybgset || e.detail.instance != lazySizes){return;}\n\t\te.detail.width = proxyWidth(e.target._lazybgset);\n\t});\n}));\n","/*! npm.im/object-fit-images 3.2.3 */\nvar objectFitImages = (function () {\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nreturn fix;\n\n}());\n","!function(root, factory) {\n \"function\" == typeof define && define.amd ? // AMD. Register as an anonymous module unless amdModuleId is set\n define([], function() {\n return root.svg4everybody = factory();\n }) : \"object\" == typeof module && module.exports ? // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory() : root.svg4everybody = factory();\n}(this, function() {\n /*! svg4everybody v2.1.7 | github.com/jonathantneal/svg4everybody */\n function embed(parent, svg, target) {\n // if the target exists\n if (target) {\n // create a document fragment to hold the contents of the target\n var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute(\"viewBox\") && target.getAttribute(\"viewBox\");\n // conditionally set the viewBox on the svg\n viewBox && svg.setAttribute(\"viewBox\", viewBox);\n // copy the contents of the clone into the fragment\n for (// clone the target\n var clone = target.cloneNode(!0); clone.childNodes.length; ) {\n fragment.appendChild(clone.firstChild);\n }\n // append the fragment into the svg\n parent.appendChild(fragment);\n }\n }\n function loadreadystatechange(xhr) {\n // listen to changes in the request\n xhr.onreadystatechange = function() {\n // if the request is ready\n if (4 === xhr.readyState) {\n // get the cached html document\n var cachedDocument = xhr._cachedDocument;\n // ensure the cached html document based on the xhr response\n cachedDocument || (cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument(\"\"),\n cachedDocument.body.innerHTML = xhr.responseText, xhr._cachedTarget = {}), // clear the xhr embeds list and embed each item\n xhr._embeds.splice(0).map(function(item) {\n // get the cached target\n var target = xhr._cachedTarget[item.id];\n // ensure the cached target\n target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)),\n // embed the target into the svg\n embed(item.parent, item.svg, target);\n });\n }\n }, // test the ready state change immediately\n xhr.onreadystatechange();\n }\n function svg4everybody(rawopts) {\n function oninterval() {\n // while the index exists in the live collection\n for (// get the cached index\n var index = 0; index < uses.length; ) {\n // get the current \n var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent);\n if (svg) {\n var src = use.getAttribute(\"xlink:href\") || use.getAttribute(\"href\");\n if (polyfill) {\n if (!opts.validate || opts.validate(src, svg, use)) {\n // remove the element\n parent.removeChild(use);\n // parse the src and get the url and id\n var srcSplit = src.split(\"#\"), url = srcSplit.shift(), id = srcSplit.join(\"#\");\n // if the link is external\n if (url.length) {\n // get the cached xhr request\n var xhr = requests[url];\n // ensure the xhr request exists\n xhr || (xhr = requests[url] = new XMLHttpRequest(), xhr.open(\"GET\", url), xhr.send(),\n xhr._embeds = []), // add the svg and id as an item to the xhr embeds list\n xhr._embeds.push({\n parent: parent,\n svg: svg,\n id: id\n }), // prepare the xhr ready state change event\n loadreadystatechange(xhr);\n } else {\n // embed the local id into the svg\n embed(parent, svg, document.getElementById(id));\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index, ++numberOfSvgUseElementsToBypass;\n }\n }\n } else {\n // increase the index when the previous value was not \"valid\"\n ++index;\n }\n }\n // continue the interval\n (!uses.length || uses.length - numberOfSvgUseElementsToBypass > 0) && requestAnimationFrame(oninterval, 67);\n }\n var polyfill, opts = Object(rawopts), newerIEUA = /\\bTrident\\/[567]\\b|\\bMSIE (?:9|10)\\.0\\b/, webkitUA = /\\bAppleWebKit\\/(\\d+)\\b/, olderEdgeUA = /\\bEdge\\/12\\.(\\d+)\\b/, edgeUA = /\\bEdge\\/.(\\d+)\\b/, inIframe = window.top !== window.self;\n polyfill = \"polyfill\" in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || edgeUA.test(navigator.userAgent) && inIframe;\n // create xhr requests object\n var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName(\"use\"), numberOfSvgUseElementsToBypass = 0;\n // conditionally start the interval if the polyfill is active\n polyfill && oninterval();\n }\n function getSVGAncestor(node) {\n for (var svg = node; \"svg\" !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {}\n return svg;\n }\n return svg4everybody;\n});\n","// Utility function\nfunction Util () {};\n\n/*\n\tclass manipulation functions\n*/\nUtil.hasClass = function(el, className) {\n if (el.classList) return el.classList.contains(className);\n else return !!el.className.match(new RegExp('(\\\\s|^)' + className + '(\\\\s|$)'));\n};\n\nUtil.addClass = function(el, className) {\n var classList = className.split(' ');\n if (el.classList) el.classList.add(classList[0]);\n else if (!Util.hasClass(el, classList[0])) el.className += \" \" + classList[0];\n if (classList.length > 1) Util.addClass(el, classList.slice(1).join(' '));\n};\n\nUtil.removeClass = function(el, className) {\n var classList = className.split(' ');\n if (el.classList) el.classList.remove(classList[0]);\n else if(Util.hasClass(el, classList[0])) {\n var reg = new RegExp('(\\\\s|^)' + classList[0] + '(\\\\s|$)');\n el.className=el.className.replace(reg, ' ');\n }\n if (classList.length > 1) Util.removeClass(el, classList.slice(1).join(' '));\n};\n\nUtil.toggleClass = function(el, className, bool) {\n if(bool) Util.addClass(el, className);\n else Util.removeClass(el, className);\n};\n\nUtil.setAttributes = function(el, attrs) {\n for(var key in attrs) {\n el.setAttribute(key, attrs[key]);\n }\n};\n\n/*\n DOM manipulation\n*/\nUtil.getChildrenByClassName = function(el, className) {\n var children = el.children,\n childrenByClass = [];\n for (var i = 0; i < el.children.length; i++) {\n if (Util.hasClass(el.children[i], className)) childrenByClass.push(el.children[i]);\n }\n return childrenByClass;\n};\n\nUtil.is = function(elem, selector) {\n if(selector.nodeType){\n return elem === selector;\n }\n\n var qa = (typeof(selector) === 'string' ? document.querySelectorAll(selector) : selector),\n length = qa.length,\n returnArr = [];\n\n while(length--){\n if(qa[length] === elem){\n return true;\n }\n }\n\n return false;\n};\n\n/*\n\tAnimate height of an element\n*/\nUtil.setHeight = function(start, to, element, duration, cb) {\n var change = to - start,\n currentTime = null;\n\n var animateHeight = function(timestamp){\n if (!currentTime) currentTime = timestamp;\n var progress = timestamp - currentTime;\n var val = parseInt((progress/duration)*change + start);\n element.style.height = val+\"px\";\n if(progress < duration) {\n window.requestAnimationFrame(animateHeight);\n } else {\n cb();\n }\n };\n\n //set the height of the element before starting animation -> fix bug on Safari\n element.style.height = start+\"px\";\n window.requestAnimationFrame(animateHeight);\n};\n\n/*\n\tSmooth Scroll\n*/\n\nUtil.scrollTo = function(final, duration, cb) {\n var start = window.scrollY || document.documentElement.scrollTop,\n currentTime = null;\n\n var animateScroll = function(timestamp){\n if (!currentTime) currentTime = timestamp;\n var progress = timestamp - currentTime;\n if(progress > duration) progress = duration;\n var val = Math.easeInOutQuad(progress, start, final-start, duration);\n window.scrollTo(0, val);\n if(progress < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n cb && cb();\n }\n };\n\n window.requestAnimationFrame(animateScroll);\n};\n\n/*\n Focus utility classes\n*/\n\n//Move focus to an element\nUtil.moveFocus = function (element) {\n if( !element ) element = document.getElementsByTagName(\"body\")[0];\n element.focus();\n if (document.activeElement !== element) {\n element.setAttribute('tabindex','-1');\n element.focus();\n }\n};\n\n/*\n Misc\n*/\n\nUtil.getIndexInArray = function(array, el) {\n return Array.prototype.indexOf.call(array, el);\n};\n\nUtil.cssSupports = function(property, value) {\n if('CSS' in window) {\n return CSS.supports(property, value);\n } else {\n var jsProperty = property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase();});\n return jsProperty in document.body.style;\n }\n};\n\n// merge a set of user options into plugin defaults\n// https://gomakethings.com/vanilla-javascript-version-of-jquery-extend/\nUtil.extend = function() {\n // Variables\n var extended = {};\n var deep = false;\n var i = 0;\n var length = arguments.length;\n\n // Check if a deep merge\n if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\n deep = arguments[0];\n i++;\n }\n\n // Merge the object into the extended object\n var merge = function (obj) {\n for ( var prop in obj ) {\n if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\n // If deep merge and property is an object, merge properties\n if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\n extended[prop] = extend( true, extended[prop], obj[prop] );\n } else {\n extended[prop] = obj[prop];\n }\n }\n }\n };\n\n // Loop through each object and conduct a merge\n for ( ; i < length; i++ ) {\n var obj = arguments[i];\n merge(obj);\n }\n\n return extended;\n};\n\n// Check if Reduced Motion is enabled\nUtil.osHasReducedMotion = function() {\n if(!window.matchMedia) return false;\n var matchMediaObj = window.matchMedia('(prefers-reduced-motion: reduce)');\n if(matchMediaObj) return matchMediaObj.matches;\n return false; // return false if not supported\n};\n\n/*\n\tPolyfills\n*/\n//Closest() method\nif (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\nif (!Element.prototype.closest) {\n Element.prototype.closest = function(s) {\n var el = this;\n if (!document.documentElement.contains(el)) return null;\n do {\n if (el.matches(s)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\n//Custom Event() constructor\nif ( typeof window.CustomEvent !== \"function\" ) {\n\n function CustomEvent ( event, params ) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent( 'CustomEvent' );\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n}\n\n/*\n\tAnimation curves\n*/\nMath.easeInOutQuad = function (t, b, c, d) {\n t /= d/2;\n if (t < 1) return c/2*t*t + b;\n t--;\n return -c/2 * (t*(t-2) - 1) + b;\n};\n\n\n/* JS Utility Classes */\n(function() {\n // make focus ring visible only for keyboard navigation (i.e., tab key)\n var focusTab = document.getElementsByClassName('js-tab-focus');\n function detectClick() {\n if(focusTab.length > 0) {\n resetFocusTabs(false);\n window.addEventListener('keydown', detectTab);\n }\n window.removeEventListener('mousedown', detectClick);\n };\n\n function detectTab(event) {\n if(event.keyCode !== 9) return;\n resetFocusTabs(true);\n window.removeEventListener('keydown', detectTab);\n window.addEventListener('mousedown', detectClick);\n };\n\n function resetFocusTabs(bool) {\n var outlineStyle = bool ? '' : 'none';\n for(var i = 0; i < focusTab.length; i++) {\n focusTab[i].style.setProperty('outline', outlineStyle);\n }\n };\n window.addEventListener('mousedown', detectClick);\n}());","/*!\n * Colcade v0.2.0\n * Lightweight masonry layout\n * by David DeSandro\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */\n /*global define: false, module: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Colcade = factory();\n }\n\n}( window, function factory() {\n\n// -------------------------- Colcade -------------------------- //\n\nfunction Colcade( element, options ) {\n element = getQueryElement( element );\n\n // do not initialize twice on same element\n if ( element && element.colcadeGUID ) {\n var instance = instances[ element.colcadeGUID ];\n instance.option( options );\n return instance;\n }\n\n this.element = element;\n // options\n this.options = {};\n this.option( options );\n // kick things off\n this.create();\n}\n\nvar proto = Colcade.prototype;\n\nproto.option = function( options ) {\n this.options = extend( this.options, options );\n};\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Colcade intances\nvar instances = {};\n\nproto.create = function() {\n this.errorCheck();\n // add guid for Colcade.data\n var guid = this.guid = ++GUID;\n this.element.colcadeGUID = guid;\n instances[ guid ] = this; // associate via id\n // update initial properties & layout\n this.reload();\n // events\n this._windowResizeHandler = this.onWindowResize.bind( this );\n this._loadHandler = this.onLoad.bind( this );\n window.addEventListener( 'resize', this._windowResizeHandler );\n this.element.addEventListener( 'load', this._loadHandler, true );\n};\n\nproto.errorCheck = function() {\n var errors = [];\n if ( !this.element ) {\n errors.push( 'Bad element: ' + this.element );\n }\n if ( !this.options.columns ) {\n errors.push( 'columns option required: ' + this.options.columns );\n }\n if ( !this.options.items ) {\n errors.push( 'items option required: ' + this.options.items );\n }\n\n if ( errors.length ) {\n throw new Error( '[Colcade error] ' + errors.join('. ') );\n }\n};\n\n// update properties and do layout\nproto.reload = function() {\n this.updateColumns();\n this.updateItems();\n this.layout();\n};\n\nproto.updateColumns = function() {\n this.columns = querySelect( this.options.columns, this.element );\n};\n\nproto.updateItems = function() {\n this.items = querySelect( this.options.items, this.element );\n};\n\nproto.getActiveColumns = function() {\n return this.columns.filter( function( column ) {\n var style = getComputedStyle( column );\n return style.display != 'none';\n });\n};\n\n// ----- layout ----- //\n\n// public, updates activeColumns\nproto.layout = function() {\n this.activeColumns = this.getActiveColumns();\n this._layout();\n};\n\n// private, does not update activeColumns\nproto._layout = function() {\n // reset column heights\n this.columnHeights = this.activeColumns.map( function() {\n return 0;\n });\n // layout all items\n this.layoutItems( this.items );\n};\n\nproto.layoutItems = function( items ) {\n items.forEach( this.layoutItem, this );\n};\n\nproto.layoutItem = function( item ) {\n // layout item by appending to column\n var minHeight = Math.min.apply( Math, this.columnHeights );\n var index = this.columnHeights.indexOf( minHeight );\n this.activeColumns[ index ].appendChild( item );\n // at least 1px, if item hasn't loaded\n // Not exactly accurate, but it's cool\n this.columnHeights[ index ] += item.offsetHeight || 1;\n};\n\n// ----- adding items ----- //\n\nproto.append = function( elems ) {\n var items = this.getQueryItems( elems );\n // add items to collection\n this.items = this.items.concat( items );\n // lay them out\n this.layoutItems( items );\n};\n\nproto.prepend = function( elems ) {\n var items = this.getQueryItems( elems );\n // add items to collection\n this.items = items.concat( this.items );\n // lay out everything\n this._layout();\n};\n\nproto.getQueryItems = function( elems ) {\n elems = makeArray( elems );\n var fragment = document.createDocumentFragment();\n elems.forEach( function( elem ) {\n fragment.appendChild( elem );\n });\n return querySelect( this.options.items, fragment );\n};\n\n// ----- measure column height ----- //\n\nproto.measureColumnHeight = function( elem ) {\n var boundingRect = this.element.getBoundingClientRect();\n this.activeColumns.forEach( function( column, i ) {\n // if elem, measure only that column\n // if no elem, measure all columns\n if ( !elem || column.contains( elem ) ) {\n var lastChildRect = column.lastElementChild.getBoundingClientRect();\n // not an exact calculation as it includes top border, and excludes item bottom margin\n this.columnHeights[ i ] = lastChildRect.bottom - boundingRect.top;\n }\n }, this );\n};\n\n// ----- events ----- //\n\nproto.onWindowResize = function() {\n clearTimeout( this.resizeTimeout );\n this.resizeTimeout = setTimeout( function() {\n this.onDebouncedResize();\n }.bind( this ), 100 );\n};\n\nproto.onDebouncedResize = function() {\n var activeColumns = this.getActiveColumns();\n // check if columns changed\n var isSameLength = activeColumns.length == this.activeColumns.length;\n var isSameColumns = true;\n this.activeColumns.forEach( function( column, i ) {\n isSameColumns = isSameColumns && column == activeColumns[i];\n });\n if ( isSameLength && isSameColumns ) {\n return;\n }\n // activeColumns changed\n this.activeColumns = activeColumns;\n this._layout();\n};\n\nproto.onLoad = function( event ) {\n this.measureColumnHeight( event.target );\n};\n\n// ----- destroy ----- //\n\nproto.destroy = function() {\n // move items back to container\n this.items.forEach( function( item ) {\n this.element.appendChild( item );\n }, this );\n // remove events\n window.removeEventListener( 'resize', this._windowResizeHandler );\n this.element.removeEventListener( 'load', this._loadHandler, true );\n // remove data\n delete this.element.colcadeGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- HTML init -------------------------- //\n\ndocReady( function() {\n var dataElems = querySelect('[data-colcade]');\n dataElems.forEach( htmlInit );\n});\n\nfunction htmlInit( elem ) {\n // convert attribute \"foo: bar, qux: baz\" into object\n var attr = elem.getAttribute('data-colcade');\n var attrParts = attr.split(',');\n var options = {};\n attrParts.forEach( function( part ) {\n var pair = part.split(':');\n var key = pair[0].trim();\n var value = pair[1].trim();\n options[ key ] = value;\n });\n\n new Colcade( elem, options );\n}\n\nColcade.data = function( elem ) {\n elem = getQueryElement( elem );\n var id = elem && elem.colcadeGUID;\n return id && instances[ id ];\n};\n\n// -------------------------- jQuery -------------------------- //\n\nColcade.makeJQueryPlugin = function( $ ) {\n $ = $ || window.jQuery;\n if ( !$ ) {\n return;\n }\n\n $.fn.colcade = function( arg0 /*, arg1 */) {\n // method call $().colcade( 'method', { options } )\n if ( typeof arg0 == 'string' ) {\n // shift arguments by 1\n var args = Array.prototype.slice.call( arguments, 1 );\n return methodCall( this, arg0, args );\n }\n // just $().colcade({ options })\n plainCall( this, arg0 );\n return this;\n };\n\n function methodCall( $elems, methodName, args ) {\n var returnValue;\n $elems.each( function( i, elem ) {\n // get instance\n var colcade = $.data( elem, 'colcade' );\n if ( !colcade ) {\n return;\n }\n // apply method, get return value\n var value = colcade[ methodName ].apply( colcade, args );\n // set return value if value is returned, use only first value\n returnValue = returnValue === undefined ? value : returnValue;\n });\n return returnValue !== undefined ? returnValue : $elems;\n }\n\n function plainCall( $elems, options ) {\n $elems.each( function( i, elem ) {\n var colcade = $.data( elem, 'colcade' );\n if ( colcade ) {\n // set options & init\n colcade.option( options );\n colcade.layout();\n } else {\n // initialize new instance\n colcade = new Colcade( elem, options );\n $.data( elem, 'colcade', colcade );\n }\n });\n }\n};\n\n// try making plugin\nColcade.makeJQueryPlugin();\n\n// -------------------------- utils -------------------------- //\n\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n var ary = [];\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n ary = obj;\n } else if ( obj && typeof obj.length == 'number' ) {\n // convert nodeList to array\n for ( var i=0; i < obj.length; i++ ) {\n ary.push( obj[i] );\n }\n } else {\n // array of single index\n ary.push( obj );\n }\n return ary;\n}\n\n// get array of elements\nfunction querySelect( selector, elem ) {\n elem = elem || document;\n var elems = elem.querySelectorAll( selector );\n return makeArray( elems );\n}\n\nfunction getQueryElement( elem ) {\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n return elem;\n}\n\nfunction docReady( onReady ) {\n if ( document.readyState == 'complete' ) {\n onReady();\n return;\n }\n document.addEventListener( 'DOMContentLoaded', onReady );\n}\n\n// -------------------------- end -------------------------- //\n\nreturn Colcade;\n\n}));\n","/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n if(mfp._hasScrollBar(windowHeight)){\n var s = mfp._getScrollbarSize();\n if(s) {\n windowStyles.marginRight = s;\n }\n }\n }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('
');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: 'The content could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t'
',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: 'The image could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t''+\n\t\t\t\t'
',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number. Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));","/**\n * Sharer.js (Meta Line Custom)\n *\n * @see https://ellisonleao.github.io/sharer.js/\n * @author Daniele De Nobili\n * @author Ellison Leao \n *\n * @version 0.3.8\n */\n\n(function(w, d) {\n 'use strict';\n\n /**\n * @constructor\n */\n var Sharer = function(elem) {\n this.elem = elem;\n };\n\n /**\n * @function init\n * @description bind the events for multiple sharer elements\n * @returns {Empty}\n */\n Sharer.init = function() {\n var elems = document.querySelectorAll('[data-sharer]'),\n i,\n l = elems.length;\n\n for (i = 0; i < l; i++) {\n elems[i].addEventListener('click', Sharer.add);\n }\n };\n\n /**\n * @function add\n * @description bind the share event for a single dom element\n * @returns {Empty}\n */\n Sharer.add = function(elem) {\n var target = elem.currentTarget || elem.srcElement;\n var sharer = new Sharer(target);\n sharer.share();\n };\n\n // instance methods\n Sharer.prototype = {\n constructor: Sharer,\n /**\n * @function getValue\n * @description Helper to get the attribute of a DOM element\n * @param {String} attr DOM element attribute\n * @returns {String|Empty} returns the attr value or empty string\n */\n getValue: function(attr) {\n var val = this.elem.getAttribute('data-' + attr);\n // handing facebook hashtag attribute\n if (val && attr === 'hashtag') {\n if (!val.startsWith('#')) {\n val = '#' + val;\n }\n }\n return val;\n },\n\n /**\n * @event share\n * @description Main share event. Will pop a window or redirect to a link\n * based on the data-sharer attribute.\n */\n share: function() {\n var sharer = this.getValue('sharer').toLowerCase(),\n sharers = {\n facebook: {\n shareUrl: 'https://www.facebook.com/sharer/sharer.php',\n params: {\n u: this.getValue('url'),\n hashtag: this.getValue('hashtag')\n }\n },\n linkedin: {\n shareUrl: 'https://www.linkedin.com/shareArticle',\n params: {\n url: this.getValue('url'),\n mini: true\n }\n },\n twitter: {\n shareUrl: 'https://twitter.com/intent/tweet/',\n params: {\n text: this.getValue('title'),\n url: this.getValue('url'),\n hashtags: this.getValue('hashtags'),\n via: this.getValue('via')\n }\n },\n email: {\n shareUrl: 'mailto:' + this.getValue('to') || '',\n params: {\n subject: this.getValue('subject'),\n body: this.getValue('title') + '\\n' + this.getValue('url')\n },\n isLink: true\n },\n whatsapp: {\n shareUrl: this.getValue('web') !== null ? 'https://api.whatsapp.com/send' : 'whatsapp://send',\n params: {\n text: this.getValue('title') + ' ' + this.getValue('url')\n },\n isLink: true\n },\n telegram: {\n shareUrl: 'tg://msg_url',\n params: {\n text: this.getValue('title'),\n url: this.getValue('url'),\n to: this.getValue('to')\n },\n isLink: true\n },\n pinterest: {\n shareUrl: 'https://www.pinterest.com/pin/create/button/',\n params: {\n url: this.getValue('url'),\n media: this.getValue('image'),\n description: this.getValue('description')\n }\n },\n skype: {\n shareUrl: 'https://web.skype.com/share',\n params: {\n url: this.getValue('url'),\n title: this.getValue('title')\n }\n },\n sms: {\n shareUrl: 'sms://',\n params: {\n body: this.getValue('body')\n }\n },\n messenger: {\n shareUrl: 'http://www.facebook.com/dialog/send',\n params: {\n link: this.getValue('url')\n }\n },\n },\n s = sharers[sharer];\n\n // custom popups sizes\n if (s) {\n s.width = this.getValue('width');\n s.height = this.getValue('height');\n }\n return s !== undefined ? this.urlSharer(s) : false;\n },\n /**\n * @event urlSharer\n * @param {Object} sharer\n */\n urlSharer: function(sharer) {\n var p = sharer.params || {},\n keys = Object.keys(p),\n i,\n str = keys.length > 0 ? '?' : '';\n for (i = 0; i < keys.length; i++) {\n if (str !== '?') {\n str += '&';\n }\n if (p[keys[i]]) {\n str += keys[i] + '=' + encodeURIComponent(p[keys[i]]);\n }\n }\n sharer.shareUrl += str;\n\n if (!sharer.isLink) {\n var popWidth = sharer.width || 600,\n popHeight = sharer.height || 480,\n left = window.innerWidth / 2 - popWidth / 2 + window.screenX,\n top = window.innerHeight / 2 - popHeight / 2 + window.screenY,\n popParams =\n 'scrollbars=no, width=' +\n popWidth +\n ', height=' +\n popHeight +\n ', top=' +\n top +\n ', left=' +\n left,\n newWindow = window.open(sharer.shareUrl, '', popParams);\n\n if (window.focus) {\n newWindow.focus();\n }\n } else {\n window.location.href = sharer.shareUrl;\n }\n }\n };\n\n // adding sharer events on domcontentload\n if (document.readyState === 'complete' || document.readyState !== 'loading') {\n Sharer.init();\n } else {\n document.addEventListener('DOMContentLoaded', Sharer.init);\n }\n\n // turbolinks 3 compatibility\n window.addEventListener('page:load', Sharer.init);\n\n // turbolinks 5 compatibility\n window.addEventListener('turbolinks:load', Sharer.init)\n \n // exporting sharer for external usage\n window.Sharer = Sharer;\n})(window, document);\n\n\n/**\n * Facebook Counter\n */\n(function(w, d) {\n var button = d.querySelector('.js-facebook-countable');\n\n if (button && button.dataset.url && 'fetch' in window && 'templateUrl' in window) {\n fetch(templateUrl + '/share-count/count-stats.php?url=' + encodeURIComponent(button.dataset.url))\n .then(function (response) {\n return response.json();\n })\n .then(function (data) {\n if (data.message) {\n console.error(data.message);\n\n return;\n }\n\n var counter = document.createElement('span');\n Util.addClass(counter, 'facebook-counter c-badge');\n counter.innerText = data.share.facebook;\n button.parentElement.appendChild(counter);\n });\n }\n})(window, document);\n","/**\n * Swiper 5.2.0\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://swiperjs.com\n *\n * Copyright 2014-2019 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 7, 2019\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Swiper = factory());\n}(this, function () { 'use strict';\n\n /**\n * SSR Window 1.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2018, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 18, 2018\n */\n var doc = (typeof document === 'undefined') ? {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: '',\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {},\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n },\n };\n },\n location: { hash: '' },\n } : document; // eslint-disable-line\n\n var win = (typeof window === 'undefined') ? {\n document: doc,\n navigator: {\n userAgent: '',\n },\n location: {},\n history: {},\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n },\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n } : window; // eslint-disable-line\n\n /**\n * Dom7 2.1.3\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * http://framework7.io/docs/dom.html\n *\n * Copyright 2019, Vladimir Kharlampidi\n * The iDangero.us\n * http://www.idangero.us/\n *\n * Licensed under MIT\n *\n * Released on: February 11, 2019\n */\n\n var Dom7 = function Dom7(arr) {\n var self = this;\n // Create array-like object\n for (var i = 0; i < arr.length; i += 1) {\n self[i] = arr[i];\n }\n self.length = arr.length;\n // Return collection with methods\n return this;\n };\n\n function $(selector, context) {\n var arr = [];\n var i = 0;\n if (selector && !context) {\n if (selector instanceof Dom7) {\n return selector;\n }\n }\n if (selector) {\n // String\n if (typeof selector === 'string') {\n var els;\n var tempParent;\n var html = selector.trim();\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(':~]/)) {\n // Pure ID selector\n els = [doc.getElementById(selector.trim().split('#')[1])];\n } else {\n // Other selectors\n els = (context || doc).querySelectorAll(selector.trim());\n }\n for (i = 0; i < els.length; i += 1) {\n if (els[i]) { arr.push(els[i]); }\n }\n }\n } else if (selector.nodeType || selector === win || selector === doc) {\n // Node/element\n arr.push(selector);\n } else if (selector.length > 0 && selector[0].nodeType) {\n // Array of elements or instance of Dom\n for (i = 0; i < selector.length; i += 1) {\n arr.push(selector[i]);\n }\n }\n }\n return new Dom7(arr);\n }\n\n $.fn = Dom7.prototype;\n $.Class = Dom7;\n $.Dom7 = Dom7;\n\n function unique(arr) {\n var uniqueArray = [];\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }\n }\n return uniqueArray;\n }\n\n // Classes and attributes\n function addClass(className) {\n if (typeof className === 'undefined') {\n return this;\n }\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.add(classes[i]); }\n }\n }\n return this;\n }\n function removeClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.remove(classes[i]); }\n }\n }\n return this;\n }\n function hasClass(className) {\n if (!this[0]) { return false; }\n return this[0].classList.contains(className);\n }\n function toggleClass(className) {\n var classes = className.split(' ');\n for (var i = 0; i < classes.length; i += 1) {\n for (var j = 0; j < this.length; j += 1) {\n if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') { this[j].classList.toggle(classes[i]); }\n }\n }\n return this;\n }\n function attr(attrs, value) {\n var arguments$1 = arguments;\n\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) { return this[0].getAttribute(attrs); }\n return undefined;\n }\n\n // Set attrs\n for (var i = 0; i < this.length; i += 1) {\n if (arguments$1.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n // eslint-disable-next-line\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n return this;\n }\n // eslint-disable-next-line\n function removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n return this;\n }\n function data(key, value) {\n var el;\n if (typeof value === 'undefined') {\n el = this[0];\n // Get value\n if (el) {\n if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute((\"data-\" + key));\n if (dataKey) {\n return dataKey;\n }\n return undefined;\n }\n return undefined;\n }\n\n // Set value\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }\n el.dom7ElementDataStorage[key] = value;\n }\n return this;\n }\n // Transforms\n // eslint-disable-next-line\n function transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransform = transform;\n elStyle.transform = transform;\n }\n return this;\n }\n function transition(duration) {\n if (typeof duration !== 'string') {\n duration = duration + \"ms\"; // eslint-disable-line\n }\n for (var i = 0; i < this.length; i += 1) {\n var elStyle = this[i].style;\n elStyle.webkitTransitionDuration = duration;\n elStyle.transitionDuration = duration;\n }\n return this;\n }\n // Events\n function on() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) { return; }\n var eventData = e.target.dom7EventData || [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n if ($(target).is(targetSelector)) { listener.apply(target, eventData); }\n else {\n var parents = $(target).parents(); // eslint-disable-line\n for (var k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }\n }\n }\n }\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n listener.apply(this, eventData);\n }\n var events = eventType.split(' ');\n var j;\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) { el.dom7Listeners = {}; }\n if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent,\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var event$1 = events[j];\n if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }\n if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }\n el.dom7LiveListeners[event$1].push({\n listener: listener,\n proxyListener: handleLiveEvent,\n });\n el.addEventListener(event$1, handleLiveEvent, capture);\n }\n }\n }\n return this;\n }\n function off() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var eventType = args[0];\n var targetSelector = args[1];\n var listener = args[2];\n var capture = args[3];\n if (typeof args[1] === 'function') {\n (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);\n targetSelector = undefined;\n }\n if (!capture) { capture = false; }\n\n var events = eventType.split(' ');\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = (void 0);\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n return this;\n }\n function trigger() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var events = args[0].split(' ');\n var eventData = args[1];\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var evt = (void 0);\n try {\n evt = new win.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true,\n });\n } catch (e) {\n evt = doc.createEvent('Event');\n evt.initEvent(event, true, true);\n evt.detail = eventData;\n }\n // eslint-disable-next-line\n el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n return this;\n }\n function transitionEnd(callback) {\n var events = ['webkitTransitionEnd', 'transitionend'];\n var dom = this;\n var i;\n function fireCallBack(e) {\n /* jshint validthis:true */\n if (e.target !== this) { return; }\n callback.call(this, e);\n for (i = 0; i < events.length; i += 1) {\n dom.off(events[i], fireCallBack);\n }\n }\n if (callback) {\n for (i = 0; i < events.length; i += 1) {\n dom.on(events[i], fireCallBack);\n }\n }\n return this;\n }\n function outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n return this[0].offsetWidth;\n }\n return null;\n }\n function outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n // eslint-disable-next-line\n var styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n return this[0].offsetHeight;\n }\n return null;\n }\n function offset() {\n if (this.length > 0) {\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = doc.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === win ? win.scrollY : el.scrollTop;\n var scrollLeft = el === win ? win.scrollX : el.scrollLeft;\n return {\n top: (box.top + scrollTop) - clientTop,\n left: (box.left + scrollLeft) - clientLeft,\n };\n }\n\n return null;\n }\n function styles() {\n if (this[0]) { return win.getComputedStyle(this[0], null); }\n return {};\n }\n function css(props, value) {\n var i;\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }\n } else {\n for (i = 0; i < this.length; i += 1) {\n // eslint-disable-next-line\n for (var prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n return this;\n }\n }\n if (arguments.length === 2 && typeof props === 'string') {\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n return this;\n }\n return this;\n }\n // Iterate over the collection passing elements to `callback`\n function each(callback) {\n // Don't bother continuing without a callback\n if (!callback) { return this; }\n // Iterate over the current collection\n for (var i = 0; i < this.length; i += 1) {\n // If the callback returns false\n if (callback.call(this[i], i, this[i]) === false) {\n // End the loop early\n return this;\n }\n }\n // Return `this` to allow chained DOM operations\n return this;\n }\n function filter(callback) {\n var matchedItems = [];\n var dom = this;\n for (var i = 0; i < dom.length; i += 1) {\n if (callback.call(dom[i], i, dom[i])) { matchedItems.push(dom[i]); }\n }\n return new Dom7(matchedItems);\n }\n // eslint-disable-next-line\n function html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : undefined;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n return this;\n }\n // eslint-disable-next-line\n function text(text) {\n if (typeof text === 'undefined') {\n if (this[0]) {\n return this[0].textContent.trim();\n }\n return null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n return this;\n }\n function is(selector) {\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') { return false; }\n if (typeof selector === 'string') {\n if (el.matches) { return el.matches(selector); }\n else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }\n else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }\n\n compareWith = $(selector);\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n } else if (selector === doc) { return el === doc; }\n else if (selector === win) { return el === win; }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) { return true; }\n }\n return false;\n }\n return false;\n }\n function index() {\n var child = this[0];\n var i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) { i += 1; }\n }\n return i;\n }\n return undefined;\n }\n // eslint-disable-next-line\n function eq(index) {\n if (typeof index === 'undefined') { return this; }\n var length = this.length;\n var returnIndex;\n if (index > length - 1) {\n return new Dom7([]);\n }\n if (index < 0) {\n returnIndex = length + index;\n if (returnIndex < 0) { return new Dom7([]); }\n return new Dom7([this[returnIndex]]);\n }\n return new Dom7([this[index]]);\n }\n function append() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var newChild;\n\n for (var k = 0; k < args.length; k += 1) {\n newChild = args[k];\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n }\n function prepend(newChild) {\n var i;\n var j;\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = doc.createElement('div');\n tempDiv.innerHTML = newChild;\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n return this;\n }\n function next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return new Dom7([this[0].nextElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.nextElementSibling) {\n var next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if ($(next).is(selector)) { nextEls.push(next); }\n } else { nextEls.push(next); }\n el = next;\n }\n return new Dom7(nextEls);\n }\n function prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return new Dom7([el.previousElementSibling]);\n }\n return new Dom7([]);\n }\n\n if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }\n return new Dom7([]);\n }\n return new Dom7([]);\n }\n function prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) { return new Dom7([]); }\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if ($(prev).is(selector)) { prevEls.push(prev); }\n } else { prevEls.push(prev); }\n el = prev;\n }\n return new Dom7(prevEls);\n }\n function parent(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) { parents.push(this[i].parentNode); }\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n return $(unique(parents));\n }\n function parents(selector) {\n var parents = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var parent = this[i].parentNode; // eslint-disable-line\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) { parents.push(parent); }\n } else {\n parents.push(parent);\n }\n parent = parent.parentNode;\n }\n }\n return $(unique(parents));\n }\n function closest(selector) {\n var closest = this; // eslint-disable-line\n if (typeof selector === 'undefined') {\n return new Dom7([]);\n }\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n return closest;\n }\n function find(selector) {\n var foundElements = [];\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n return new Dom7(foundElements);\n }\n function children(selector) {\n var children = []; // eslint-disable-line\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].childNodes;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector) {\n if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }\n } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n return new Dom7(unique(children));\n }\n function remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) { this[i].parentNode.removeChild(this[i]); }\n }\n return this;\n }\n function add() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var dom = this;\n var i;\n var j;\n for (i = 0; i < args.length; i += 1) {\n var toAdd = $(args[i]);\n for (j = 0; j < toAdd.length; j += 1) {\n dom[dom.length] = toAdd[j];\n dom.length += 1;\n }\n }\n return dom;\n }\n\n var Methods = {\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n attr: attr,\n removeAttr: removeAttr,\n data: data,\n transform: transform,\n transition: transition,\n on: on,\n off: off,\n trigger: trigger,\n transitionEnd: transitionEnd,\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n offset: offset,\n css: css,\n each: each,\n html: html,\n text: text,\n is: is,\n index: index,\n eq: eq,\n append: append,\n prepend: prepend,\n next: next,\n nextAll: nextAll,\n prev: prev,\n prevAll: prevAll,\n parent: parent,\n parents: parents,\n closest: closest,\n find: find,\n children: children,\n filter: filter,\n remove: remove,\n add: add,\n styles: styles,\n };\n\n Object.keys(Methods).forEach(function (methodName) {\n $.fn[methodName] = $.fn[methodName] || Methods[methodName];\n });\n\n var Utils = {\n deleteProps: function deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n },\n nextTick: function nextTick(callback, delay) {\n if ( delay === void 0 ) delay = 0;\n\n return setTimeout(callback, delay);\n },\n now: function now() {\n return Date.now();\n },\n getTranslate: function getTranslate(el, axis) {\n if ( axis === void 0 ) axis = 'x';\n\n var matrix;\n var curTransform;\n var transformMatrix;\n\n var curStyle = win.getComputedStyle(el, null);\n\n if (win.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[4]); }\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }\n // Crazy IE10 Matrix\n else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }\n // Normal Browsers\n else { curTransform = parseFloat(matrix[5]); }\n }\n return curTransform || 0;\n },\n parseUrlQuery: function parseUrlQuery(url) {\n var query = {};\n var urlToParse = url || win.location.href;\n var i;\n var params;\n var param;\n var length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });\n length = params.length;\n\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';\n }\n }\n return query;\n },\n isObject: function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n },\n extend: function extend() {\n var args = [], len$1 = arguments.length;\n while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];\n\n var to = Object(args[0]);\n for (var i = 1; i < args.length; i += 1) {\n var nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n Utils.extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n },\n };\n\n var Support = (function Support() {\n return {\n touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {\n return !!((win.navigator.maxTouchPoints > 0) || ('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));\n }()),\n\n pointerEvents: !!win.PointerEvent && ('maxTouchPoints' in win.navigator) && win.navigator.maxTouchPoints > 0,\n\n observer: (function checkObserver() {\n return ('MutationObserver' in win || 'WebkitMutationObserver' in win);\n }()),\n\n passiveListener: (function checkPassiveListener() {\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportsPassive = true;\n },\n });\n win.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }()),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in win;\n }()),\n };\n }());\n\n var SwiperClass = function SwiperClass(params) {\n if ( params === void 0 ) params = {};\n\n var self = this;\n self.params = params;\n\n // Events\n self.eventsListeners = {};\n\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach(function (eventName) {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n };\n\n var staticAccessors = { components: { configurable: true } };\n\n SwiperClass.prototype.on = function on (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }\n self.eventsListeners[event][method](handler);\n });\n return self;\n };\n\n SwiperClass.prototype.once = function once (events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') { return self; }\n function onceHandler() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n handler.apply(self, args);\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n };\n\n SwiperClass.prototype.off = function off (events, handler) {\n var self = this;\n if (!self.eventsListeners) { return self; }\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {\n self.eventsListeners[event].forEach(function (eventHandler, index) {\n if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.emit = function emit () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var self = this;\n if (!self.eventsListeners) { return self; }\n var events;\n var data;\n var context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsListeners && self.eventsListeners[event]) {\n var handlers = [];\n self.eventsListeners[event].forEach(function (eventHandler) {\n handlers.push(eventHandler);\n });\n handlers.forEach(function (eventHandler) {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n };\n\n SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n Utils.extend(instanceParams, module.params);\n }\n });\n };\n\n SwiperClass.prototype.useModules = function useModules (modulesParams) {\n if ( modulesParams === void 0 ) modulesParams = {};\n\n var instance = this;\n if (!instance.modules) { return; }\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n var moduleParams = modulesParams[moduleName] || {};\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach(function (modulePropName) {\n var moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(function (moduleEventName) {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n };\n\n staticAccessors.components.set = function (components) {\n var Class = this;\n if (!Class.use) { return; }\n Class.use(components);\n };\n\n SwiperClass.installModule = function installModule (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (!Class.prototype.modules) { Class.prototype.modules = {}; }\n var name = module.name || (((Object.keys(Class.prototype.modules).length) + \"_\" + (Utils.now())));\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach(function (key) {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach(function (key) {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n module.install.apply(Class, params);\n }\n return Class;\n };\n\n SwiperClass.use = function use (module) {\n var params = [], len = arguments.length - 1;\n while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];\n\n var Class = this;\n if (Array.isArray(module)) {\n module.forEach(function (m) { return Class.installModule(m); });\n return Class;\n }\n return Class.installModule.apply(Class, [ module ].concat( params ));\n };\n\n Object.defineProperties( SwiperClass, staticAccessors );\n\n function updateSize () {\n var swiper = this;\n var width;\n var height;\n var $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined') {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined') {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);\n height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);\n\n Utils.extend(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height,\n });\n }\n\n function updateSlides () {\n var swiper = this;\n var params = swiper.params;\n\n var $wrapperEl = swiper.$wrapperEl;\n var swiperSize = swiper.size;\n var rtl = swiper.rtlTranslate;\n var wrongRTL = swiper.wrongRTL;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = $wrapperEl.children((\".\" + (swiper.params.slideClass)));\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n\n function slidesForMargin(slideIndex) {\n if (!params.cssMode) { return true; }\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }\n\n var offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n var offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.snapGrid.length;\n\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }\n else { slides.css({ marginRight: '', marginBottom: '' }); }\n\n var slidesNumberEvenToRows;\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n }\n\n // Calc slides\n var slideSize;\n var slidesPerColumn = params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var slide = slides.eq(i);\n if (params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex = (void 0);\n var column = (void 0);\n var row = (void 0);\n if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n var columnsInGroup = groupIndex === 0\n ? params.slidesPerGroup\n : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup;\n\n newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);\n slide\n .css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - (column * slidesPerColumn);\n if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {\n row += 1;\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - (row * slidesPerRow);\n }\n slide.css(\n (\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left')),\n (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + \"px\"))\n );\n }\n if (slide.css('display') === 'none') { continue; } // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n var slideStyles = win.getComputedStyle(slide[0], null);\n var currentTransform = slide[0].style.transform;\n var currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal()\n ? slide.outerWidth(true)\n : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n var width = parseFloat(slideStyles.getPropertyValue('width'));\n var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));\n var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));\n var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));\n var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));\n var boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n }\n } else {\n var height = parseFloat(slideStyles.getPropertyValue('height'));\n var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));\n var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));\n var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));\n var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));\n var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing$1 && boxSizing$1 === 'border-box') {\n slideSize = height + marginTop + marginBottom;\n } else {\n slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n }\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n } else {\n slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;\n if (params.roundLengths) { slideSize = Math.floor(slideSize); }\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = slideSize + \"px\";\n } else {\n slides[i].style.height = slideSize + \"px\";\n }\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }\n if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }\n if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n var newSlidesGrid;\n\n if (\n rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") });\n }\n if (params.setWrapperSize) {\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + \"px\") }); }\n if (params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {\n var slidesGridItem = snapGrid[i$1];\n if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }\n if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }\n }\n snapGrid = newSlidesGrid;\n }\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {\n var slidesGridItem$1 = snapGrid[i$2];\n if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }\n if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem$1);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) { snapGrid = [0]; }\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) { slides.filter(slidesForMargin).css({ marginLeft: (spaceBetween + \"px\") }); }\n else { slides.filter(slidesForMargin).css({ marginRight: (spaceBetween + \"px\") }); }\n } else { slides.filter(slidesForMargin).css({ marginBottom: (spaceBetween + \"px\") }); }\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n var allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n var maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(function (snap) {\n if (snap < 0) { return -offsetBefore; }\n if (snap > maxSnap) { return maxSnap + offsetAfter; }\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n var allSlidesSize$1 = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize$1 += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize$1 -= params.spaceBetween;\n if (allSlidesSize$1 < swiperSize) {\n var allSlidesOffset = (swiperSize - allSlidesSize$1) / 2;\n snapGrid.forEach(function (snap, snapIndex) {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach(function (snap, snapIndex) {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Utils.extend(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid,\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) { swiper.checkOverflow(); }\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n }\n\n function updateAutoHeight (speed) {\n var swiper = this;\n var activeSlides = [];\n var newHeight = 0;\n var i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index = swiper.activeIndex + i;\n if (index > swiper.slides.length) { break; }\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + \"px\")); }\n }\n\n function updateSlidesOffset () {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n }\n\n function updateSlidesProgress (translate) {\n if ( translate === void 0 ) translate = (this && this.translate) || 0;\n\n var swiper = this;\n var params = swiper.params;\n\n var slides = swiper.slides;\n var rtl = swiper.rtlTranslate;\n\n if (slides.length === 0) { return; }\n if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }\n\n var offsetCenter = -translate;\n if (rtl) { offsetCenter = translate; }\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (var i = 0; i < slides.length; i += 1) {\n var slide = slides[i];\n var slideProgress = (\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset\n ) / (slide.swiperSlideSize + params.spaceBetween);\n if (params.watchSlidesVisibility) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1)\n || (slideAfter > 1 && slideAfter <= swiper.size)\n || (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n }\n\n function updateProgress (translate) {\n var swiper = this;\n if (typeof translate === 'undefined') {\n var multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0;\n }\n var params = swiper.params;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress;\n var isBeginning = swiper.isBeginning;\n var isEnd = swiper.isEnd;\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / (translatesDiff);\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Utils.extend(swiper, {\n progress: progress,\n isBeginning: isBeginning,\n isEnd: isEnd,\n });\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n }\n\n function updateSlidesClasses () {\n var swiper = this;\n\n var slides = swiper.slides;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n var realIndex = swiper.realIndex;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(((params.slideActiveClass) + \" \" + (params.slideNextClass) + \" \" + (params.slidePrevClass) + \" \" + (params.slideDuplicateActiveClass) + \" \" + (params.slideDuplicateNextClass) + \" \" + (params.slideDuplicatePrevClass)));\n\n var activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\"));\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\"))\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n var nextSlide = activeSlide.nextAll((\".\" + (params.slideClass))).eq(0).addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n var prevSlide = activeSlide.prevAll((\".\" + (params.slideClass))).eq(0).addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (nextSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \":not(.\" + (params.slideDuplicateClass) + \")[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \"[data-swiper-slide-index=\\\"\" + (prevSlide.attr('data-swiper-slide-index')) + \"\\\"]\"))\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n }\n\n function updateActiveIndex (newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n var previousIndex = swiper.activeIndex;\n var previousRealIndex = swiper.realIndex;\n var previousSnapIndex = swiper.snapIndex;\n var activeIndex = newActiveIndex;\n var snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n snapIndex = Math.floor(activeIndex / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n\n Utils.extend(swiper, {\n snapIndex: snapIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n }\n\n function updateClickedSlide (e) {\n var swiper = this;\n var params = swiper.params;\n var slide = $(e.target).closest((\".\" + (params.slideClass)))[0];\n var slideFound = false;\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) { slideFound = true; }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n }\n\n var update = {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide,\n };\n\n function getTranslate (axis) {\n if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';\n\n var swiper = this;\n\n var params = swiper.params;\n var rtl = swiper.rtlTranslate;\n var translate = swiper.translate;\n var $wrapperEl = swiper.$wrapperEl;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);\n if (rtl) { currentTranslate = -currentTranslate; }\n\n return currentTranslate || 0;\n }\n\n function setTranslate (translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var wrapperEl = swiper.wrapperEl;\n var progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform((\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\"));\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n }\n\n function minTranslate () {\n return (-this.snapGrid[0]);\n }\n\n function maxTranslate () {\n return (-this.snapGrid[this.snapGrid.length - 1]);\n }\n\n function translateTo (translate, speed, runCallbacks, translateBounds, internal) {\n var obj;\n\n if ( translate === void 0 ) translate = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n if ( translateBounds === void 0 ) translateBounds = true;\n var swiper = this;\n\n var params = swiper.params;\n var wrapperEl = swiper.wrapperEl;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var minTranslate = swiper.minTranslate();\n var maxTranslate = swiper.maxTranslate();\n var newTranslate;\n if (translateBounds && translate > minTranslate) { newTranslate = minTranslate; }\n else if (translateBounds && translate < maxTranslate) { newTranslate = maxTranslate; }\n else { newTranslate = translate; }\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -newTranslate, obj.behavior = 'smooth', obj ));\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n var translate = {\n getTranslate: getTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate,\n translateTo: translateTo,\n };\n\n function setTransition (duration, byController) {\n var swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n }\n\n function transitionStart (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var params = swiper.params;\n var previousIndex = swiper.previousIndex;\n if (params.cssMode) { return; }\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n swiper.emit('slideChangeTransitionStart');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n }\n\n function transitionEnd$1 (runCallbacks, direction) {\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var previousIndex = swiper.previousIndex;\n var params = swiper.params;\n swiper.animating = false;\n if (params.cssMode) { return; }\n swiper.setTransition(0);\n\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) { dir = 'next'; }\n else if (activeIndex < previousIndex) { dir = 'prev'; }\n else { dir = 'reset'; }\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n swiper.emit('slideChangeTransitionEnd');\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n }\n\n var transition$1 = {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd$1,\n };\n\n function slideTo (index, speed, runCallbacks, internal) {\n var obj;\n\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n var swiper = this;\n var slideIndex = index;\n if (slideIndex < 0) { slideIndex = 0; }\n\n var params = swiper.params;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var previousIndex = swiper.previousIndex;\n var activeIndex = swiper.activeIndex;\n var rtl = swiper.rtlTranslate;\n var wrapperEl = swiper.wrapperEl;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n var translate = -snapGrid[snapIndex];\n\n // Update progress\n swiper.updateProgress(translate);\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) { return false; }\n }\n }\n\n var direction;\n if (slideIndex > activeIndex) { direction = 'next'; }\n else if (slideIndex < activeIndex) { direction = 'prev'; }\n else { direction = 'reset'; }\n\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n wrapperEl.scrollTo(( obj = {}, obj[isH ? 'left' : 'top'] = -translate, obj.behavior = 'smooth', obj ));\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -translate;\n }\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n }\n\n function slideToLoop (index, speed, runCallbacks, internal) {\n if ( index === void 0 ) index = 0;\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideNext (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slidePrev (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n var params = swiper.params;\n var animating = swiper.animating;\n var snapGrid = swiper.snapGrid;\n var slidesGrid = swiper.slidesGrid;\n var rtlTranslate = swiper.rtlTranslate;\n\n if (params.loop) {\n if (animating) { return false; }\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) { return -Math.floor(Math.abs(val)); }\n return Math.floor(val);\n }\n var normalizedTranslate = normalize(translate);\n var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });\n var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });\n\n var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n snapGrid.forEach(function (snap) {\n if (!prevSnap && normalizedTranslate >= snap) { prevSnap = snap; }\n });\n }\n var prevIndex;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideReset (speed, runCallbacks, internal) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n\n var swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n }\n\n /* eslint no-unused-vars: \"off\" */\n function slideToClosest (speed, runCallbacks, internal, threshold) {\n if ( speed === void 0 ) speed = this.params.speed;\n if ( runCallbacks === void 0 ) runCallbacks = true;\n if ( threshold === void 0 ) threshold = 0.5;\n\n var swiper = this;\n var index = swiper.activeIndex;\n var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);\n\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n var prevSnap = swiper.snapGrid[snapIndex - 1];\n var currentSnap$1 = swiper.snapGrid[snapIndex];\n if ((translate - prevSnap) <= (currentSnap$1 - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.snapGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n }\n\n function slideToClickedSlide () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.clickedIndex;\n var realIndex;\n if (params.loop) {\n if (swiper.animating) { return; }\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n (slideToIndex < swiper.loopedSlides - (slidesPerView / 2))\n || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children((\".\" + (params.slideClass) + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + (params.slideDuplicateClass) + \")\"))\n .eq(0)\n .index();\n\n Utils.nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n\n var slide = {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide,\n };\n\n function loopCreate () {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n // Remove duplicated slides\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass))).remove();\n\n var slides = $wrapperEl.children((\".\" + (params.slideClass)));\n\n if (params.loopFillGroupWithBlank) {\n var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (var i = 0; i < blankSlidesNum; i += 1) {\n var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + \" \" + (params.slideBlankClass)));\n $wrapperEl.append(blankNode);\n }\n slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }\n\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n var prependSlides = [];\n var appendSlides = [];\n slides.each(function (index, el) {\n var slide = $(el);\n if (index < swiper.loopedSlides) { appendSlides.push(el); }\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }\n slide.attr('data-swiper-slide-index', index);\n });\n for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {\n $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {\n $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n }\n\n function loopFix () {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var slides = swiper.slides;\n var loopedSlides = swiper.loopedSlides;\n var allowSlidePrev = swiper.allowSlidePrev;\n var allowSlideNext = swiper.allowSlideNext;\n var snapGrid = swiper.snapGrid;\n var rtl = swiper.rtlTranslate;\n var newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n var snapTranslate = -snapGrid[activeIndex];\n var diff = snapTranslate - swiper.getTranslate();\n\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;\n newIndex += loopedSlides;\n var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged$1 && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n }\n\n function loopDestroy () {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var slides = swiper.slides;\n $wrapperEl.children((\".\" + (params.slideClass) + \".\" + (params.slideDuplicateClass) + \",.\" + (params.slideClass) + \".\" + (params.slideBlankClass))).remove();\n slides.removeAttr('data-swiper-slide-index');\n }\n\n var loop = {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy,\n };\n\n function setGrabCursor (moving) {\n var swiper = this;\n if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n }\n\n function unsetGrabCursor () {\n var swiper = this;\n if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) { return; }\n swiper.el.style.cursor = '';\n }\n\n var grabCursor = {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor,\n };\n\n function appendSlide (slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.append(slides[i]); }\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n }\n\n function prependSlide (slides) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n var newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) { $wrapperEl.prepend(slides[i]); }\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n }\n\n function addSlide (index, slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl;\n var params = swiper.params;\n var activeIndex = swiper.activeIndex;\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n var slidesBuffer = [];\n for (var i = baseLength - 1; i >= index; i -= 1) {\n var currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {\n if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {\n $wrapperEl.append(slidesBuffer[i$2]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeSlide (slidesIndexes) {\n var swiper = this;\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl;\n var activeIndex = swiper.activeIndex;\n\n var activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children((\".\" + (params.slideClass)));\n }\n var newActiveIndex = activeIndexBuffer;\n var indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (var i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }\n if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && Support.observer)) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n }\n\n function removeAllSlides () {\n var swiper = this;\n\n var slidesIndexes = [];\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n }\n\n var manipulation = {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n addSlide: addSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides,\n };\n\n var Device = (function Device() {\n var platform = win.navigator.platform;\n var ua = win.navigator.userAgent;\n\n var device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!(win.cordova || win.phonegap),\n phonegap: !!(win.cordova || win.phonegap),\n electron: false,\n };\n\n var screenWidth = win.screen.width;\n var screenHeight = win.screen.height;\n\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n var ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n var edge = ua.indexOf('Edge/') >= 0;\n var firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n var windows = platform === 'Win32';\n var electron = ua.toLowerCase().indexOf('electron') >= 0;\n var macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n if (!ipad\n && macos\n && Support.touch\n && (\n (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9\n || (screenWidth === 834 && screenHeight === 1194) // Pro 11\n || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5\n || (screenWidth === 768 && screenHeight === 1024) // other\n )\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n macos = false;\n }\n\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox;\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Webview\n device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || win.navigator.standalone))\n || (win.matchMedia && win.matchMedia('(display-mode: standalone)').matches);\n device.webview = device.webView;\n device.standalone = device.webView;\n\n // Desktop\n device.desktop = !(device.ios || device.android) || electron;\n if (device.desktop) {\n device.electron = electron;\n device.macos = macos;\n device.windows = windows;\n if (device.macos) {\n device.os = 'macos';\n }\n if (device.windows) {\n device.os = 'windows';\n }\n }\n\n // Pixel Ratio\n device.pixelRatio = win.devicePixelRatio || 1;\n\n // Export object\n return device;\n }());\n\n function onTouchStart (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n var $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) { return; }\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }\n if (!data.isTouchEvent && 'button' in e && e.button > 0) { return; }\n if (data.isTouched && data.isMoved) { return; }\n if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : (\".\" + (params.noSwipingClass)))[0]) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) { return; }\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore\n\n var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection\n && ((startX <= edgeSwipeThreshold)\n || (startX >= win.screen.width - edgeSwipeThreshold))\n ) {\n return;\n }\n\n Utils.extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = Utils.now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) { data.allowThresholdMove = false; }\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($targetEl.is(data.formElements)) { preventDefault = false; }\n if (\n doc.activeElement\n && $(doc.activeElement).is(data.formElements)\n && doc.activeElement !== $targetEl[0]\n ) {\n doc.activeElement.blur();\n }\n\n var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n e.preventDefault();\n }\n }\n swiper.emit('touchStart', e);\n }\n\n function onTouchMove (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type === 'mousemove') { return; }\n var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n if (data.isTouched) {\n Utils.extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = Utils.now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate())\n || (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate())\n || (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && doc.activeElement) {\n if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) { return; }\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt((Math.pow( diffX, 2 )) + (Math.pow( diffY, 2 ))) < swiper.params.threshold) { return; }\n\n if (typeof data.isScrolling === 'undefined') {\n var touchAngle;\n if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if ((diffX * diffX) + (diffY * diffY) >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n var diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) { diff = -diff; }\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) { return; }\n\n // Update active index in free mode\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: Utils.now(),\n });\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n }\n\n function onTouchEnd (event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n\n var params = swiper.params;\n var touches = swiper.touches;\n var rtl = swiper.rtlTranslate;\n var $wrapperEl = swiper.$wrapperEl;\n var slidesGrid = swiper.slidesGrid;\n var snapGrid = swiper.snapGrid;\n var e = event;\n if (e.originalEvent) { e = e.originalEvent; }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = Utils.now();\n var timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = Utils.now();\n Utils.nextTick(function () {\n if (!swiper.destroyed) { swiper.allowClick = true; }\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n var currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n var lastMoveEvent = data.velocities.pop();\n var velocityEvent = data.velocities.pop();\n\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n\n data.velocities.length = 0;\n var momentumDuration = 1000 * params.freeModeMomentumRatio;\n var momentumDistance = swiper.velocity * momentumDuration;\n\n var newPosition = swiper.translate + momentumDistance;\n if (rtl) { newPosition = -newPosition; }\n\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n var needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) { needsLoopFix = true; }\n } else if (params.freeModeSticky) {\n var nextSlide;\n for (var j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n swiper.once('transitionEnd', function () {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeModeSticky) {\n // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }\n swiper.emit('momentumBounce');\n\n swiper.setTransition(params.speed);\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) { return; }\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n return;\n }\n\n // Find current slide\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {\n if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {\n stopIndex = i;\n groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n // Find current slide size\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }\n else { swiper.slideTo(stopIndex); }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + params.slidesPerGroup);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n }\n\n function onResize () {\n var swiper = this;\n\n var params = swiper.params;\n var el = swiper.el;\n\n if (el && el.offsetWidth === 0) { return; }\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n var allowSlideNext = swiper.allowSlideNext;\n var allowSlidePrev = swiper.allowSlidePrev;\n var snapGrid = swiper.snapGrid;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n swiper.updateSlidesClasses();\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n }\n\n function onClick (e) {\n var swiper = this;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) { e.preventDefault(); }\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n }\n\n function onScroll () {\n var swiper = this;\n var wrapperEl = swiper.wrapperEl;\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? -wrapperEl.scrollLeft : -wrapperEl.scrollTop;\n // eslint-disable-next-line\n if (swiper.translate === -0) { swiper.translate = 0; }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff);\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n }\n\n var dummyEventAttached = false;\n function dummyEventListener() {}\n\n function attachEvents() {\n var swiper = this;\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n var capture = !!params.nested;\n\n // Touch Events\n if (!Support.touch && Support.pointerEvents) {\n el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);\n el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n if (!dummyEventAttached) {\n doc.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n el.addEventListener('mousedown', swiper.onTouchStart, false);\n doc.addEventListener('mousemove', swiper.onTouchMove, capture);\n doc.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.addEventListener('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl.addEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);\n }\n\n function detachEvents() {\n var swiper = this;\n\n var params = swiper.params;\n var touchEvents = swiper.touchEvents;\n var el = swiper.el;\n var wrapperEl = swiper.wrapperEl;\n\n var capture = !!params.nested;\n\n // Touch Events\n if (!Support.touch && Support.pointerEvents) {\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (Support.touch) {\n var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {\n el.removeEventListener('mousedown', swiper.onTouchStart, false);\n doc.removeEventListener('mousemove', swiper.onTouchMove, capture);\n doc.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el.removeEventListener('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl.removeEventListener('scroll', swiper.onScroll);\n }\n\n // Resize handler\n swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);\n }\n\n var events = {\n attachEvents: attachEvents,\n detachEvents: detachEvents,\n };\n\n function setBreakpoint () {\n var swiper = this;\n var activeIndex = swiper.activeIndex;\n var initialized = swiper.initialized;\n var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;\n var params = swiper.params;\n var $el = swiper.$el;\n var breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }\n\n // Get breakpoint for window width and update parameters\n var breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n if (breakpointOnlyParams) {\n ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerColumn'].forEach(function (param) {\n var paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') { return; }\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n var wasMultiRow = params.slidesPerColumn > 1;\n var isMultiRow = breakpointParams.slidesPerColumn > 1;\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(((params.containerModifierClass) + \"multirow \" + (params.containerModifierClass) + \"multirow-column\"));\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(((params.containerModifierClass) + \"multirow\"));\n if (breakpointParams.slidesPerColumnFill === 'column') {\n $el.addClass(((params.containerModifierClass) + \"multirow-column\"));\n }\n }\n\n var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n Utils.extend(swiper.params, breakpointParams);\n\n Utils.extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n }\n\n function getBreakpoint (breakpoints) {\n // Get breakpoint for window width\n if (!breakpoints) { return undefined; }\n var breakpoint = false;\n var points = [];\n Object.keys(breakpoints).forEach(function (point) {\n points.push(point);\n });\n points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });\n for (var i = 0; i < points.length; i += 1) {\n var point = points[i];\n if (point <= win.innerWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n }\n\n var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };\n\n function addClasses () {\n var swiper = this;\n var classNames = swiper.classNames;\n var params = swiper.params;\n var rtl = swiper.rtl;\n var $el = swiper.$el;\n var suffixes = [];\n\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n if (rtl) {\n suffixes.push('rtl');\n }\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n if (params.slidesPerColumnFill === 'column') {\n suffixes.push('multirow-column');\n }\n }\n if (Device.android) {\n suffixes.push('android');\n }\n if (Device.ios) {\n suffixes.push('ios');\n }\n\n if (params.cssMode) {\n suffixes.push('css-mode');\n }\n\n suffixes.forEach(function (suffix) {\n classNames.push(params.containerModifierClass + suffix);\n });\n\n $el.addClass(classNames.join(' '));\n }\n\n function removeClasses () {\n var swiper = this;\n var $el = swiper.$el;\n var classNames = swiper.classNames;\n\n $el.removeClass(classNames.join(' '));\n }\n\n var classes = { addClasses: addClasses, removeClasses: removeClasses };\n\n function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {\n var image;\n function onReady() {\n if (callback) { callback(); }\n }\n if (!imageEl.complete || !checkForComplete) {\n if (src) {\n image = new win.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n }\n\n function preloadImages () {\n var swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }\n if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) { swiper.update(); }\n swiper.emit('imagesReady');\n }\n }\n for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n var imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady\n );\n }\n }\n\n var images = {\n loadImage: loadImage,\n preloadImages: preloadImages,\n };\n\n function checkOverflow() {\n var swiper = this;\n var params = swiper.params;\n var wasLocked = swiper.isLocked;\n var lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length);\n\n if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n swiper.isLocked = lastSlidePosition <= swiper.size;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked;\n\n // events\n if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n swiper.navigation.update();\n }\n }\n\n var checkOverflow$1 = { checkOverflow: checkOverflow };\n\n var defaults = {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n //\n preventInteractionOnTransition: false,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n // NS\n containerModifierClass: 'swiper-container-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n };\n\n /* eslint no-param-reassign: \"off\" */\n\n var prototypes = {\n update: update,\n translate: translate,\n transition: transition$1,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow$1,\n classes: classes,\n images: images,\n };\n\n var extendedDefaults = {};\n\n var Swiper = /*@__PURE__*/(function (SwiperClass) {\n function Swiper() {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n var el;\n var params;\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n (assign = args, el = assign[0], params = assign[1]);\n }\n if (!params) { params = {}; }\n\n params = Utils.extend({}, params);\n if (el && !params.el) { params.el = el; }\n\n SwiperClass.call(this, params);\n\n Object.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n // Swiper Instance\n var swiper = this;\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n Object.keys(swiper.modules).forEach(function (moduleName) {\n var module = swiper.modules[moduleName];\n if (module.params) {\n var moduleParamName = Object.keys(module.params)[0];\n var moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) { return; }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (\n typeof params[moduleParamName] === 'object'\n && !('enabled' in params[moduleParamName])\n ) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }\n }\n });\n\n // Extend defaults with modules params\n var swiperParams = Utils.extend({}, defaults);\n swiper.useModulesParams(swiperParams);\n\n // Extend defaults with passed params\n swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = Utils.extend({}, swiper.params);\n swiper.passedParams = Utils.extend({}, params);\n\n // Save Dom lib\n swiper.$ = $;\n\n // Find el\n var $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n var swipers = [];\n $el.each(function (index, containerEl) {\n var newParams = Utils.extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper;\n $el.data('swiper', swiper);\n\n // Find Wrapper\n var $wrapperEl;\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n $wrapperEl = $(el.shadowRoot.querySelector((\".\" + (swiper.params.wrapperClass))));\n // Children needs to return slot items\n $wrapperEl.children = function (options) { return $el.children(options); };\n } else {\n $wrapperEl = $el.children((\".\" + (swiper.params.wrapperClass)));\n }\n // Extend Swiper\n Utils.extend(swiper, {\n $el: $el,\n el: el,\n $wrapperEl: $wrapperEl,\n wrapperEl: $wrapperEl[0],\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n if (Support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n }\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }()),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video',\n // Last click time\n lastClickTime: Utils.now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n\n });\n\n // Install Modules\n swiper.useModules();\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n return swiper;\n }\n\n if ( SwiperClass ) Swiper.__proto__ = SwiperClass;\n Swiper.prototype = Object.create( SwiperClass && SwiperClass.prototype );\n Swiper.prototype.constructor = Swiper;\n\n var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };\n\n Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides;\n var slidesGrid = swiper.slidesGrid;\n var swiperSize = swiper.size;\n var activeIndex = swiper.activeIndex;\n var spv = 1;\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex].swiperSlideSize;\n var breakLoop;\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {\n if (slides[i$1] && !breakLoop) {\n slideSize += slides[i$1].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) { breakLoop = true; }\n }\n }\n } else {\n for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {\n if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n return spv;\n };\n\n Swiper.prototype.update = function update () {\n var swiper = this;\n if (!swiper || swiper.destroyed) { return; }\n var snapGrid = swiper.snapGrid;\n var params = swiper.params;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n var translated;\n if (swiper.params.freeMode) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n };\n\n Swiper.prototype.changeDirection = function changeDirection (newDirection, needUpdate) {\n if ( needUpdate === void 0 ) needUpdate = true;\n\n var swiper = this;\n var currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) {\n return swiper;\n }\n\n swiper.$el\n .removeClass((\"\" + (swiper.params.containerModifierClass) + currentDirection))\n .addClass((\"\" + (swiper.params.containerModifierClass) + newDirection));\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each(function (slideIndex, slideEl) {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) { swiper.update(); }\n\n return swiper;\n };\n\n Swiper.prototype.init = function init () {\n var swiper = this;\n if (swiper.initialized) { return; }\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n };\n\n Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {\n if ( deleteInstance === void 0 ) deleteInstance = true;\n if ( cleanStyles === void 0 ) cleanStyles = true;\n\n var swiper = this;\n var params = swiper.params;\n var $el = swiper.$el;\n var $wrapperEl = swiper.$wrapperEl;\n var slides = swiper.slides;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass([\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass ].join(' '))\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n swiper.$el.data('swiper', null);\n Utils.deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n };\n\n Swiper.extendDefaults = function extendDefaults (newDefaults) {\n Utils.extend(extendedDefaults, newDefaults);\n };\n\n staticAccessors.extendedDefaults.get = function () {\n return extendedDefaults;\n };\n\n staticAccessors.defaults.get = function () {\n return defaults;\n };\n\n staticAccessors.Class.get = function () {\n return SwiperClass;\n };\n\n staticAccessors.$.get = function () {\n return $;\n };\n\n Object.defineProperties( Swiper, staticAccessors );\n\n return Swiper;\n }(SwiperClass));\n\n var Device$1 = {\n name: 'device',\n proto: {\n device: Device,\n },\n static: {\n device: Device,\n },\n };\n\n var Support$1 = {\n name: 'support',\n proto: {\n support: Support,\n },\n static: {\n support: Support,\n },\n };\n\n var Browser = (function Browser() {\n function isSafari() {\n var ua = win.navigator.userAgent.toLowerCase();\n return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);\n }\n return {\n isEdge: !!win.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),\n };\n }());\n\n var Browser$1 = {\n name: 'browser',\n proto: {\n browser: Browser,\n },\n static: {\n browser: Browser,\n },\n };\n\n var Resize = {\n name: 'resize',\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n resize: {\n resizeHandler: function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler: function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) { return; }\n swiper.emit('orientationchange');\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n // Emit resize\n win.addEventListener('resize', swiper.resize.resizeHandler);\n\n // Emit orientationchange\n win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy: function destroy() {\n var swiper = this;\n win.removeEventListener('resize', swiper.resize.resizeHandler);\n win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n },\n };\n\n var Observer = {\n func: win.MutationObserver || win.WebkitMutationObserver,\n attach: function attach(target, options) {\n if ( options === void 0 ) options = {};\n\n var swiper = this;\n\n var ObserverFunc = Observer.func;\n var observer = new ObserverFunc(function (mutations) {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n var observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (win.requestAnimationFrame) {\n win.requestAnimationFrame(observerUpdate);\n } else {\n win.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!Support.observer || !swiper.params.observer) { return; }\n if (swiper.params.observeParents) {\n var containerParents = swiper.$el.parents();\n for (var i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n }\n // Observe container\n swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren });\n\n // Observe wrapper\n swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.forEach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n },\n };\n\n var Observer$1 = {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n observer: {\n init: Observer.init.bind(swiper),\n attach: Observer.attach.bind(swiper),\n destroy: Observer.destroy.bind(swiper),\n observers: [],\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.observer.init();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.destroy();\n },\n },\n };\n\n function isEventSupported() {\n var eventName = 'onwheel';\n var isSupported = eventName in doc;\n\n if (!isSupported) {\n var element = doc.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported\n && doc.implementation\n && doc.implementation.hasFeature\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n && doc.implementation.hasFeature('', '') !== true\n ) {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n }\n var Mousewheel = {\n lastScrollTime: Utils.now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n event: function event() {\n if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }\n return isEventSupported() ? 'wheel' : 'mousewheel';\n },\n normalize: function normalize(e) {\n // Reasonable defaults\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n\n var sX = 0;\n var sY = 0; // spinX, spinY\n var pX = 0;\n var pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = (pX < 1) ? -1 : 1;\n }\n if (pY && !sY) {\n sY = (pY < 1) ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n },\n handleMouseEnter: function handleMouseEnter() {\n var swiper = this;\n swiper.mouseEntered = true;\n },\n handleMouseLeave: function handleMouseLeave() {\n var swiper = this;\n swiper.mouseEntered = false;\n },\n handle: function handle(event) {\n var e = event;\n var swiper = this;\n var params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }\n\n if (e.originalEvent) { e = e.originalEvent; } // jquery fix\n var delta = 0;\n var rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n var data = Mousewheel.normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }\n else { return true; }\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }\n else { return true; }\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) { return true; }\n\n if (params.invert) { delta = -delta; }\n\n if (!swiper.params.freeMode) {\n if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {\n if (delta < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n swiper.emit('scroll', e);\n } else if (params.releaseOnEdges) { return true; }\n }\n swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the declereration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n var newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) };\n var ref = swiper.mousewheel;\n var lastEventBeforeSnap = ref.lastEventBeforeSnap;\n var ignoreWheelEvents = lastEventBeforeSnap\n && newEvent.time < lastEventBeforeSnap.time + 500\n && newEvent.delta <= lastEventBeforeSnap.delta\n && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n swiper.mousewheel.lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n var position = swiper.getTranslate() + (delta * params.sensitivity);\n var wasBeginning = swiper.isBeginning;\n var wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }\n if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeModeSticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momuntum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(swiper.mousewheel.timeout);\n swiper.mousewheel.timeout = undefined;\n var recentWheelEvents = swiper.mousewheel.recentWheelEvents;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n var prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n var firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15\n && newEvent.time - firstEvent.time < 500\n && firstEvent.delta - newEvent.delta >= 1\n && newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n var snapToThreshold = delta > 0 ? 0.8 : 0.2;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.mousewheel.timeout = Utils.nextTick(function () {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!swiper.mousewheel.timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n swiper.mousewheel.timeout = Utils.nextTick(function () {\n var snapToThreshold = 0.5;\n swiper.mousewheel.lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) { swiper.emit('scroll', e); }\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }\n }\n }\n\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n return false;\n },\n enable: function enable() {\n var swiper = this;\n var event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) { return false; }\n if (swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.on('mouseenter', swiper.mousewheel.handleMouseEnter);\n target.on('mouseleave', swiper.mousewheel.handleMouseLeave);\n target.on(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = true;\n return true;\n },\n disable: function disable() {\n var swiper = this;\n var event = Mousewheel.event();\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle);\n return true;\n }\n if (!event) { return false; }\n if (!swiper.mousewheel.enabled) { return false; }\n var target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarged !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarged);\n }\n target.off(event, swiper.mousewheel.handle);\n swiper.mousewheel.enabled = false;\n return true;\n },\n };\n\n var Mousewheel$1 = {\n name: 'mousewheel',\n params: {\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarged: 'container',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n mousewheel: {\n enabled: false,\n enable: Mousewheel.enable.bind(swiper),\n disable: Mousewheel.disable.bind(swiper),\n handle: Mousewheel.handle.bind(swiper),\n handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),\n handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),\n lastScrollTime: Utils.now(),\n lastEventBeforeSnap: undefined,\n recentWheelEvents: [],\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n swiper.mousewheel.disable();\n }\n if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.params.cssMode) {\n swiper.mousewheel.enable();\n }\n if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }\n },\n },\n };\n\n var Navigation = {\n update: function update() {\n // Update Navigation Buttons\n var swiper = this;\n var params = swiper.params.navigation;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n $prevEl.addClass(params.disabledClass);\n } else {\n $prevEl.removeClass(params.disabledClass);\n }\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n $nextEl.addClass(params.disabledClass);\n } else {\n $nextEl.removeClass(params.disabledClass);\n }\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n onPrevClick: function onPrevClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) { return; }\n swiper.slidePrev();\n },\n onNextClick: function onNextClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) { return; }\n swiper.slideNext();\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) { return; }\n\n var $nextEl;\n var $prevEl;\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.nextEl === 'string'\n && $nextEl.length > 1\n && swiper.$el.find(params.nextEl).length === 1\n ) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n if (\n swiper.params.uniqueNavElements\n && typeof params.prevEl === 'string'\n && $prevEl.length > 1\n && swiper.$el.find(params.prevEl).length === 1\n ) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n Utils.extend(swiper.navigation, {\n $nextEl: $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl: $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n },\n };\n\n var Navigation$1 = {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n navigation: {\n init: Navigation.init.bind(swiper),\n update: Navigation.update.bind(swiper),\n destroy: Navigation.destroy.bind(swiper),\n onNextClick: Navigation.onNextClick.bind(swiper),\n onPrevClick: Navigation.onPrevClick.bind(swiper),\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge: function toEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n swiper.navigation.update();\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.navigation.destroy();\n },\n click: function click(e) {\n var swiper = this;\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n if (\n swiper.params.navigation.hideOnClick\n && !$(e.target).is($prevEl)\n && !$(e.target).is($nextEl)\n ) {\n var isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n swiper.emit('navigationShow', swiper);\n } else {\n swiper.emit('navigationHide', swiper);\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n },\n },\n };\n\n var Pagination = {\n update: function update() {\n // Render || Update Pagination bullets/items\n var swiper = this;\n var rtl = swiper.rtl;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n var $el = swiper.pagination.$el;\n // Current/Total\n var current;\n var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {\n current -= (slidesLength - (swiper.loopedSlides * 2));\n }\n if (current > total - 1) { current -= total; }\n if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n var bullets = swiper.pagination.bullets;\n var firstIndex;\n var lastIndex;\n var midIndex;\n if (params.dynamicBullets) {\n swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + \"px\"));\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);\n if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {\n swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (swiper.pagination.dynamicBulletIndex < 0) {\n swiper.pagination.dynamicBulletIndex = 0;\n }\n }\n firstIndex = current - swiper.pagination.dynamicBulletIndex;\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(((params.bulletActiveClass) + \" \" + (params.bulletActiveClass) + \"-next \" + (params.bulletActiveClass) + \"-next-next \" + (params.bulletActiveClass) + \"-prev \" + (params.bulletActiveClass) + \"-prev-prev \" + (params.bulletActiveClass) + \"-main\"));\n if ($el.length > 1) {\n bullets.each(function (index, bullet) {\n var $bullet = $(bullet);\n var bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(((params.bulletActiveClass) + \"-main\"));\n }\n if (bulletIndex === firstIndex) {\n $bullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n }\n if (bulletIndex === lastIndex) {\n $bullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n });\n } else {\n var $bullet = bullets.eq(current);\n var bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n var $firstDisplayedBullet = bullets.eq(firstIndex);\n var $lastDisplayedBullet = bullets.eq(lastIndex);\n for (var i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(((params.bulletActiveClass) + \"-main\"));\n }\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n for (var i$1 = params.dynamicMainBullets; i$1 >= 0; i$1 -= 1) {\n bullets.eq(bullets.length - i$1).addClass(((params.bulletActiveClass) + \"-main\"));\n }\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(((params.bulletActiveClass) + \"-prev\"));\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n $lastDisplayedBullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n } else {\n $firstDisplayedBullet\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev\"))\n .prev()\n .addClass(((params.bulletActiveClass) + \"-prev-prev\"));\n $lastDisplayedBullet\n .next()\n .addClass(((params.bulletActiveClass) + \"-next\"))\n .next()\n .addClass(((params.bulletActiveClass) + \"-next-next\"));\n }\n }\n }\n if (params.dynamicBullets) {\n var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);\n var offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + \"px\"));\n }\n }\n if (params.type === 'fraction') {\n $el.find((\".\" + (params.currentClass))).text(params.formatFractionCurrent(current + 1));\n $el.find((\".\" + (params.totalClass))).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n var progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n var scale = (current + 1) / total;\n var scaleX = 1;\n var scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el.find((\".\" + (params.progressbarFillClass))).transform((\"translate3d(0,0,0) scaleX(\" + scaleX + \") scaleY(\" + scaleY + \")\")).transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n swiper.emit('paginationRender', swiper, $el[0]);\n } else {\n swiper.emit('paginationUpdate', swiper, $el[0]);\n }\n $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n },\n render: function render() {\n // Render Container\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n\n var $el = swiper.pagination.$el;\n var paginationHTML = '';\n if (params.type === 'bullets') {\n var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n for (var i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += \"<\" + (params.bulletElement) + \" class=\\\"\" + (params.bulletClass) + \"\\\">\";\n }\n }\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find((\".\" + (params.bulletClass)));\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = \"\"\n + ' / '\n + \"\";\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = \"\";\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n swiper.emit('paginationRender', swiper.pagination.$el[0]);\n }\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el) { return; }\n\n var $el = $(params.el);\n if ($el.length === 0) { return; }\n\n if (\n swiper.params.uniqueNavElements\n && typeof params.el === 'string'\n && $el.length > 1\n && swiper.$el.find(params.el).length === 1\n ) {\n $el = swiper.$el.find(params.el);\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass((\"\" + (params.modifierClass) + (params.type) + \"-dynamic\"));\n swiper.pagination.dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', (\".\" + (params.bulletClass)), function onClick(e) {\n e.preventDefault();\n var index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) { index += swiper.loopedSlides; }\n swiper.slideTo(index);\n });\n }\n\n Utils.extend(swiper.pagination, {\n $el: $el,\n el: $el[0],\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var params = swiper.params.pagination;\n if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }\n var $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }\n if (params.clickable) {\n $el.off('click', (\".\" + (params.bulletClass)));\n }\n },\n };\n\n var Pagination$1 = {\n name: 'pagination',\n params: {\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: function (number) { return number; },\n formatFractionTotal: function (number) { return number; },\n bulletClass: 'swiper-pagination-bullet',\n bulletActiveClass: 'swiper-pagination-bullet-active',\n modifierClass: 'swiper-pagination-', // NEW\n currentClass: 'swiper-pagination-current',\n totalClass: 'swiper-pagination-total',\n hiddenClass: 'swiper-pagination-hidden',\n progressbarFillClass: 'swiper-pagination-progressbar-fill',\n progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',\n clickableClass: 'swiper-pagination-clickable', // NEW\n lockClass: 'swiper-pagination-lock',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n pagination: {\n init: Pagination.init.bind(swiper),\n render: Pagination.render.bind(swiper),\n update: Pagination.update.bind(swiper),\n destroy: Pagination.destroy.bind(swiper),\n dynamicBulletIndex: 0,\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n swiper.pagination.init();\n swiper.pagination.render();\n swiper.pagination.update();\n },\n activeIndexChange: function activeIndexChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n swiper.pagination.update();\n }\n },\n snapIndexChange: function snapIndexChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.update();\n }\n },\n slidesLengthChange: function slidesLengthChange() {\n var swiper = this;\n if (swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n snapGridLengthChange: function snapGridLengthChange() {\n var swiper = this;\n if (!swiper.params.loop) {\n swiper.pagination.render();\n swiper.pagination.update();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.pagination.destroy();\n },\n click: function click(e) {\n var swiper = this;\n if (\n swiper.params.pagination.el\n && swiper.params.pagination.hideOnClick\n && swiper.pagination.$el.length > 0\n && !$(e.target).hasClass(swiper.params.pagination.bulletClass)\n ) {\n var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n swiper.emit('paginationShow', swiper);\n } else {\n swiper.emit('paginationHide', swiper);\n }\n swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n },\n },\n };\n\n /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n\n var Controller = {\n LinearSpline: function LinearSpline(x, y) {\n var binarySearch = (function search() {\n var maxIndex;\n var minIndex;\n var guess;\n return function (array, val) {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }());\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n var i1;\n var i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) { return 0; }\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];\n };\n return this;\n },\n // xxx: for now i will just save one spline function to to\n getInterpolateFunction: function getInterpolateFunction(c) {\n var swiper = this;\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n },\n setTranslate: function setTranslate(setTranslate$1, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var multiplier;\n var controlledTranslate;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n swiper.controller.getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (var i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n var controlled = swiper.controller.control;\n var i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n Utils.nextTick(function () {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(function () {\n if (!controlled) { return; }\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n },\n };\n var Controller$1 = {\n name: 'controller',\n params: {\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n controller: {\n control: swiper.params.controller.control,\n getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),\n setTranslate: Controller.setTranslate.bind(swiper),\n setTransition: Controller.setTransition.bind(swiper),\n },\n });\n },\n on: {\n update: function update() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n resize: function resize() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n observerUpdate: function observerUpdate() {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n },\n setTranslate: function setTranslate(translate, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTranslate(translate, byController);\n },\n setTransition: function setTransition(duration, byController) {\n var swiper = this;\n if (!swiper.controller.control) { return; }\n swiper.controller.setTransition(duration, byController);\n },\n },\n };\n\n var a11y = {\n makeElFocusable: function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n return $el;\n },\n addElRole: function addElRole($el, role) {\n $el.attr('role', role);\n return $el;\n },\n addElLabel: function addElLabel($el, label) {\n $el.attr('aria-label', label);\n return $el;\n },\n disableEl: function disableEl($el) {\n $el.attr('aria-disabled', true);\n return $el;\n },\n enableEl: function enableEl($el) {\n $el.attr('aria-disabled', false);\n return $el;\n },\n onEnterKey: function onEnterKey(e) {\n var swiper = this;\n var params = swiper.params.a11y;\n if (e.keyCode !== 13) { return; }\n var $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n swiper.a11y.notify(params.lastSlideMessage);\n } else {\n swiper.a11y.notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n swiper.a11y.notify(params.firstSlideMessage);\n } else {\n swiper.a11y.notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && $targetEl.is((\".\" + (swiper.params.pagination.bulletClass)))) {\n $targetEl[0].click();\n }\n },\n notify: function notify(message) {\n var swiper = this;\n var notification = swiper.a11y.liveRegion;\n if (notification.length === 0) { return; }\n notification.html('');\n notification.html(message);\n },\n updateNavigation: function updateNavigation() {\n var swiper = this;\n\n if (swiper.params.loop) { return; }\n var ref = swiper.navigation;\n var $nextEl = ref.$nextEl;\n var $prevEl = ref.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n swiper.a11y.disableEl($prevEl);\n } else {\n swiper.a11y.enableEl($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n swiper.a11y.disableEl($nextEl);\n } else {\n swiper.a11y.enableEl($nextEl);\n }\n }\n },\n updatePagination: function updatePagination() {\n var swiper = this;\n var params = swiper.params.a11y;\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {\n var $bulletEl = $(bulletEl);\n swiper.a11y.makeElFocusable($bulletEl);\n swiper.a11y.addElRole($bulletEl, 'button');\n swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));\n });\n }\n },\n init: function init() {\n var swiper = this;\n\n swiper.$el.append(swiper.a11y.liveRegion);\n\n // Navigation\n var params = swiper.params.a11y;\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n swiper.a11y.makeElFocusable($nextEl);\n swiper.a11y.addElRole($nextEl, 'button');\n swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);\n $nextEl.on('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n swiper.a11y.makeElFocusable($prevEl);\n swiper.a11y.addElRole($prevEl, 'button');\n swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);\n $prevEl.on('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.on('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }\n\n var $nextEl;\n var $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', swiper.a11y.onEnterKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', swiper.a11y.onEnterKey);\n }\n\n // Pagination\n if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {\n swiper.pagination.$el.off('keydown', (\".\" + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);\n }\n },\n };\n var A11y = {\n name: 'a11y',\n params: {\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n a11y: {\n liveRegion: $((\"\")),\n },\n });\n Object.keys(a11y).forEach(function (methodName) {\n swiper.a11y[methodName] = a11y[methodName].bind(swiper);\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.init();\n swiper.a11y.updateNavigation();\n },\n toEdge: function toEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n fromEdge: function fromEdge() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updateNavigation();\n },\n paginationUpdate: function paginationUpdate() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.updatePagination();\n },\n destroy: function destroy() {\n var swiper = this;\n if (!swiper.params.a11y.enabled) { return; }\n swiper.a11y.destroy();\n },\n },\n };\n\n /* eslint no-underscore-dangle: \"off\" */\n\n var Autoplay = {\n run: function run() {\n var swiper = this;\n var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n var delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = Utils.nextTick(function () {\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isBeginning) {\n swiper.slidePrev(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.isEnd) {\n swiper.slideNext(swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, swiper.params.speed, true, true);\n swiper.emit('autoplay');\n } else {\n swiper.autoplay.stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) { swiper.autoplay.run(); }\n }, delay);\n },\n start: function start() {\n var swiper = this;\n if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }\n if (swiper.autoplay.running) { return false; }\n swiper.autoplay.running = true;\n swiper.emit('autoplayStart');\n swiper.autoplay.run();\n return true;\n },\n stop: function stop() {\n var swiper = this;\n if (!swiper.autoplay.running) { return false; }\n if (typeof swiper.autoplay.timeout === 'undefined') { return false; }\n\n if (swiper.autoplay.timeout) {\n clearTimeout(swiper.autoplay.timeout);\n swiper.autoplay.timeout = undefined;\n }\n swiper.autoplay.running = false;\n swiper.emit('autoplayStop');\n return true;\n },\n pause: function pause(speed) {\n var swiper = this;\n if (!swiper.autoplay.running) { return; }\n if (swiper.autoplay.paused) { return; }\n if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n swiper.autoplay.run();\n } else {\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n }\n },\n };\n\n var Autoplay$1 = {\n name: 'autoplay',\n params: {\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n autoplay: {\n running: false,\n paused: false,\n run: Autoplay.run.bind(swiper),\n start: Autoplay.start.bind(swiper),\n stop: Autoplay.stop.bind(swiper),\n pause: Autoplay.pause.bind(swiper),\n onVisibilityChange: function onVisibilityChange() {\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n swiper.autoplay.pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n swiper.autoplay.run();\n swiper.autoplay.paused = false;\n }\n },\n onTransitionEnd: function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }\n if (e.target !== this) { return; }\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.run();\n }\n },\n },\n });\n },\n on: {\n init: function init() {\n var swiper = this;\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n }\n },\n beforeTransitionStart: function beforeTransitionStart(speed, internal) {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n swiper.autoplay.stop();\n }\n }\n },\n sliderFirstMove: function sliderFirstMove() {\n var swiper = this;\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.stop();\n } else {\n swiper.autoplay.pause();\n }\n }\n },\n touchEnd: function touchEnd() {\n var swiper = this;\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.run();\n }\n },\n destroy: function destroy() {\n var swiper = this;\n if (swiper.autoplay.running) {\n swiper.autoplay.stop();\n }\n document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange);\n },\n },\n };\n\n var Fade = {\n setTranslate: function setTranslate() {\n var swiper = this;\n var slides = swiper.slides;\n for (var i = 0; i < slides.length; i += 1) {\n var $slideEl = swiper.slides.eq(i);\n var offset = $slideEl[0].swiperSlideOffset;\n var tx = -offset;\n if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }\n var ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n var slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n $slideEl\n .css({\n opacity: slideOpacity,\n })\n .transform((\"translate3d(\" + tx + \"px, \" + ty + \"px, 0px)\"));\n }\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n var slides = swiper.slides;\n var $wrapperEl = swiper.$wrapperEl;\n slides.transition(duration);\n if (swiper.params.virtualTranslate && duration !== 0) {\n var eventTriggered = false;\n slides.transitionEnd(function () {\n if (eventTriggered) { return; }\n if (!swiper || swiper.destroyed) { return; }\n eventTriggered = true;\n swiper.animating = false;\n var triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (var i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n },\n };\n\n var EffectFade = {\n name: 'effect-fade',\n params: {\n fadeEffect: {\n crossFade: false,\n },\n },\n create: function create() {\n var swiper = this;\n Utils.extend(swiper, {\n fadeEffect: {\n setTranslate: Fade.setTranslate.bind(swiper),\n setTransition: Fade.setTransition.bind(swiper),\n },\n });\n },\n on: {\n beforeInit: function beforeInit() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.classNames.push(((swiper.params.containerModifierClass) + \"fade\"));\n var overwriteParams = {\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: true,\n };\n Utils.extend(swiper.params, overwriteParams);\n Utils.extend(swiper.originalParams, overwriteParams);\n },\n setTranslate: function setTranslate() {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTranslate();\n },\n setTransition: function setTransition(duration) {\n var swiper = this;\n if (swiper.params.effect !== 'fade') { return; }\n swiper.fadeEffect.setTransition(duration);\n },\n },\n };\n\n // Swiper Class\n\n var components = [\n Device$1,\n Support$1,\n Browser$1,\n Resize,\n Observer$1,\n Mousewheel$1,\n Navigation$1,\n Pagination$1,\n Controller$1,\n A11y,\n Autoplay$1,\n EffectFade\n ];\n\n if (typeof Swiper.use === 'undefined') {\n Swiper.use = Swiper.Class.use;\n Swiper.installModule = Swiper.Class.installModule;\n }\n\n Swiper.use(components);\n\n return Swiper;\n\n}));\n","/**\n* Wallop.js\n*\n* @fileoverview Minimal JS library to show & hide things\n*\n* @author Pedro Duarte\n* @author http://pedroduarte.me/wallop\n*\n*/\n(function(global){\n function Wallop(selector, options) {\n if (!selector) { throw new Error('Missing selector. Refer to Usage documentation: https://github.com/peduarte/wallop#javascript'); }\n\n for (var i = 0; i < selectorPool.length; i++) {\n if (selectorPool[i] === selector) {\n throw new Error('An instance of Wallop with this selector already exists.');\n }\n }\n\n this.options = {\n buttonPreviousClass: 'Wallop-buttonPrevious',\n buttonNextClass: 'Wallop-buttonNext',\n itemClass: 'Wallop-item',\n currentItemClass: 'Wallop-item--current',\n showPreviousClass: 'Wallop-item--showPrevious',\n showNextClass: 'Wallop-item--showNext',\n hidePreviousClass: 'Wallop-item--hidePrevious',\n hideNextClass: 'Wallop-item--hideNext',\n carousel: true\n };\n\n // Whitelist elements which contain `length`\n this.whitelist = {\n 'form': true\n };\n\n if (selector.length > 0 && !this.whitelist[selector]) {\n throw new Error('Selector cannot be an array, Refer to Usage documentation: https://github.com/peduarte/wallop#javascript');\n } else {\n this.$selector = selector;\n }\n\n this.options = extend(this.options, options);\n this.event = null;\n\n // \"Global vars\"\n this.reset();\n this.buttonPrevious = this.$selector.querySelector(' .' + this.options.buttonPreviousClass);\n this.buttonNext = this.$selector.querySelector(' .' + this.options.buttonNextClass);\n\n this.bindEvents();\n this.createCustomEvent();\n\n // If there is no active item, start at 0\n if (this.currentItemIndex === -1) {\n this.currentItemIndex = 0;\n addClass(this.allItemsArray[this.currentItemIndex], this.options.currentItemClass);\n }\n\n // Update button states to make sure the correct state is set on initialization\n this.updateButtonStates();\n\n // Wrapped in timeout function so event can\n // be listened from outside at anytime\n var _this = this;\n setTimeout(function() {\n _this.event.detail.currentItemIndex = _this.currentItemIndex;\n _this.$selector.dispatchEvent(_this.event);\n }, 0);\n }\n\n var selectorPool = [];\n\n var WS = Wallop.prototype;\n\n // Update prev/next disabled attribute\n WS.updateButtonStates = function () {\n if ((!this.buttonPrevious && !this.buttonNext) || this.options.carousel) { return; }\n\n if (this.currentItemIndex === this.lastItemIndex) {\n this.buttonNext.setAttribute('disabled', 'disabled');\n } else if (this.currentItemIndex === 0) {\n this.buttonPrevious.setAttribute('disabled', 'disabled');\n }\n };\n\n // Reset all settings by removing classes and attributes added by goTo() & updateButtonStates()\n WS.removeAllHelperSettings = function () {\n removeClass(this.allItemsArray[this.currentItemIndex], this.options.currentItemClass);\n removeClass($$(this.options.hidePreviousClass, this.$selector), this.options.hidePreviousClass);\n removeClass($$(this.options.hideNextClass, this.$selector), this.options.hideNextClass);\n removeClass($$(this.options.showPreviousClass, this.$selector), this.options.showPreviousClass);\n removeClass($$(this.options.showNextClass, this.$selector), this.options.showNextClass);\n\n if (!this.buttonPrevious && !this.buttonNext) { return; }\n\n this.buttonPrevious.removeAttribute('disabled');\n this.buttonNext.removeAttribute('disabled');\n };\n\n // Method to add classes to the right elements depending on the index passed\n WS.goTo = function (index) {\n if (index === this.currentItemIndex) { return; }\n\n // Fix the index if it's out of bounds and carousel is enabled\n index = index === -1 && this.options.carousel ? this.lastItemIndex : index;\n index = index === this.lastItemIndex + 1 && this.options.carousel ? 0 : index;\n\n // Exit when index is out of bounds\n if (index < 0 || index > this.lastItemIndex) { return; }\n\n this.removeAllHelperSettings();\n\n var isForwards = (index > this.currentItemIndex || index === 0 && this.currentItemIndex === this.lastItemIndex) && !(index === this.lastItemIndex && this.currentItemIndex === 0);\n addClass(this.allItemsArray[this.currentItemIndex], isForwards ? this.options.hidePreviousClass : this.options.hideNextClass);\n addClass(this.allItemsArray[index], this.options.currentItemClass + ' ' + (isForwards ? this.options.showNextClass : this.options.showPreviousClass));\n\n this.currentItemIndex = index;\n\n this.updateButtonStates();\n\n this.event.detail.currentItemIndex = this.currentItemIndex;\n this.$selector.dispatchEvent(this.event);\n };\n\n // Previous item handler\n WS.previous = function () {\n this.goTo(this.currentItemIndex - 1);\n };\n\n // Next item handler\n WS.next = function () {\n this.goTo(this.currentItemIndex + 1);\n };\n\n // Update global variables\n WS.reset = function () {\n this.allItemsArray = Array.prototype.slice.call(this.$selector.querySelectorAll(' .' + this.options.itemClass));\n this.currentItemIndex = this.allItemsArray.indexOf(this.$selector.querySelector(' .' + this.options.currentItemClass));\n this.lastItemIndex = this.allItemsArray.length - 1;\n };\n\n // Attach click handlers\n WS.bindEvents = function () {\n selectorPool.push(this.$selector);\n\n var _this = this;\n\n if (this.buttonPrevious) {\n this.buttonPrevious.addEventListener('click', function (event) {\n event.preventDefault();\n _this.previous();\n });\n }\n\n if (this.buttonNext) {\n this.buttonNext.addEventListener('click', function (event) {\n event.preventDefault();\n _this.next();\n });\n }\n\n };\n\n // Method to bind custom event\n WS.on = function (eventName, callback) {\n this.$selector.addEventListener(eventName, callback, false);\n };\n\n // Method to unbind custom event\n WS.off = function (eventName, callback) {\n this.$selector.removeEventListener(eventName, callback, false);\n };\n\n // Create custom Event\n WS.createCustomEvent = function () {\n var _this = this;\n this.event = new CustomEvent('change', {\n detail: {\n wallopEl: _this.$selector,\n currentItemIndex: Number(_this.currentItemIndex)\n },\n bubbles: true,\n cancelable: true\n });\n };\n\n // Helper functions\n function $$(element, container) {\n if (!element) { return; }\n if (!container) {\n container = document;\n }\n return container.querySelector('.' + element);\n }\n\n function addClass(element, className) {\n if (!element) { return; }\n element.className = (element.className + ' ' + className).trim();\n }\n\n function removeClass(element, className) {\n if (!element) { return; }\n element.className = element.className.replace(className, '').trim();\n }\n\n function extend(origOptions, userOptions){\n var extendOptions = {}, attrname;\n for (attrname in origOptions) { extendOptions[attrname] = origOptions[attrname]; }\n for (attrname in userOptions) { extendOptions[attrname] = userOptions[attrname]; }\n return extendOptions;\n }\n\n // Pollyfill for CustomEvent() Constructor - thanks to Internet Explorer\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.CustomEvent ? window.CustomEvent.prototype : {};\n window.CustomEvent = CustomEvent;\n\n // Exports to multiple environments\n if(typeof define === 'function' && define.amd){ //AMD\n define(function () { return Wallop; });\n } else if (typeof module !== 'undefined' && module.exports){ //node\n module.exports = Wallop;\n } else { // browser\n // use string because of Google closure compiler ADVANCED_MODE\n /* jslint sub:true */\n global['Wallop'] = Wallop;\n }\n}(this));\n","/*!\nWaypoints - 4.0.1\nCopyright © 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n 'use strict'\n\n var keyCounter = 0\n var allWaypoints = {}\n\n /* http://imakewebthings.com/waypoints/api/waypoint */\n function Waypoint(options) {\n if (!options) {\n throw new Error('No options passed to Waypoint constructor')\n }\n if (!options.element) {\n throw new Error('No element option passed to Waypoint constructor')\n }\n if (!options.handler) {\n throw new Error('No handler option passed to Waypoint constructor')\n }\n\n this.key = 'waypoint-' + keyCounter\n this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n this.element = this.options.element\n this.adapter = new Waypoint.Adapter(this.element)\n this.callback = options.handler\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n this.enabled = this.options.enabled\n this.triggerPoint = null\n this.group = Waypoint.Group.findOrCreate({\n name: this.options.group,\n axis: this.axis\n })\n this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n if (Waypoint.offsetAliases[this.options.offset]) {\n this.options.offset = Waypoint.offsetAliases[this.options.offset]\n }\n this.group.add(this)\n this.context.add(this)\n allWaypoints[this.key] = this\n keyCounter += 1\n }\n\n /* Private */\n Waypoint.prototype.queueTrigger = function(direction) {\n this.group.queueTrigger(this, direction)\n }\n\n /* Private */\n Waypoint.prototype.trigger = function(args) {\n if (!this.enabled) {\n return\n }\n if (this.callback) {\n this.callback.apply(this, args)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy */\n Waypoint.prototype.destroy = function() {\n this.context.remove(this)\n this.group.remove(this)\n delete allWaypoints[this.key]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable */\n Waypoint.prototype.disable = function() {\n this.enabled = false\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable */\n Waypoint.prototype.enable = function() {\n this.context.refresh()\n this.enabled = true\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/next */\n Waypoint.prototype.next = function() {\n return this.group.next(this)\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/previous */\n Waypoint.prototype.previous = function() {\n return this.group.previous(this)\n }\n\n /* Private */\n Waypoint.invokeAll = function(method) {\n var allWaypointsArray = []\n for (var waypointKey in allWaypoints) {\n allWaypointsArray.push(allWaypoints[waypointKey])\n }\n for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n allWaypointsArray[i][method]()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy-all */\n Waypoint.destroyAll = function() {\n Waypoint.invokeAll('destroy')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable-all */\n Waypoint.disableAll = function() {\n Waypoint.invokeAll('disable')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable-all */\n Waypoint.enableAll = function() {\n Waypoint.Context.refreshAll()\n for (var waypointKey in allWaypoints) {\n allWaypoints[waypointKey].enabled = true\n }\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/refresh-all */\n Waypoint.refreshAll = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-height */\n Waypoint.viewportHeight = function() {\n return window.innerHeight || document.documentElement.clientHeight\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-width */\n Waypoint.viewportWidth = function() {\n return document.documentElement.clientWidth\n }\n\n Waypoint.adapters = []\n\n Waypoint.defaults = {\n context: window,\n continuous: true,\n enabled: true,\n group: 'default',\n horizontal: false,\n offset: 0\n }\n\n Waypoint.offsetAliases = {\n 'bottom-in-view': function() {\n return this.context.innerHeight() - this.adapter.outerHeight()\n },\n 'right-in-view': function() {\n return this.context.innerWidth() - this.adapter.outerWidth()\n }\n }\n\n window.Waypoint = Waypoint\n}())\n;(function() {\n 'use strict'\n\n function requestAnimationFrameShim(callback) {\n window.setTimeout(callback, 1000 / 60)\n }\n\n var keyCounter = 0\n var contexts = {}\n var Waypoint = window.Waypoint\n var oldWindowLoad = window.onload\n\n /* http://imakewebthings.com/waypoints/api/context */\n function Context(element) {\n this.element = element\n this.Adapter = Waypoint.Adapter\n this.adapter = new this.Adapter(element)\n this.key = 'waypoint-context-' + keyCounter\n this.didScroll = false\n this.didResize = false\n this.oldScroll = {\n x: this.adapter.scrollLeft(),\n y: this.adapter.scrollTop()\n }\n this.waypoints = {\n vertical: {},\n horizontal: {}\n }\n\n element.waypointContextKey = this.key\n contexts[element.waypointContextKey] = this\n keyCounter += 1\n if (!Waypoint.windowContext) {\n Waypoint.windowContext = true\n Waypoint.windowContext = new Context(window)\n }\n\n this.createThrottledScrollHandler()\n this.createThrottledResizeHandler()\n }\n\n /* Private */\n Context.prototype.add = function(waypoint) {\n var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n this.waypoints[axis][waypoint.key] = waypoint\n this.refresh()\n }\n\n /* Private */\n Context.prototype.checkEmpty = function() {\n var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n var isWindow = this.element == this.element.window\n if (horizontalEmpty && verticalEmpty && !isWindow) {\n this.adapter.off('.waypoints')\n delete contexts[this.key]\n }\n }\n\n /* Private */\n Context.prototype.createThrottledResizeHandler = function() {\n var self = this\n\n function resizeHandler() {\n self.handleResize()\n self.didResize = false\n }\n\n this.adapter.on('resize.waypoints', function() {\n if (!self.didResize) {\n self.didResize = true\n Waypoint.requestAnimationFrame(resizeHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.createThrottledScrollHandler = function() {\n var self = this\n function scrollHandler() {\n self.handleScroll()\n self.didScroll = false\n }\n\n this.adapter.on('scroll.waypoints', function() {\n if (!self.didScroll || Waypoint.isTouch) {\n self.didScroll = true\n Waypoint.requestAnimationFrame(scrollHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.handleResize = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Private */\n Context.prototype.handleScroll = function() {\n var triggeredGroups = {}\n var axes = {\n horizontal: {\n newScroll: this.adapter.scrollLeft(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left'\n },\n vertical: {\n newScroll: this.adapter.scrollTop(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n var isForward = axis.newScroll > axis.oldScroll\n var direction = isForward ? axis.forward : axis.backward\n\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n if (waypoint.triggerPoint === null) {\n continue\n }\n var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n if (crossedForward || crossedBackward) {\n waypoint.queueTrigger(direction)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n\n this.oldScroll = {\n x: axes.horizontal.newScroll,\n y: axes.vertical.newScroll\n }\n }\n\n /* Private */\n Context.prototype.innerHeight = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportHeight()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerHeight()\n }\n\n /* Private */\n Context.prototype.remove = function(waypoint) {\n delete this.waypoints[waypoint.axis][waypoint.key]\n this.checkEmpty()\n }\n\n /* Private */\n Context.prototype.innerWidth = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportWidth()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerWidth()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-destroy */\n Context.prototype.destroy = function() {\n var allWaypoints = []\n for (var axis in this.waypoints) {\n for (var waypointKey in this.waypoints[axis]) {\n allWaypoints.push(this.waypoints[axis][waypointKey])\n }\n }\n for (var i = 0, end = allWaypoints.length; i < end; i++) {\n allWaypoints[i].destroy()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-refresh */\n Context.prototype.refresh = function() {\n /*eslint-disable eqeqeq */\n var isWindow = this.element == this.element.window\n /*eslint-enable eqeqeq */\n var contextOffset = isWindow ? undefined : this.adapter.offset()\n var triggeredGroups = {}\n var axes\n\n this.handleScroll()\n axes = {\n horizontal: {\n contextOffset: isWindow ? 0 : contextOffset.left,\n contextScroll: isWindow ? 0 : this.oldScroll.x,\n contextDimension: this.innerWidth(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left',\n offsetProp: 'left'\n },\n vertical: {\n contextOffset: isWindow ? 0 : contextOffset.top,\n contextScroll: isWindow ? 0 : this.oldScroll.y,\n contextDimension: this.innerHeight(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up',\n offsetProp: 'top'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n var adjustment = waypoint.options.offset\n var oldTriggerPoint = waypoint.triggerPoint\n var elementOffset = 0\n var freshWaypoint = oldTriggerPoint == null\n var contextModifier, wasBeforeScroll, nowAfterScroll\n var triggeredBackward, triggeredForward\n\n if (waypoint.element !== waypoint.element.window) {\n elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n }\n\n if (typeof adjustment === 'function') {\n adjustment = adjustment.apply(waypoint)\n }\n else if (typeof adjustment === 'string') {\n adjustment = parseFloat(adjustment)\n if (waypoint.options.offset.indexOf('%') > - 1) {\n adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n }\n }\n\n contextModifier = axis.contextScroll - axis.contextOffset\n waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n triggeredBackward = wasBeforeScroll && nowAfterScroll\n triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n if (!freshWaypoint && triggeredBackward) {\n waypoint.queueTrigger(axis.backward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (!freshWaypoint && triggeredForward) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n Waypoint.requestAnimationFrame(function() {\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n })\n\n return this\n }\n\n /* Private */\n Context.findOrCreateByElement = function(element) {\n return Context.findByElement(element) || new Context(element)\n }\n\n /* Private */\n Context.refreshAll = function() {\n for (var contextId in contexts) {\n contexts[contextId].refresh()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n Context.findByElement = function(element) {\n return contexts[element.waypointContextKey]\n }\n\n window.onload = function() {\n if (oldWindowLoad) {\n oldWindowLoad()\n }\n Context.refreshAll()\n }\n\n\n Waypoint.requestAnimationFrame = function(callback) {\n var requestFn = window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n requestAnimationFrameShim\n requestFn.call(window, callback)\n }\n Waypoint.Context = Context\n}())\n;(function() {\n 'use strict'\n\n function byTriggerPoint(a, b) {\n return a.triggerPoint - b.triggerPoint\n }\n\n function byReverseTriggerPoint(a, b) {\n return b.triggerPoint - a.triggerPoint\n }\n\n var groups = {\n vertical: {},\n horizontal: {}\n }\n var Waypoint = window.Waypoint\n\n /* http://imakewebthings.com/waypoints/api/group */\n function Group(options) {\n this.name = options.name\n this.axis = options.axis\n this.id = this.name + '-' + this.axis\n this.waypoints = []\n this.clearTriggerQueues()\n groups[this.axis][this.name] = this\n }\n\n /* Private */\n Group.prototype.add = function(waypoint) {\n this.waypoints.push(waypoint)\n }\n\n /* Private */\n Group.prototype.clearTriggerQueues = function() {\n this.triggerQueues = {\n up: [],\n down: [],\n left: [],\n right: []\n }\n }\n\n /* Private */\n Group.prototype.flushTriggers = function() {\n for (var direction in this.triggerQueues) {\n var waypoints = this.triggerQueues[direction]\n var reverse = direction === 'up' || direction === 'left'\n waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n for (var i = 0, end = waypoints.length; i < end; i += 1) {\n var waypoint = waypoints[i]\n if (waypoint.options.continuous || i === waypoints.length - 1) {\n waypoint.trigger([direction])\n }\n }\n }\n this.clearTriggerQueues()\n }\n\n /* Private */\n Group.prototype.next = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n var isLast = index === this.waypoints.length - 1\n return isLast ? null : this.waypoints[index + 1]\n }\n\n /* Private */\n Group.prototype.previous = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n return index ? this.waypoints[index - 1] : null\n }\n\n /* Private */\n Group.prototype.queueTrigger = function(waypoint, direction) {\n this.triggerQueues[direction].push(waypoint)\n }\n\n /* Private */\n Group.prototype.remove = function(waypoint) {\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n if (index > -1) {\n this.waypoints.splice(index, 1)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/first */\n Group.prototype.first = function() {\n return this.waypoints[0]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/last */\n Group.prototype.last = function() {\n return this.waypoints[this.waypoints.length - 1]\n }\n\n /* Private */\n Group.findOrCreate = function(options) {\n return groups[options.axis][options.name] || new Group(options)\n }\n\n Waypoint.Group = Group\n}())\n;(function() {\n 'use strict'\n\n var Waypoint = window.Waypoint\n\n function isWindow(element) {\n return element === element.window\n }\n\n function getWindow(element) {\n if (isWindow(element)) {\n return element\n }\n return element.defaultView\n }\n\n function NoFrameworkAdapter(element) {\n this.element = element\n this.handlers = {}\n }\n\n NoFrameworkAdapter.prototype.innerHeight = function() {\n var isWin = isWindow(this.element)\n return isWin ? this.element.innerHeight : this.element.clientHeight\n }\n\n NoFrameworkAdapter.prototype.innerWidth = function() {\n var isWin = isWindow(this.element)\n return isWin ? this.element.innerWidth : this.element.clientWidth\n }\n\n NoFrameworkAdapter.prototype.off = function(event, handler) {\n function removeListeners(element, listeners, handler) {\n for (var i = 0, end = listeners.length - 1; i < end; i++) {\n var listener = listeners[i]\n if (!handler || handler === listener) {\n element.removeEventListener(listener)\n }\n }\n }\n\n var eventParts = event.split('.')\n var eventType = eventParts[0]\n var namespace = eventParts[1]\n var element = this.element\n\n if (namespace && this.handlers[namespace] && eventType) {\n removeListeners(element, this.handlers[namespace][eventType], handler)\n this.handlers[namespace][eventType] = []\n }\n else if (eventType) {\n for (var ns in this.handlers) {\n removeListeners(element, this.handlers[ns][eventType] || [], handler)\n this.handlers[ns][eventType] = []\n }\n }\n else if (namespace && this.handlers[namespace]) {\n for (var type in this.handlers[namespace]) {\n removeListeners(element, this.handlers[namespace][type], handler)\n }\n this.handlers[namespace] = {}\n }\n }\n\n /* Adapted from jQuery 1.x offset() */\n NoFrameworkAdapter.prototype.offset = function() {\n if (!this.element.ownerDocument) {\n return null\n }\n\n var documentElement = this.element.ownerDocument.documentElement\n var win = getWindow(this.element.ownerDocument)\n var rect = {\n top: 0,\n left: 0\n }\n\n if (this.element.getBoundingClientRect) {\n rect = this.element.getBoundingClientRect()\n }\n\n return {\n top: rect.top + win.pageYOffset - documentElement.clientTop,\n left: rect.left + win.pageXOffset - documentElement.clientLeft\n }\n }\n\n NoFrameworkAdapter.prototype.on = function(event, handler) {\n var eventParts = event.split('.')\n var eventType = eventParts[0]\n var namespace = eventParts[1] || '__default'\n var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {}\n var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || []\n\n nsTypeList.push(handler)\n this.element.addEventListener(eventType, handler)\n }\n\n NoFrameworkAdapter.prototype.outerHeight = function(includeMargin) {\n var height = this.innerHeight()\n var computedStyle\n\n if (includeMargin && !isWindow(this.element)) {\n computedStyle = window.getComputedStyle(this.element)\n height += parseInt(computedStyle.marginTop, 10)\n height += parseInt(computedStyle.marginBottom, 10)\n }\n\n return height\n }\n\n NoFrameworkAdapter.prototype.outerWidth = function(includeMargin) {\n var width = this.innerWidth()\n var computedStyle\n\n if (includeMargin && !isWindow(this.element)) {\n computedStyle = window.getComputedStyle(this.element)\n width += parseInt(computedStyle.marginLeft, 10)\n width += parseInt(computedStyle.marginRight, 10)\n }\n\n return width\n }\n\n NoFrameworkAdapter.prototype.scrollLeft = function() {\n var win = getWindow(this.element)\n return win ? win.pageXOffset : this.element.scrollLeft\n }\n\n NoFrameworkAdapter.prototype.scrollTop = function() {\n var win = getWindow(this.element)\n return win ? win.pageYOffset : this.element.scrollTop\n }\n\n NoFrameworkAdapter.extend = function() {\n var args = Array.prototype.slice.call(arguments)\n\n function merge(target, obj) {\n if (typeof target === 'object' && typeof obj === 'object') {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n target[key] = obj[key]\n }\n }\n }\n\n return target\n }\n\n for (var i = 1, end = args.length; i < end; i++) {\n merge(args[0], args[i])\n }\n return args[0]\n }\n\n NoFrameworkAdapter.inArray = function(element, array, i) {\n return array == null ? -1 : array.indexOf(element, i)\n }\n\n NoFrameworkAdapter.isEmptyObject = function(obj) {\n /* eslint no-unused-vars: 0 */\n for (var name in obj) {\n return false\n }\n return true\n }\n\n Waypoint.adapters.push({\n name: 'noframework',\n Adapter: NoFrameworkAdapter\n })\n Waypoint.Adapter = NoFrameworkAdapter\n}())\n;","// File#: _1_anim-menu-btn\n// Usage: codyhouse.co/license\n(function() {\n var menuBtns = document.getElementsByClassName('js-anim-menu-btn');\n if( menuBtns.length > 0 ) {\n for(var i = 0; i < menuBtns.length; i++) {(function(i){\n initMenuBtn(menuBtns[i]);\n })(i);}\n\n function initMenuBtn(btn) {\n btn.addEventListener('click', function(event){\n event.preventDefault();\n var status = !Util.hasClass(btn, 'anim-menu-btn--state-b');\n Util.toggleClass(btn, 'anim-menu-btn--state-b', status);\n Util.toggleClass(document.getElementsByClassName('js-hide-nav')[0], 'is-open-mobile-menu', status);\n // emit custom event\n var event = new CustomEvent('anim-menu-btn-clicked', {detail: status});\n btn.dispatchEvent(event);\n });\n };\n }\n}());","// File#: _2_flexi-header\n// Usage: codyhouse.co/license\n(function() {\n var flexHeader = document.getElementsByClassName('js-f-header');\n if(flexHeader.length > 0) {\n var menuTrigger = flexHeader[0].getElementsByClassName('js-anim-menu-btn')[0],\n firstFocusableElement = getMenuFirstFocusable();\n\n // we'll use these to store the node that needs to receive focus when the mobile menu is closed\n var focusMenu = false;\n\n menuTrigger.addEventListener('anim-menu-btn-clicked', function(event){ // toggle menu visibility an small devices\n Util.toggleClass(document.getElementsByClassName('f-header__nav')[0], 'f-header__nav--is-visible', event.detail);\n menuTrigger.setAttribute('aria-expanded', event.detail);\n if(event.detail) firstFocusableElement.focus(); // move focus to first focusable element\n else if(focusMenu) {\n focusMenu.focus();\n focusMenu = false;\n }\n });\n\n // listen for key events\n window.addEventListener('keyup', function(event){\n // listen for esc key\n if( (event.keyCode && event.keyCode == 27) || (event.key && event.key.toLowerCase() == 'escape' )) {\n // close navigation on mobile if open\n if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger)) {\n focusMenu = menuTrigger; // move focus to menu trigger when menu is close\n menuTrigger.click();\n }\n }\n // listen for tab key\n if( (event.keyCode && event.keyCode == 9) || (event.key && event.key.toLowerCase() == 'tab' )) {\n // close navigation on mobile if open when nav loses focus\n if(menuTrigger.getAttribute('aria-expanded') == 'true' && isVisible(menuTrigger) && !document.activeElement.closest('.js-f-header')) menuTrigger.click();\n }\n });\n\n function getMenuFirstFocusable() {\n var focusableEle = flexHeader[0].getElementsByClassName('f-header__nav')[0].querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex=\"-1\"]), [contenteditable], audio[controls], video[controls], summary'),\n firstFocusable = false;\n for(var i = 0; i < focusableEle.length; i++) {\n if( focusableEle[i].offsetWidth || focusableEle[i].offsetHeight || focusableEle[i].getClientRects().length ) {\n firstFocusable = focusableEle[i];\n break;\n }\n }\n\n return firstFocusable;\n };\n\n function isVisible(element) {\n return (element.offsetWidth || element.offsetHeight || element.getClientRects().length);\n };\n }\n}());","// File#: _2_hiding-nav\n// Usage: codyhouse.co/license\n(function() {\n var hidingNav = document.getElementsByClassName('js-hide-nav');\n if(hidingNav.length > 0 && window.requestAnimationFrame) {\n var mainNav = Array.prototype.filter.call(hidingNav, function(element) {\n return Util.hasClass(element, 'js-hide-nav--main');\n }),\n subNav = Array.prototype.filter.call(hidingNav, function(element) {\n return Util.hasClass(element, 'js-hide-nav--sub');\n });\n\n var scrolling = false,\n previousTop = window.scrollY,\n currentTop = window.scrollY,\n scrollDelta = 10,\n scrollOffset = 150, // scrollY needs to be bigger than scrollOffset to hide navigation\n headerHeight = 0;\n\n var navIsFixed = false; // check if main navigation is fixed\n if(mainNav.length > 0 && Util.hasClass(mainNav[0], 'hide-nav--fixed')) navIsFixed = true;\n\n // store button that triggers navigation on mobile\n var triggerMobile = getTriggerMobileMenu();\n\n // init navigation and listen to window scroll event\n initSecondaryNav();\n resetHideNav();\n window.addEventListener('scroll', function(event){\n if(scrolling) return;\n scrolling = true;\n window.requestAnimationFrame(resetHideNav);\n });\n\n window.addEventListener('resize', function(event){\n if(scrolling) return;\n scrolling = true;\n window.requestAnimationFrame(function(){\n if(headerHeight > 0 && subNav.length > 0) {\n headerHeight = mainNav[0].offsetHeight;\n subNav[0].style.top = headerHeight+'px';\n }\n // reset both navigation\n hideNavScrollUp();\n\n scrolling = false;\n });\n });\n\n function initSecondaryNav() { // if there's a secondary nav, set its top equal to the header height\n if(subNav.length < 1 || mainNav.length < 1) return;\n headerHeight = mainNav[0].offsetHeight;\n subNav[0].style.top = headerHeight+'px';\n };\n\n function resetHideNav() { // check if navs need to be hidden/revealed\n currentTop = window.scrollY;\n if(currentTop - previousTop > scrollDelta && currentTop > scrollOffset) {\n hideNavScrollDown();\n } else if( previousTop - currentTop > scrollDelta || (previousTop - currentTop > 0 && currentTop < scrollOffset) ) {\n hideNavScrollUp();\n } else if( previousTop - currentTop > 0 && subNav.length > 0 && subNav[0].getBoundingClientRect().top > 0) {\n setTranslate(subNav[0], '0%');\n }\n // if primary nav is fixed -> toggle bg class\n if(navIsFixed) {\n var scrollTop = window.scrollY || window.pageYOffset;\n Util.toggleClass(mainNav[0], 'hide-nav--has-bg', (scrollTop > headerHeight));\n }\n previousTop = currentTop;\n scrolling = false;\n };\n\n function hideNavScrollDown() {\n // if there's a secondary nav -> it has to reach the top before hiding nav\n if( subNav.length > 0 && subNav[0].getBoundingClientRect().top > headerHeight) return;\n // on mobile -> hide navigation only if dropdown is not open\n if(triggerMobile && triggerMobile.getAttribute('aria-expanded') == \"true\") return;\n if( mainNav.length > 0 ) {\n setTranslate(mainNav[0], '-100%');\n mainNav[0].addEventListener('transitionend', function cb(){\n mainNav[0].removeEventListener('transitionend', cb);\n Util.addClass(mainNav[0], 'hide-nav--off-canvas');\n });\n }\n if( subNav.length > 0 ) setTranslate(subNav[0], '-'+headerHeight+'px');\n };\n\n function hideNavScrollUp() {\n if( mainNav.length > 0 ) {setTranslate(mainNav[0], '0%'); Util.removeClass(mainNav[0], 'hide-nav--off-canvas');}\n if( subNav.length > 0 ) setTranslate(subNav[0], '0%');\n };\n\n function setTranslate(element, val) {\n element.style.transform = 'translateY('+val+')';\n };\n\n function getTriggerMobileMenu() {\n // store trigger that toggle mobile navigation dropdown\n var triggerMobileClass = hidingNav[0].getAttribute('data-mobile-trigger');\n if(!triggerMobileClass) return false;\n var trigger = hidingNav[0].getElementsByClassName(triggerMobileClass);\n if(trigger.length > 0) return trigger[0];\n return false;\n };\n\n } else {\n // if window requestAnimationFrame is not supported -> add bg class to fixed header\n var mainNav = document.getElementsByClassName('js-hide-nav--main');\n if(mainNav.length < 1) return;\n if(Util.hasClass(mainNav[0], 'hide-nav--fixed')) Util.addClass(mainNav[0], 'hide-nav--has-bg');\n }\n}());","/**\n * Accordion\n *\n * @requires libraries/util.js\n *\n * @see https://codyhouse.co/ds/components/app/accordion\n */\n\n(function () {\n this.Accordion = function (element) {\n this.element = element;\n this.items = Util.getChildrenByClassName(this.element, 'js-accordion__item');\n this.showClass = 'is-open';\n this.animateHeight = (this.element.getAttribute('data-animation') === 'on');\n this.multiItems = !(this.element.getAttribute('data-multi-items') === 'off');\n this.initAccordion();\n };\n\n Accordion.prototype.initAccordion = function () {\n //set initial aria attributes\n for (var i = 0; i < this.items.length; i++) {\n var button = this.items[i].getElementsByTagName('button')[0],\n content = this.items[i].getElementsByClassName('js-accordion__panel')[0],\n isOpen = Util.hasClass(this.items[i], this.showClass);\n Util.setAttributes(button, {\n 'aria-expanded': isOpen,\n 'aria-controls': 'accordion-content-' + i,\n 'id': 'accordion-header-' + i\n });\n Util.addClass(button, 'js-accordion__trigger');\n Util.setAttributes(content, {'aria-labelledby': 'accordion-header-' + i, 'id': 'accordion-content-' + i});\n }\n\n //listen for Accordion events\n this.initAccordionEvents();\n };\n\n Accordion.prototype.initAccordionEvents = function () {\n var self = this;\n\n this.element.addEventListener('click', function (event) {\n var trigger = event.target.closest('.js-accordion__trigger');\n //check index to make sure the click didn't happen inside a children accordion\n if (trigger && Util.getIndexInArray(self.items, trigger.parentElement) >= 0) self.triggerAccordion(trigger, event.target);\n });\n };\n\n Accordion.prototype.triggerAccordion = function (trigger, target) {\n var self = this;\n var bool = (trigger.getAttribute('aria-expanded') === 'true');\n\n this.animateAccordion(target, bool);\n };\n\n Accordion.prototype.animateAccordion = function (target, bool) {\n var self = this;\n var item = target.closest('.js-accordion__item'),\n content = item.getElementsByClassName('js-accordion__panel')[0];\n\n if (!bool) Util.addClass(item, this.showClass);\n target.setAttribute('aria-expanded', !bool);\n\n if (this.animateHeight) {\n //store initial and final height - animate accordion content height\n var initHeight = bool ? content.offsetHeight : 0,\n finalHeight = bool ? 0 : content.offsetHeight;\n }\n\n if (window.requestAnimationFrame && this.animateHeight) {\n Util.setHeight(initHeight, finalHeight, content, 200, function () {\n self.resetContentVisibility(item, content, target, bool);\n });\n } else {\n self.resetContentVisibility(item, content, target, bool);\n }\n\n if (!this.multiItems && !bool) this.closeSiblings(item);\n\n };\n\n Accordion.prototype.resetContentVisibility = function (item, content, target, bool) {\n Util.toggleClass(item, this.showClass, !bool);\n content.removeAttribute(\"style\");\n };\n\n Accordion.prototype.closeSiblings = function (item) {\n //if only one accordion can be open -> search if there's another one open\n var index = Util.getIndexInArray(this.items, item);\n for (var i = 0; i < this.items.length; i++) {\n if (Util.hasClass(this.items[i], this.showClass) && i !== index) {\n this.animateAccordion(this.items[i].getElementsByClassName('js-accordion__trigger')[0], true);\n return false;\n }\n }\n };\n\n //initialize the Accordion objects\n var accordions = document.getElementsByClassName('js-accordion');\n if (accordions.length > 0) {\n for (var i = 0; i < accordions.length; i++) {\n (function (i) {\n new Accordion(accordions[i]);\n })(i);\n }\n }\n}());","/**\n * Animations\n *\n * @requires plugins/wallop.js\n */\n\n(function (d) {\n [].slice.call(d.querySelectorAll('.u-animation')).forEach(function (el) {\n // .u-animation inner wrap elements\n // @see http://codeblog.cz/vanilla/around.html#wrapinner\n var wrapper = d.createElement('span');\n\n while (el.firstChild) {\n wrapper.append(el.firstChild);\n }\n el.append(wrapper);\n\n\n // waypoint animation\n new Waypoint({\n element: el,\n handler: function(direction) {\n if (direction === 'down') {\n Util.addClass(this.element, 'is-slideInUp');\n // console.log(this.element, 'found it!');\n }\n },\n offset: '80%' // Rispetto il top viewport\n });\n });\n}(document));","/**\n * Back To Top\n *\n * @requires libraries/util.js\n *\n * @see https://codyhouse.co/ds/components/app/back-to-top\n */\n\n(function () {\n var backTop = document.getElementsByClassName('js-backtotop')[0];\n\n function checkBackToTop() {\n var windowTop = window.scrollY || document.documentElement.scrollTop;\n Util.toggleClass(backTop, 'is-visible', windowTop >= scrollOffset);\n scrolling = false;\n }\n\n if (backTop) {\n var scrollDuration = parseInt(backTop.getAttribute('data-duration')) || 300; // scroll to top duration\n var scrollOffset = parseInt(backTop.getAttribute('data-offset')) || 0; // show backtotop if scrolling > scrollOffset\n var scrolling = false;\n\n // detect click on backtotop link\n backTop.addEventListener('click', function (event) {\n event.preventDefault();\n (!window.requestAnimationFrame) ? window.scrollTo(0, 0) : Util.scrollTo(0, scrollDuration);\n // move the focus to the #top-element - don't break keyboard navigation\n Util.moveFocus(document.getElementById(backTop.getAttribute('href').replace('#', '')));\n });\n\n // listen to the window scroll and update backtotop visibility\n checkBackToTop();\n if (scrollOffset > 0) {\n window.addEventListener(\"scroll\", function (event) {\n if (!scrolling) {\n scrolling = true;\n (!window.requestAnimationFrame) ? setTimeout(function () {\n checkBackToTop();\n }, 250) : window.requestAnimationFrame(checkBackToTop);\n }\n });\n }\n }\n}());","/**\n * Brand\n *\n * @requires plugins/swiper.js\n */\n(function () {\n\n new Swiper('.js-brands', {\n spaceBetween: 0,\n slidesPerView: 'auto',\n mousewheel: true,\n grabCursor: true,\n setWrapperSize: false,\n pagination: {\n el: '.swiper-pagination',\n dynamicBullets: true\n }\n });\n\n}());","/**\n * Header Scroll Hidden/Visible\n *\n * @requires libraries/util.js\n *\n * @see https://codyhouse.co/ds/components/app/back-to-top\n */\n(function () {\n var header = document.getElementsByClassName('js-header')[0];\n\n function checkHeaderVisible() {\n var windowTop = window.scrollY || document.documentElement.scrollTop;\n var headerHeight = header.offsetHeight;\n\n Util.toggleClass(header, 'is-visible', windowTop >= scrollOffset);\n Util.toggleClass(header, 'is-fixed', windowTop > 1 && windowTop < headerHeight);\n Util.toggleClass(header, 'is-hidden', windowTop > headerHeight && windowTop < scrollOffset);\n scrolling = false;\n }\n\n if (header) {\n var scrollOffset = parseInt(header.getAttribute('data-offset')) || 0; // show header if scrolling > scrollOffset\n var scrolling = false;\n\n // listen to the window scroll and update header visibility\n checkHeaderVisible();\n\n if (scrollOffset > 0) {\n window.addEventListener(\"scroll\", function (event) {\n if (!scrolling) {\n scrolling = true;\n (!window.requestAnimationFrame) ? setTimeout(function () {\n checkHeaderVisible();\n }, 250) : window.requestAnimationFrame(checkHeaderVisible);\n }\n });\n }\n }\n}());","/**\n * Hero\n *\n * @see {@link TweenMax}\n * @see {@link https://codepen.io/fuzinato/pen/PwLLjB}\n */\n(function () {\n 'use strict';\n\n var linklist = document.querySelector('.js-hero');\n\n if (!linklist) {\n return;\n }\n\n var canvas0 = document.getElementById('canvas0');\n var ctx0 = canvas0.getContext('2d');\n var canvas1 = document.getElementById('canvas1');\n var ctx1 = canvas1.getContext('2d');\n var canvas2 = document.getElementById('canvas2');\n var ctx2 = canvas2.getContext('2d');\n var canvas3 = document.getElementById('canvas3');\n var ctx3 = canvas3.getContext('2d');\n\n\n // CONST\n var VW, VH, AR;\n var IS_ACTIVE = 'is-active';\n\n\n // VARS\n var isAnimating = false;\n var currentImage = 0;\n var prevImage = 0;\n var currentLink;\n var imagesloaded = 0;\n var partMove = {\n val: 1\n };\n var slideshowInterval;\n\n\n // IMAGES STUFF\n var imagesList = [];\n var linkList = [];\n var imgW, imgH, IAR;\n\n\n // CANVAS STUFF\n var partList = [{\n context: ctx1,\n xpos: 100,\n radius: 0 // circumference of mask1\n }, {\n context: ctx2,\n xpos: -70,\n radius: 0 // circumference of mask2\n }, {\n context: ctx3,\n xpos: 50,\n radius: 0 // circumference of mask3\n }];\n\n\n function drawImages() {\n var imgPrev = imagesList[prevImage];\n var imgNext = imagesList[currentImage];\n\n // This is Next\n ctx0.globalAlpha = 1;\n ctx0.drawImage(imgNext, 0, 0, imgW, imgH);\n\n // This is Prev\n ctx0.globalAlpha = partMove.val;\n ctx0.drawImage(imgPrev, 0, 0, imgW, imgH);\n\n\n var obj, ctx, xPrev, xNext;\n for (var i = 0; i < partList.length; i++) {\n\n obj = partList[i];\n ctx = obj.context;\n xPrev = -obj.xpos * (1 - partMove.val);\n xNext = obj.xpos * partMove.val;\n\n ctx.clearRect(0, 0, VW, VH);\n\n ctx.save();\n ctx.beginPath();\n ctx.arc(VW / 2, VH / 2, obj.radius, 0, 2 * Math.PI, false);\n ctx.fill();\n\n // This is Next\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = 'source-in';\n ctx.drawImage(imgNext, xNext, 0, imgW, imgH);\n\n // This is Prev\n ctx.globalAlpha = partMove.val;\n ctx.globalCompositeOperation = 'source-atop';\n ctx.drawImage(imgPrev, xPrev, 0, imgW, imgH);\n\n ctx.globalCompositeOperation = 'source-over';\n ctx.globalAlpha = 1;\n }\n }\n\n function changeImage() {\n // Do not interupt previous movement\n if (isAnimating) {\n return;\n }\n\n isAnimating = true;\n\n TweenMax.to(partMove, 1, {\n val: 0,\n ease: Power1.easeInOut,\n onUpdate: drawImages,\n onComplete: function () {\n partMove.val = 1;\n isAnimating = false;\n }\n });\n\n }\n\n function onListClick(e) {\n e.preventDefault();\n\n // Do not interupt previous animation\n if (isAnimating) {\n return;\n }\n\n var trgt = e.target;\n\n if (trgt.nodeName === 'A') {\n\n prevImage = currentImage;\n currentImage = parseInt(trgt.getAttribute('data-order'), 10);\n changeImage();\n\n selectLink();\n\n clearInterval(slideshowInterval);\n }\n }\n\n function selectLink() {\n if (currentLink !== undefined) {\n currentLink.classList.remove(IS_ACTIVE);\n }\n currentLink = linkList[currentImage];\n currentLink.classList.add(IS_ACTIVE);\n\n }\n\n\n function calculateScreen() {\n VW = window.innerWidth;\n VH = window.innerHeight;\n AR = VW / VH;\n\n canvas0.width = canvas1.width = canvas2.width = canvas3.width = VW;\n canvas0.height = canvas1.height = canvas2.height = canvas3.height = VH;\n\n partList[0].radius = VW * 0.45;\n partList[1].radius = VW * 0.2;\n partList[2].radius = VW * 0.06;\n }\n\n function resizeBg() {\n var image1 = imagesList[0];\n IAR = image1.width / image1.height;\n if (IAR < AR) {\n imgW = VW;\n imgH = VW / IAR;\n } else {\n imgW = VH * IAR;\n imgH = VH;\n }\n }\n\n function slideshowChange() {\n prevImage = currentImage;\n (currentImage + 1 >= imagesList.length) ? currentImage = 0 : currentImage++;\n changeImage();\n selectLink();\n }\n\n function addEL() {\n var debounceResize = debounce(function () {\n calculateScreen();\n resizeBg();\n changeImage();\n }, 200);\n\n window.addEventListener('resize', debounceResize);\n linklist.addEventListener('click', onListClick);\n\n }\n\n\n function preloadImages() {\n imagesList.forEach(function (img) {\n if (img.complete) {\n handleImageComplete();\n } else {\n img.onload = handleImageComplete;\n }\n\n });\n }\n\n function handleImageComplete() {\n imagesloaded++;\n if (imagesloaded === imagesList.length) {\n addEL();\n init();\n }\n }\n\n function init() {\n calculateScreen();\n resizeBg();\n selectLink();\n changeImage();\n slideshowInterval = setInterval(slideshowChange, 3000);\n }\n\n\n function preInit() {\n var alist = linklist.querySelectorAll('a');\n var img;\n\n for (var i = 0; i < alist.length; i++) {\n\n linkList.push(alist[i]);\n\n img = new Image();\n img.src = alist[i].getAttribute('data-src');\n img.srcset = alist[i].getAttribute('data-srcset');\n imagesList.push(img);\n\n }\n\n preloadImages();\n }\n\n preInit();\n\n\n /**\n * Helpers\n * @see {@link http://davidwalsh.name/javascript-debounce-function}\n */\n function debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this, args = arguments;\n var later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n }\n})();\n","/**\n * Modal\n *\n * @see {@link plugins/jquery.magnific-popup.js}\n *\n * 01. Board\n */\n\n(function ($) {\n /**\n * Board\n */\n (function () {\n $('.js-inline-modal').magnificPopup({\n delegate: 'a',\n type: 'inline',\n fixedContentPos: false,\n fixedBgPos: true,\n overflowY: 'auto',\n closeBtnInside: false,\n preloader: false,\n midClick: true,\n removalDelay: 300,\n mainClass: 'mfp-slide-bottom'\n });\n\n $(document).on('click', '.popup-modal-dismiss', function (e) {\n e.preventDefault();\n $.magnificPopup.close();\n });\n }());\n}(jQuery));","/**\n * Share\n *\n * Visualizza i pulsanti di condivisione quando il viewport raggiunge\n * il data-offset impostato sull’elemento .js-share\n *\n * @see {@link libraries/util.js}\n * @see {@link https://codyhouse.co/ds/components/app/back-to-top}\n */\n\n(function (w, d) {\n var share = d.querySelector('.js-share');\n\n if (share) {\n var scrollOffset = parseInt(share.getAttribute('data-offset'), 10) || 0;\n var scrolling = false;\n\n function checkStickyShare() {\n var windowTop = w.scrollY || d.documentElement.scrollTop;\n Util.toggleClass(share, 'is-visible', windowTop >= scrollOffset);\n scrolling = false;\n }\n\n if (scrollOffset > 0) {\n w.addEventListener(\"scroll\", function () {\n if (!scrolling) {\n scrolling = true;\n\n if (w.requestAnimationFrame) {\n w.requestAnimationFrame(checkStickyShare);\n } else {\n setTimeout(checkStickyShare, 250);\n }\n }\n });\n\n checkStickyShare();\n }\n }\n}(window, document));\n","/**\n * Supports\n *\n * 01. SVG\n * 02. Object-Fit Image\n *\n * @requires libraries/svg4everybody.js\n * @requires libraries/ofi.js\n */\n(function () {\n svg4everybody();\n objectFitImages();\n}());\n\n\n/**\n * Lazy iframe\n * Con verifica accettazione cookie\n *\n * @see {@link libraries/util.js}\n */\n(function (w, d) {\n w.onCookiePolicyAccepted(function () {\n [].slice.call(d.getElementsByTagName('iframe')).forEach(function (iframe) {\n if (iframe) {\n Util.addClass(iframe, 'lazyload');\n }\n });\n });\n}(window, document));\n\n\n/**\n * Facebook SDK\n *\n * @requires libraries/lazysizes.js\n */\n(function () {\n window.onCookiePolicyAccepted(function () {\n if (typeof fbLang !== 'undefined') {\n\n document.addEventListener('lazybeforeunveil', function (e) {\n var fb = e.target.getAttribute('data-lazyfb');\n\n if (fb) {\n //e.target.style.backgroundColor = 'red';\n\n window.fbAsyncInit = function () {\n FB.init({\n appId : fbAppId,\n autoLogAppEvents : true,\n xfbml : true,\n version : 'v3.2'\n });\n\n fbApiInit = true; // init flag\n };\n\n loadScript('https://connect.facebook.net/' + fbLang + '/sdk.js');\n }\n });\n\n }\n });\n}());","/**\n * Tabs\n *\n *\n * @see {@link libraries/util.js}\n * @see {@link plugins/wallop.js}\n */\n\n(function (d) {\n var tabs = d.querySelectorAll('.js-tabs');\n\n if (!tabs.length) {\n return;\n }\n\n tabs.forEach(function (container) {\n // waypoint animation\n new Waypoint({\n element: container,\n handler: function (direction) {\n if (direction === 'down') {\n Util.addClass(container, 'is-viewport');\n // console.log(this.element, 'found it!');\n }\n },\n offset: '90%' // Rispetto il top viewport\n });\n\n // wallop tabs\n var tabsWallop = new Wallop(container, {\n itemClass: 'js-tabs-panel',\n currentItemClass: 'is-current',\n showPreviousClass: 'has-showPrevious',\n showNextClass: 'has-showNext',\n hidePreviousClass: 'has-hidePrevious',\n hideNextClass: 'has-hideNext',\n carousel: true\n });\n\n var tabsControls = container.querySelectorAll('.js-tabs-control');\n\n tabsControls.forEach(function (control, index) {\n control.addEventListener('click', function () {\n tabsWallop.goTo(index);\n });\n });\n\n tabsWallop.on('change', function (event) {\n tabsControls.forEach(function (control) {\n Util.removeClass(control, 'is-current');\n });\n\n Util.addClass(tabsControls[event.detail.currentItemIndex], 'is-current');\n });\n });\n}(document));\n","(function ($) {\n 'use strict';\n\n function play(video, type, videoId) {\n var url = '';\n\n if (type === 'vimeo') {\n url = 'https://player.vimeo.com/video/' + videoId + '?autoplay=1&byline=0&badge=0&title=0&loop=1';\n } else {\n url = 'https://www.youtube.com/embed/' + videoId + '?autoplay=1&rel=0&showinfo=0&&autohide=1&color=white';\n }\n\n video\n .html('')\n .show();\n }\n\n /**\n * Replacement\n */\n $('.js-video').each(function () {\n var self = $(this);\n var image = self.find('.js-videoImage');\n var playlistItems = self.find('.js-videoItem');\n var video = self.find('.js-videoIframe');\n\n image.on('click', function () {\n image.hide();\n\n play(video, video.data('video-type'), video.data('video-id'));\n });\n\n playlistItems.on('click', function () {\n var item = $(this);\n\n playlistItems.removeClass('is-active');\n item.addClass('is-active');\n\n image.hide();\n\n play(video, item.data('video-type'), item.data('video-id'));\n });\n });\n\n\n /**\n * Modal\n *\n * @requires plugins/jquery.magnific-popup.js\n */\n $('.js-videoModal').magnificPopup({\n type: 'iframe',\n removalDelay: 160,\n preloader: false,\n fixedContentPos: false\n });\n\n}(jQuery));"]}