{"version":3,"sources":["webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/raf.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/caf.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/extend.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/checkStorageValue.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/setLocalStorage.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getBody.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/docElement.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/setFakeBody.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/resetFakeBody.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/addCSSRule.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getCssRulesLength.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/forEach.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/classListSupport.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/hasClass.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/addClass.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/removeClass.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/hasAttr.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getAttr.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/isNodeList.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/setAttrs.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/removeAttrs.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/arrayFromNodeList.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/hideElement.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/showElement.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/isVisible.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/whichProperty.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getEndProperty.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/passiveOption.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/addEvents.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/removeEvents.js","webpack:///../js/libs/tiny-slider.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/calc.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/percentageLayout.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/mediaquerySupport.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/has3DTransforms.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/createStyleSheet.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/events.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getSlideId.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/jsTransform.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/removeCSSRule.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/getTouchDirection.js","webpack:///C:/agentEucerin/_work/343/s/Eucerin/Foundation/Eucerin.Foundation.Core/node_modules/tiny-slider/src/helpers/toDegree.js"],"names":["raf_win","window","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","caf_win","caf","cancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","extend","obj","name","copy","target","arguments","i","length","undefined","checkStorageValue","value","indexOf","JSON","parse","setLocalStorage","storage","key","access","setItem","e","getBody","doc","document","body","createElement","fake","docElement","documentElement","setFakeBody","docOverflow","style","overflow","background","appendChild","resetFakeBody","remove","offsetHeight","addCSSRule","sheet","selector","rules","index","insertRule","addRule","getCssRulesLength","cssRules","forEach","arr","callback","scope","l","call","classListSupport","hasClass","el","str","classList","contains","className","addClass","add","removeClass","replace","hasAttr","attr","hasAttribute","getAttr","getAttribute","isNodeList","item","setAttrs","els","attrs","Array","Object","prototype","toString","setAttribute","removeAttrs","attrLength","j","removeAttribute","arrayFromNodeList","nl","push","hideElement","forceHide","display","showElement","isVisible","getComputedStyle","whichProperty","props","Props","charAt","toUpperCase","substr","prefix","prop","getEndProperty","propIn","propOut","endProp","test","toLowerCase","supportsPassive","passiveOption_opts","defineProperty","get","addEventListener","passiveOption","passive","addEvents","preventScrolling","option","removeEvents","removeEventListener","keys","object","hasOwnProperty","Element","this","parentNode","removeChild","tns","options","container","mode","axis","items","gutter","edgePadding","fixedWidth","autoWidth","viewportMax","slideBy","center","controls","controlsPosition","controlsText","controlsContainer","prevButton","nextButton","nav","navPosition","navContainer","navAsThumbnails","arrowKeys","speed","autoplay","autoplayPosition","autoplayTimeout","autoplayDirection","autoplayText","autoplayHoverPause","autoplayButton","autoplayButtonOutput","autoplayResetOnVisibility","initSingleSlide","animateIn","animateOut","animateNormal","animateDelay","loop","rewind","autoHeight","responsive","lazyload","lazyloadSelector","touch","mouseDrag","swipeAngle","nested","preventActionWhenRunning","preventScrollOnTouch","freezable","onInit","useLocalStorage","win","KEYS","ENTER","SPACE","LEFT","RIGHT","tnsStorage","localStorageAccess","browserInfo","navigator","userAgent","uid","Date","localStorage","getItem","removeItem","CALC","div","result","val","vals","width","offsetWidth","calc","PERCENTAGELAYOUT","supported","wrapper","outer","innerHTML","Math","abs","getBoundingClientRect","left","children","count","percentageLayout","CSSMQ","matchMedia","msMatchMedia","position","rule","type","styleSheet","cssText","createTextNode","currentStyle","mediaquerySupport","TRANSFORM","HAS3DTRANSFORMS","tf","has3d","cssTF","slice","insertBefore","getPropertyValue","has3DTransforms","TRANSITIONDURATION","TRANSITIONDELAY","ANIMATIONDURATION","ANIMATIONDELAY","TRANSITIONEND","ANIMATIONEND","supportConsoleWarn","console","warn","tnsList","optionsElements","querySelector","nodeName","carousel","responsiveTem","updateOptions","middleWrapper","breakpointZone","horizontal","outerWrapper","innerWrapper","containerParent","containerHTML","outerHTML","slideItems","slideCount","windowWidth","getWindowWidth","isOn","setBreakpointZone","slidePositions","imgsComplete","liveregionCurrent","getOption","viewport","getViewportWidth","floor","fixedWidthViewportWidth","media","nonce","createStyleSheet","slideItemsOut","cloneCount","itemsMax","bp","tem","ceil","min","apply","max","getItemsMax","hasOption","getCloneCountForLoop","slideCountNew","hasRightDeadZone","rightBoundary","getRightBoundary","updateIndexBeforeTransform","transformAttr","transformPrefix","transformPostfix","getIndexMax","getStartIndex","indexCached","indexMin","getCurrentSlide","indexMax","moveDirectionExpected","running","events","topics","on","eventName","fn","off","splice","emit","data","newContainerClasses","slideId","tnsId","getSlideId","disable","disabled","freeze","getFreeze","frozen","controlsEvents","click","onControlsClick","keydown","getEvent","keyIndex","keyCode","navEvents","onTransitionEnd","getTarget","navIndex","navClicked","Number","targetIndexBase","pages","targetIndex","goTo","navCurrentIndex","animating","stopAutoplay","curElement","activeElement","setFocus","navItems","hoverEvents","mouseover","stopAutoplayTimer","autoplayHoverPaused","mouseout","setAutoplayTimer","visibilityEvent","visibilitychange","hidden","autoplayVisibilityPaused","docmentKeydownEvent","touchEvents","touchstart","onPanStart","touchmove","onPanMove","touchend","onPanEnd","touchcancel","dragEvents","mousedown","mousemove","mouseup","mouseleave","hasControls","hasNav","hasAutoplay","hasTouch","hasMouseDrag","slideActiveClass","imgCompleteClass","imgEvents","load","imgLoaded","error","img","imgCompleted","imgFailed","preventScroll","prevIsButton","nextIsButton","controlsContainerHTML","prevButtonHTML","nextButtonHTML","navContainerHTML","getPages","pagesCached","getCurrentNavIndex","navCurrentIndexCached","navActiveClass","navStr","navStrCurrent","autoplayTimer","autoplayUserPaused","autoplayButtonHTML","autoplayHtmlStrings","translateInit","rafIndex","initPosition","lastPosition","panStart","getDist","a","b","x","y","resetVariblesWhenDisable","wp","aria-hidden","tabindex","fragmentBefore","createDocumentFragment","fragmentAfter","num","cloneFirst","cloneNode","firstChild","cloneLast","initStructure","fontSize","slide","dir","marginRight","getSlideMarginLeft","marginLeft","getTransitionDurationStyle","getInnerWrapperStyles","getContainerWidth","getSlideWidthStyle","getSlideGutterStyle","getAnimationDurationStyle","update_carousel_transition_duration","parseInt","opts","middleWrapperStr","innerWrapperStr","containerStr","slideStr","itemsBP","fixedWidthBP","speedBP","edgePaddingBP","autoHeightBP","gutterBP","initSheet","initSliderTransform","updateIndex","leftEdge","rightEdge","transformCore","resetDuration","doContainerTransform","element","postfix","to","duration","tick","unit","from","positionTick","moveElement","jsTransform","getContainerTransformValue","updateContentWrapperHeight","eve","animateSlide","version","getInfo","info","play","startAutoplay","pause","updateSliderHeight","updateInnerWrapperHeight","refresh","destroy","ownerNode","resize","onResize","toggleAutoplay","clearInterval","htmlList","_typeof","prevEl","previousElementSibling","parentEl","nextElementSibling","firstElementChild","rebuild","condition","ind","getAbsIndex","absIndex","innerWidth","clientWidth","getInsertPosition","pos","gap","getClientWidth","rect","right","ww","edgePaddingTem","gutterTem","fixedWidthTem","speedTem","gutterTemUnit","itemsTem","dividend","getCSSPrefix","substring","imgs","querySelectorAll","src","imgsLoadedCheck","getImageArray","initSliderTransformStyleCheck","doContainerTransformSilent","initTools","initEvents","stylesApplicationCheck","toFixed","initSliderTransformCore","setSlidePositions","updateSlideStatus","insertAdjacentHTML","getLiveRegionStr","txt","data-action","aria-label","data-nav","aria-controls","navHtml","hiddenStr","updateNavVisibility","data-controls","isButton","updateControlsStatus","disableUI","resizeTasks","doAutoHeight","disableSlider","freezeSlider","additionalUpdates","bpChanged","breakpointZoneTem","needContainerTransform","indChanged","itemsChanged","disableTem","freezeTem","arrowKeysTem","controlsTem","navTem","touchTem","mouseDragTem","autoplayTem","autoplayHoverPauseTem","autoplayResetOnVisibilityTem","indexTem","autoHeightTem","controlsTextTem","centerTem","autoplayTextTem","classN","enableUI","enableSlider","margin","unfreezeSlider","height","html","len","updateLiveRegion","updateGallerySlidePositions","autoheightTem","deleteRule","removeRule","removeCSSRule","vp","getVisibleSlideRange","start","end","rangestart","rangeend","parseFloat","point","cell","navPrev","navCurrent","updateNavStatus","getMaxSlideHeight","slideStart","slideRange","heights","maxHeight","attr2","base","range","getLowerCaseNodeName","isAriaDisabled","disEnableElement","prevDisabled","nextDisabled","disablePrev","disableNext","getCenterGap","denominator","number","classOut","classIn","isOut","render","sliderMoved","strTrans","event","propertyName","indexGap","isNaN","factor","passEventObject","targetIn","setInterval","updateAutoplayButton","action","focus","isTouchEvent","changedTouches","srcElement","preventDefaultBehavior","preventDefault","returnValue","getMoveDirectionExpected","angle","direction","getTouchDirection","atan2","PI","toDegree","$","clientX","clientY","panUpdate","err","dist","percentageX","preventClick","indexMoved","moved","rough","displayIndex"],"mappings":"0FAAA,IAAIA,EAAGC,OAEAC,EAAUF,EAAGG,uBACfH,EAAGI,6BACHJ,EAAGK,0BACHL,EAAGM,yBACR,SAAAC,GAAmB,OAAAC,WAAAD,EAAA,KCNfE,EAAGR,OAEAS,EAAUD,EAAGE,sBACfF,EAAGG,yBACR,SAAAC,GAAkBC,aAAAD,ICJX,SAAAE,IAMP,IALA,IAAAC,EAAAC,EAAAC,EACAC,EAAAC,UAAA,OACAC,EAAA,EACAC,EAAAF,UAAAE,OAEQD,EAAAC,EAAYD,IACpB,WAAAL,EAAAI,UAAAC,IACA,IAAAJ,KAAAD,EAGAG,KAFAD,EAAAF,EAAAC,UAISM,IAAAL,IACTC,EAAAF,GAAAC,GAKA,OAAAC,ECnBO,SAAAK,EAAAC,GACP,uBAAAC,QAAAD,IAAA,EAAAE,KAAAC,MAAAH,KCDO,SAAAI,EAAAC,EAAAC,EAAAN,EAAAO,GACP,GAAAA,EACA,IAASF,EAAAG,QAAAF,EAAAN,GAA+B,MAAAS,IAExC,OAAAT,ECJO,SAAAU,IACP,IAAAC,EAAAC,SACAC,EAAAF,EAAAE,KAOA,OALAA,KACAA,EAAAF,EAAAG,cAAA,SACAC,MAAA,GAGAF,ECTO,IAAAG,EAAAJ,SAAAK,gBCEA,SAAAC,EAAAL,GACP,IAAAM,EAAA,GAUA,OATAN,EAAAE,OACAI,EAAkBH,EAAUI,MAAAC,SAE5BR,EAAAO,MAAAE,WAAA,GAEAT,EAAAO,MAAAC,SAA0BL,EAAUI,MAAAC,SAAA,SAChCL,EAAUO,YAAAV,IAGdM,ECXO,SAAAK,EAAAX,EAAAM,GACPN,EAAAE,OACAF,EAAAY,SACIT,EAAUI,MAAAC,SAAAF,EAGVH,EAAUU,cCNP,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAEP,eAAAH,EACAA,EAAAI,WAAAH,EAAA,IAAoCC,EAAA,IAAcC,GAClDH,EAAAK,QAAAJ,EAAAC,EAAAC,GCNO,SAAAG,EAAAN,GAEP,OADA,eAAAA,IAAAO,SAAAP,EAAAE,OACAjC,OCDO,SAAAuC,EAAAC,EAAAC,EAAAC,GACP,QAAA3C,EAAA,EAAA4C,EAAAH,EAAAxC,OAAiCD,EAAA4C,EAAO5C,IACxC0C,EAAAG,KAAAF,EAAAF,EAAAzC,MCHO,IAAA8C,EAAA,cAAA9B,SAAAE,cAAA,KCEP6B,EAAeD,EACf,SAAAE,EAAAC,GAAwB,OAAAD,EAAAE,UAAAC,SAAAF,IACxB,SAAAD,EAAAC,GAAwB,OAAAD,EAAAI,UAAA/C,QAAA4C,IAAA,GCHxBI,EAAeP,EACf,SAAAE,EAAAC,GACWF,EAAQC,EAAAC,IAAaD,EAAAE,UAAAI,IAAAL,IAEhC,SAAAD,EAAAC,GACWF,EAAQC,EAAAC,KAAaD,EAAAI,WAAA,IAAAH,ICLhCM,EAAkBT,EAClB,SAAAE,EAAAC,GACUF,EAAQC,EAAAC,IAAaD,EAAAE,UAAArB,OAAAoB,IAE/B,SAAAD,EAAAC,GACUF,EAAQC,EAAAC,KAAYD,EAAAI,UAAAJ,EAAAI,UAAAI,QAAAP,EAAA,MCNvB,SAAAQ,EAAAT,EAAAU,GACP,OAAAV,EAAAW,aAAAD,GCDO,SAAAE,EAAAZ,EAAAU,GACP,OAAAV,EAAAa,aAAAH,GCDO,SAAAI,EAAAd,GAEP,gBAAAA,EAAAe,KCAO,SAAAC,EAAAC,EAAAC,GAEP,GADAD,EAASH,EAAUG,iBAAAE,MAAAF,MACnB,oBAAAG,OAAAC,UAAAC,SAAAzB,KAAAqB,GAEA,QAAAlE,EAAAiE,EAAAhE,OAA0BD,KAC1B,QAAAU,KAAAwD,EACAD,EAAAjE,GAAAuE,aAAA7D,EAAAwD,EAAAxD,ICNO,SAAA8D,EAAAP,EAAAC,GACPD,EAASH,EAAUG,iBAAAE,MAAAF,MAInB,IADA,IAAAQ,GAFAP,eAAAC,MAAAD,OAEAjE,OACAD,EAAAiE,EAAAhE,OAA0BD,KAC1B,QAAA0E,EAAAD,EAA4BC,KAC5BT,EAAAjE,GAAA2E,gBAAAT,EAAAQ,ICTO,SAAAE,EAAAC,GAEP,IADA,IAAApC,KACAzC,EAAA,EAAA4C,EAAAiC,EAAA5E,OAAgCD,EAAA4C,EAAO5C,IACvCyC,EAAAqC,KAAAD,EAAA7E,IAEA,OAAAyC,ECLO,SAAAsC,EAAA/B,EAAAgC,GACP,SAAAhC,EAAAxB,MAAAyD,UAAoCjC,EAAAxB,MAAAyD,QAAA,QCD7B,SAAAC,EAAAlC,EAAAgC,GACP,SAAAhC,EAAAxB,MAAAyD,UAAoCjC,EAAAxB,MAAAyD,QAAA,ICD7B,SAAAE,EAAAnC,GACP,eAAApE,OAAAwG,iBAAApC,GAAAiC,QCDO,SAAAI,EAAAC,GACP,oBAAAA,EAAA,CACA,IAAA7C,GAAA6C,GACAC,EAAAD,EAAAE,OAAA,GAAAC,cAAAH,EAAAI,OAAA,IACA,yBAEAlD,QAAA,SAAAmD,GACA,OAAAA,GAAA,cAAAL,GACA7C,EAAAqC,KAAAa,EAAAJ,KAIAD,EAAA7C,EAKA,IAFA,IAAAO,EAAAhC,SAAAE,cAAA,eAEAlB,GADAsF,EAAArF,OACA,GAAgBD,EAAAsF,EAAArF,OAAkBD,IAAA,CAClC,IAAA4F,EAAAN,EAAAtF,GACA,QAAAE,IAAA8C,EAAAxB,MAAAoE,GAAuC,OAAAA,EAGvC,SClBO,SAAAC,EAAAC,EAAAC,GACP,IAAAC,GAAA,EAQA,MAPA,UAAAC,KAAAH,GACAE,EAAA,SAAAD,EAAA,MACG,KAAAE,KAAAH,GACHE,EAAA,IAAAD,EAAA,MACGD,IACHE,EAAAD,EAAAG,cAAA,OAEAF,ECZA,IAAAG,GAAA,EACA,IACA,IAAMC,EAAIhC,OAAAiC,kBAA2B,WACrCC,IAAA,WACAH,GAAA,KAGAvH,OAAA2H,iBAAA,YAAwCH,GACvC,MAAAvF,IACM,IAAA2F,IAAAL,IAAuCM,SAAA,GCRvC,SAAAC,EAAA1D,EAAArD,EAAAgH,GACP,QAAAf,KAAAjG,EAAA,CACA,IAAAiH,GAAA,0BAAAvG,QAAAuF,IAAA,IAAAe,GAAuFH,EACvFxD,EAAAuD,iBAAAX,EAAAjG,EAAAiG,GAAAgB,ICHO,SAAAC,EAAA7D,EAAArD,GACP,QAAAiG,KAAAjG,EAAA,CACA,IAAAiH,GAAA,0BAAAvG,QAAAuF,IAAA,GAAkEY,EAClExD,EAAA8D,oBAAAlB,EAAAjG,EAAAiG,GAAAgB,mSCCKxC,OAAO2C,OACR3C,OAAO2C,KAAO,SAAUC,GACtB,IAAID,KACJ,IAAK,IAAInH,KAAQoH,EACX5C,OAAOC,UAAU4C,eAAepE,KAAKmE,EAAQpH,IAC/CmH,EAAKjC,KAAKlF,GAGd,OAAOmH,IAGL,WAAYG,QAAQ7C,YACxB6C,QAAQ7C,UAAUxC,OAAS,WACrBsF,KAAKC,YACPD,KAAKC,WAAWC,YAAYF,QA+C3B,IAAIG,EAAM,SAANA,EAAgBC,GACzBA,EAAU7H,GACR8H,UAAW,UACXC,KAAM,WACNC,KAAM,aACNC,MAAO,EACPC,OAAQ,EACRC,YAAa,EACbC,YAAY,EACZC,WAAW,EACXC,aAAa,EACbC,QAAS,EACTC,QAAQ,EACRC,UAAU,EACVC,iBAAkB,MAClBC,cAAe,OAAQ,QACvBC,mBAAmB,EACnBC,YAAY,EACZC,YAAY,EACZC,KAAK,EACLC,YAAa,MACbC,cAAc,EACdC,iBAAiB,EACjBC,WAAW,EACXC,MAAO,IACPC,UAAU,EACVC,iBAAkB,MAClBC,gBAAiB,IACjBC,kBAAmB,UACnBC,cAAe,QAAS,QACxBC,oBAAoB,EACpBC,gBAAgB,EAChBC,sBAAsB,EACtBC,2BAA2B,EAE3BC,iBAAiB,EACjBC,UAAW,aACXC,WAAY,cACZC,cAAe,aACfC,cAAc,EACdC,MAAM,EACNC,QAAQ,EACRC,YAAY,EACZC,YAAY,EACZC,UAAU,EACVC,iBAAkB,gBAClBC,OAAO,EACPC,WAAW,EACXC,WAAY,GACZC,QAAQ,EACRC,0BAA0B,EAC1BC,sBAAsB,EACtBC,WAAW,EACXC,QAAQ,EACRC,iBAAiB,GAChBpD,OAEH,IAAIxG,EAAMC,SACR4J,EAAMhM,OACNiM,GACEC,MAAO,GACPC,MAAO,GACPC,KAAM,GACNC,MAAO,IAETC,KACAC,EAAqB5D,EAAQoD,gBAE/B,GAAIQ,EAAoB,CAEtB,IAAIC,EAAcC,UAAUC,UACxBC,EAAM,IAAIC,KAEd,KACEN,EAAaN,EAAIa,eAEfP,EAAWtK,QAAQ2K,EAAKA,GACxBJ,EAAqBD,EAAWQ,QAAQH,IAAQA,EAChDL,EAAWS,WAAWJ,IAEtBJ,GAAqB,EAElBA,IAAsBD,MAC3B,MAAOrK,GACPsK,GAAqB,EAGnBA,IAEED,EAAU,QAAcA,EAAU,SAAeE,IAClD,KAAM,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,OAAO5I,QAAQ,SAAUuB,GAAQmH,EAAWS,WAAW5H,KAGnI0H,aAAY,OAAaL,GAI7B,IAAIQ,EAAOV,EAAU,GAAS/K,EAAkB+K,EAAU,IAAU1K,EAAgB0K,EAAY,KC7J7F,WACP,IAAAnK,EAAAC,SACAC,EAAaH,IACbS,EAAoBD,EAAWL,GAC/B4K,EAAA9K,EAAAG,cAAA,OACA4K,GAAA,EAEA7K,EAAAU,YAAAkK,GACA,IAIA,IAHA,IAEAE,EAFA9I,EAAA,cACA+I,GAAA,OAAA/I,EAAA,YAAAA,EAAA,eAAAA,GAEAjD,EAAA,EAAmBA,EAAA,EAAOA,IAG1B,GAFA+L,EAAAC,EAAAhM,GACA6L,EAAArK,MAAAyK,MAAAF,EACA,MAAAF,EAAAK,YAAA,CACAJ,EAAAC,EAAAvI,QAAAP,EAAA,IACA,OAGG,MAAApC,IAIH,OAFAI,EAAAE,KAAcS,EAAaX,EAAAM,GAAAsK,EAAAhK,SAE3BiK,EDqI0GK,GAAQhB,GAC5GiB,EAAmBlB,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,ME/JzG,WAEP,IAQAmB,EARAtL,EAAAC,SACAC,EAAaH,IACbS,EAAoBD,EAAWL,GAC/BqL,EAAAvL,EAAAG,cAAA,OACAqL,EAAAxL,EAAAG,cAAA,OACA+B,EAAA,GAKAqJ,EAAAlJ,UAAA,cACAmJ,EAAAnJ,UAAA,WAEA,QAAApD,EAAA,EAAiBA,EAPjB,GAO4BA,IAC5BiD,GAAA,cAWA,OARAsJ,EAAAC,UAAAvJ,EACAqJ,EAAA3K,YAAA4K,GACAtL,EAAAU,YAAA2K,GAEAD,EAAAI,KAAAC,IAAAJ,EAAAK,wBAAAC,KAAAL,EAAAM,SAAAC,IAAAH,wBAAAC,MAAA,EAEA3L,EAAAE,KAAcS,EAAaX,EAAAM,GAAA+K,EAAAzK,SAE3BwK,EFoIuHU,GAAoB5B,GACrI6B,EAAQ9B,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,MGlK9F,WACP,GAAAtM,OAAAqO,YAAArO,OAAAsO,aACA,SAGA,IAMAC,EANApM,EAAAC,SACAC,EAAaH,IACbS,EAAoBD,EAAWL,GAC/B4K,EAAA9K,EAAAG,cAAA,OACAM,EAAAT,EAAAG,cAAA,SACAkM,EAAA,kEAmBA,OAhBA5L,EAAA6L,KAAA,WACAxB,EAAAzI,UAAA,cAEAnC,EAAAU,YAAAH,GACAP,EAAAU,YAAAkK,GAEArK,EAAA8L,WACA9L,EAAA8L,WAAAC,QAAAH,EAEA5L,EAAAG,YAAAZ,EAAAyM,eAAAJ,IAGAD,EAAAvO,OAAAwG,iBAAAxG,OAAAwG,iBAAAyG,GAAAsB,SAAAtB,EAAA4B,aAAA,SAEAxM,EAAAE,KAAcS,EAAaX,EAAAM,GAAAsK,EAAAhK,SAE3B,aAAAsL,EHqI4GO,GAAqBvC,GAC3HwC,EAAYzC,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,MAAO7F,EAAc,aAAc8F,GACtIyC,EAAkB1C,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,MIpKxG,SAAA2C,GACP,IAAAA,EAAY,SACZ,IAAAjP,OAAAwG,iBAAiC,SAEjC,IAIA0I,EAJA/M,EAAAC,SACAC,EAAaH,IACbS,EAAoBD,EAAWL,GAC/B+B,EAAAjC,EAAAG,cAAA,KAEA6M,EAAAF,EAAA5N,OAAA,MAAA4N,EAAAG,MAAA,MAAA9H,cAAA,OAYA,OAVA6H,GAAA,YAGA9M,EAAAgN,aAAAjL,EAAA,MAEAA,EAAAxB,MAAAqM,GAAA,2BACAC,EAAAlP,OAAAwG,iBAAApC,GAAAkL,iBAAAH,GAEA9M,EAAAE,KAAcS,EAAaX,EAAAM,GAAAyB,EAAAnB,cAE3B3B,IAAA4N,KAAA7N,OAAA,YAAA6N,EJ+IsHK,CAAgBR,GAAYxC,GAC5IiD,EAAqBlD,EAAU,KAAW/K,EAAkB+K,EAAU,MAAY1K,EAAgB0K,EAAY,OAAQ7F,EAAc,sBAAuB8F,GAC3JkD,EAAkBnD,EAAU,KAAW/K,EAAkB+K,EAAU,MAAY1K,EAAgB0K,EAAY,OAAQ7F,EAAc,mBAAoB8F,GACrJmD,EAAoBpD,EAAU,KAAW/K,EAAkB+K,EAAU,MAAY1K,EAAgB0K,EAAY,OAAQ7F,EAAc,qBAAsB8F,GACzJoD,EAAiBrD,EAAU,KAAW/K,EAAkB+K,EAAU,MAAY1K,EAAgB0K,EAAY,OAAQ7F,EAAc,kBAAmB8F,GACnJqD,EAAgBtD,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,MAAOrF,EAAeuI,EAAoB,cAAejD,GAChKsD,EAAevD,EAAU,IAAU/K,EAAkB+K,EAAU,KAAW1K,EAAgB0K,EAAY,MAAOrF,EAAeyI,EAAmB,aAAcnD,GAG3JuD,EAAqB9D,EAAI+D,SAAuC,mBAArB/D,EAAI+D,QAAQC,KACzDC,GAAW,YAAa,oBAAqB,aAAc,aAAc,eAAgB,kBACzFC,KAkBF,GAhBAD,EAAQrM,QAAQ,SAAUuB,GACxB,GAA6B,iBAAlBwD,EAAQxD,GAAoB,CACrC,IAAId,EAAMsE,EAAQxD,GAChBf,EAAKjC,EAAIgO,cAAc9L,GAGzB,GAFA6L,EAAgB/K,GAAQd,GAEpBD,IAAMA,EAAGgM,SAIX,YADIN,GAAsBC,QAAQC,KAAK,aAAerH,EAAQxD,KAF9DwD,EAAQxD,GAAQf,OASlBuE,EAAQC,UAAUqF,SAAS5M,OAAS,GAAxC,CAMA,IAAI+J,EAAazC,EAAQyC,WACvBM,EAAS/C,EAAQ+C,OACjB2E,EAA4B,aAAjB1H,EAAQE,KAErB,GAAIuC,EAAY,CAEV,KAAKA,IACPzC,EAAU7H,EAAO6H,EAASyC,EAAW,WAC9BA,EAAW,IAGpB,IAAIkF,KACJ,IAAK,IAAIxO,MAAOsJ,EAAY,CAC1B,IAAI+B,GAAM/B,EAAWtJ,IAOrBqL,GAAqB,iBAARA,IAAqBpE,MAAOoE,IAAQA,GACjDmD,EAAcxO,IAAOqL,GAEvB/B,EAAakF,EACbA,EAAgB,KAoBlB,GAJKD,GAZL,SAASE,EAAcxP,GACrB,IAAK,IAAIe,KAAOf,EACTsP,IACS,YAARvO,IAAqBf,EAAIe,GAAO,QACxB,gBAARA,IAAyBf,EAAIe,IAAO,GAC5B,eAARA,IAAwBf,EAAIe,IAAO,IAI7B,eAARA,GAAwByO,EAAcxP,EAAIe,IAGjCyO,CAAc5H,IAI1B0H,EAAU,CACb1H,EAAQG,KAAO,aACfH,EAAQU,QAAU,OAClBV,EAAQM,aAAc,EAEtB,IAAI4B,GAAYlC,EAAQkC,UACtBC,GAAanC,EAAQmC,WACrBE,GAAerC,EAAQqC,aACvBD,GAAgBpC,EAAQoC,cAG5B,IAGEyF,GAMAC,GATEC,GAA8B,eAAjB/H,EAAQG,KACvB6H,GAAexO,EAAIG,cAAc,OACjCsO,GAAezO,EAAIG,cAAc,OAEjCsG,GAAYD,EAAQC,UACpBiI,GAAkBjI,GAAUJ,WAC5BsI,GAAgBlI,GAAUmI,UAC1BC,GAAapI,GAAUqF,SACvBgD,GAAaD,GAAW3P,OAExB6P,GAAcC,KACdC,IAAO,EACLhG,GAAciG,KACdhB,IAAYzH,GAAUpE,WAAa,cAGvC,IA4BE8M,GAyFAC,GACAC,GAtHErI,GAAYR,EAAQQ,UACtBD,GAAauI,GAAU,cACvBxI,GAAcwI,GAAU,eACxBzI,GAASyI,GAAU,UACnBC,GAAWC,KACXrI,GAASmI,GAAU,UACnB1I,GAASI,GAA6C,EAAjC0E,KAAK+D,MAAMH,GAAU,UAC1CpI,GAAUoI,GAAU,WACpBrI,GAAcT,EAAQS,aAAeT,EAAQkJ,wBAC7C5H,GAAYwH,GAAU,aACtBvH,GAAQuH,GAAU,SAClBvG,GAASvC,EAAQuC,OACjBD,IAAOC,IAAiBvC,EAAQsC,KAChCE,GAAasG,GAAU,cACvBlI,GAAWkI,GAAU,YACrBhI,GAAegI,GAAU,gBACzB5H,GAAM4H,GAAU,OAChBlG,GAAQkG,GAAU,SAClBjG,GAAYiG,GAAU,aACtBtH,GAAWsH,GAAU,YACrBpH,GAAkBoH,GAAU,mBAC5BlH,GAAekH,GAAU,gBACzBjH,GAAqBiH,GAAU,sBAC/B9G,GAA4B8G,GAAU,6BAEtCrO,IADkBqO,GAAU,mBKzS3B,SAAAK,EAAAC,GAEP,IAAAnP,EAAAR,SAAAE,cAAA,SAiBA,OAXAwP,GAAclP,EAAA+C,aAAA,QAAAmM,GAGdC,GAAcnP,EAAA+C,aAAA,QAAAoM,GAMd3P,SAAA+N,cAAA,QAAApN,YAAAH,GAEAA,EAAAQ,MAAAR,EAAAQ,MAAAR,EAAA8L,WLuRcsD,IACR3G,GAAW1C,EAAQ0C,SAGnB4G,IAFmBtJ,EAAQ2C,qBAG3B4G,GAAajH,GAuOf,WACE,IAAIkH,EAzBN,WAEE,GAAIhJ,IAAcD,KAAeE,GAC/B,OAAO6H,GAAa,EAGpB,IAAI5M,EAAM6E,GAAa,aAAe,QACpCrF,KAIF,IAFIqF,IAAcP,EAAQtE,GAAO4M,KAAcpN,EAAIqC,KAAKyC,EAAQtE,IAE5D+G,EACF,IAAK,IAAIgH,KAAMhH,EAAY,CACzB,IAAIiH,EAAMjH,EAAWgH,GAAI/N,GACrBgO,IAAQnJ,IAAcmJ,EAAMpB,KAAepN,EAAIqC,KAAKmM,GAM5D,OAFKxO,EAAIxC,QAAUwC,EAAIqC,KAAK,GAErB2H,KAAKyE,KAAKpJ,GAAaE,GAAcyE,KAAK0E,IAAIC,MAAM,KAAM3O,GAAOgK,KAAK4E,IAAID,MAAM,KAAM3O,IAKhF6O,GACbxF,EAASmD,EAAWxC,KAAKyE,MAAiB,EAAXH,EAAelB,IAAc,GAAiB,EAAXkB,EAAelB,GAGnF,OAFA/D,EAASW,KAAK4E,IAAIN,EAAUjF,GAErByF,GAAU,eAAiBzF,EAAS,EAAIA,EA5O3B0F,GAAyB,EAC7CC,GAAiBxC,EAAqCY,GAA0B,EAAbiB,GAAvCjB,GAAaiB,GACzCY,MAAoB5J,KAAcC,IAAe8B,IACjD8H,GAAgB7J,GAAa8J,KAAqB,KAClDC,IAA+B5C,IAAapF,GAE5CiI,GAAgBxC,GAAa,OAAS,MACtCyC,GAAkB,GAClBC,GAAmB,GAEnBC,GACMnK,GACK,WAAc,OAAOI,KAAW2B,GAAOgG,GAAa,EAAIpD,KAAKyE,MAAOS,IAAiB7J,GAAaF,MAChGG,GACF,WACL,IAAK,IAAI/H,EAAIyR,GAAezR,KAC1B,GAAIkQ,GAAelQ,KAAQ2R,GAAiB,OAAO3R,GAIhD,WACL,OAAIkI,IAAU+G,IAAapF,GAClBgG,GAAa,EAEbhG,IAAQoF,EAAWxC,KAAK4E,IAAI,EAAGI,GAAgBhF,KAAKyE,KAAKvJ,KAAU8J,GAAgB,GAKlGtP,GAAQ+P,GAAc7B,GAAU,eAChC8B,GAAchQ,GAEdiQ,IADeC,KACJ,GACXC,GAAYvK,GAA4B,KAAhBkK,KAGxB1H,GAA2BhD,EAAQgD,yBACnCF,GAAa9C,EAAQ8C,WACrBkI,IAAwBlI,IAAa,IACrCmI,IAAU,EACV9H,GAASnD,EAAQmD,OACjB+H,GAAS,IMzVR,WACP,OACAC,UACAC,GAAA,SAAAC,EAAAC,GACA1L,KAAAuL,OAAAE,GAAAzL,KAAAuL,OAAAE,OACAzL,KAAAuL,OAAAE,GAAA9N,KAAA+N,IAEAC,IAAA,SAAAF,EAAAC,GACA,GAAA1L,KAAAuL,OAAAE,GACA,QAAA5S,EAAA,EAAuBA,EAAAmH,KAAAuL,OAAAE,GAAA3S,OAAmCD,IAC1D,GAAAmH,KAAAuL,OAAAE,GAAA5S,KAAA6S,EAAA,CACA1L,KAAAuL,OAAAE,GAAAG,OAAA/S,EAAA,GACA,QAKAgT,KAAA,SAAAJ,EAAAK,GACAA,EAAA5F,KAAAuF,EACAzL,KAAAuL,OAAAE,IACAzL,KAAAuL,OAAAE,GAAApQ,QAAA,SAAAqQ,GACAA,EAAAI,EAAAL,QNsUMM,GAAsB,mBAAqB3L,EAAQE,KACnD0L,GAAU3L,GAAUhI,IO5VnB,WACP,IAAAA,EAAAZ,OAAAwU,MAGA,OAFAxU,OAAAwU,MAAA5T,IAAA,IAEA,MAAAZ,OAAAwU,MPwVgCC,GAC1BC,GAAUjD,GAAU,WACpBkD,IAAW,EACX9I,GAAYlD,EAAQkD,UACpB+I,MAAS/I,IAAc1C,KAAY0L,KACnCC,IAAS,EACTC,IACEC,MAASC,GACTC,QAyjEJ,SAA2BjT,GACzBA,EAAIkT,GAASlT,GACb,IAAImT,GAAYnJ,EAAKG,KAAMH,EAAKI,OAAO5K,QAAQQ,EAAEoT,SAE7CD,GAAY,IACG,IAAbA,EACGzL,GAAWgL,UAAYM,GAAgBhT,GAAI,GACtC2H,GAAW+K,UACrBM,GAAgBhT,EAAG,MA/jEvBqT,IACEN,MAq8DJ,SAAoB/S,GAClB,GAAI2R,GAAS,CACX,GAAIjI,GAA4B,OAAiB4J,KAInD,IAAIrU,EAASsU,GADbvT,EAAIkT,GAASlT,IAIb,KAAOf,IAAW6I,KAAiBlF,EAAQ3D,EAAQ,aAAeA,EAASA,EAAOsH,WAClF,GAAI3D,EAAQ3D,EAAQ,YAAa,CAC/B,IAAIuU,EAAWC,GAAaC,OAAO3Q,EAAQ9D,EAAQ,aACjD0U,EAAkB1M,IAAcC,GAAYsM,EAAWxE,GAAa4E,GAAQJ,EAAW1M,GACvF+M,EAAc9L,GAAkByL,EAAW5H,KAAK0E,IAAI1E,KAAKyE,KAAKsD,GAAkB3E,GAAa,GAC/F8E,GAAKD,EAAa7T,GAEd+T,KAAoBP,IAClBQ,IAAaC,KACjBR,IAAc,KAt9DhBR,QAwkEJ,SAAsBjT,GACpBA,EAAIkT,GAASlT,GACb,IAAIkU,EAAahU,EAAIiU,cACrB,IAAKvR,EAAQsR,EAAY,YAAe,OAGxC,IAAIf,GAAYnJ,EAAKG,KAAMH,EAAKI,MAAOJ,EAAKC,MAAOD,EAAKE,OAAO1K,QAAQQ,EAAEoT,SACvEI,EAAWE,OAAO3Q,EAAQmR,EAAY,aAEpCf,GAAY,IACG,IAAbA,EACEK,EAAW,GAAKY,GAASC,GAASb,EAAW,IAC3B,IAAbL,EACLK,EAAWI,GAAQ,GAAKQ,GAASC,GAASb,EAAW,KAEzDC,GAAaD,EACbM,GAAKN,EAAUxT,OAtlEnBsU,IACEC,UAyhEJ,WACMP,KACFQ,KACAC,IAAsB,IA3hEtBC,SA+hEJ,WACMD,KACFE,KACAF,IAAsB,KAhiExBG,IAAoBC,iBA0gEtB,WACM3U,EAAI4U,OACFd,KACFQ,KACAO,IAA2B,GAEpBA,KACTJ,KACAI,IAA2B,KAjhE7BC,IAAwB/B,QAoiE1B,SAA2BjT,GACzBA,EAAIkT,GAASlT,GACb,IAAImT,GAAYnJ,EAAKG,KAAMH,EAAKI,OAAO5K,QAAQQ,EAAEoT,SAE7CD,GAAY,GACdH,GAAgBhT,EAAgB,IAAbmT,GAAkB,EAAI,KAxiE3C8B,IACEC,WAAcC,GACdC,UAAaC,GACbC,SAAYC,GACZC,YAAeD,IACdE,IACDC,UAAaP,GACbQ,UAAaN,GACbO,QAAWL,GACXM,WAAcN,IAEhBO,GAAcpF,GAAU,YACxBqF,GAASrF,GAAU,OACnB3I,KAAkBb,IAAmBR,EAAQqB,gBAC7CiO,GAActF,GAAU,YACxBuF,GAAWvF,GAAU,SACrBwF,GAAexF,GAAU,aACzByF,GAAmB,mBACnBC,GAAmB,eACnBC,IACEC,KA+3CJ,SAAqBtW,GACnBuW,GAAUhD,GAAUvT,KA/3ClBwW,MAk4CJ,SAAqBxW,IASrB,SAAmByW,GACjBjU,EAASiU,EAAK,UACdC,GAAaD,GAVbE,CAAUpD,GAAUvT,MA/3CpB4W,GAAiD,UAAjClQ,EAAQiD,qBAG1B,GAAImM,GACF,IAMEe,GACAC,GAPErP,GAAoBf,EAAQe,kBAC9BsP,GAAwBrQ,EAAQe,kBAAoBf,EAAQe,kBAAkBqH,UAAY,GAC1FpH,GAAahB,EAAQgB,WACrBC,GAAajB,EAAQiB,WACrBqP,GAAiBtQ,EAAQgB,WAAahB,EAAQgB,WAAWoH,UAAY,GACrEmI,GAAiBvQ,EAAQiB,WAAajB,EAAQiB,WAAWmH,UAAY,GAMzE,GAAIiH,GACF,IAEE1B,GAFEvM,GAAepB,EAAQoB,aACzBoP,GAAmBxQ,EAAQoB,aAAepB,EAAQoB,aAAagH,UAAY,GAE3E8E,GAAQ1M,GAAY8H,GAAamI,KACjCC,GAAc,EACd3D,IAAc,EACdM,GAAkBsD,KAClBC,GAAwBvD,GACxBwD,GAAiB,iBACjBC,GAAS,iBACTC,GAAgB,mBAIpB,GAAIzB,GACF,IAIE0B,GACA1D,GACAS,GACAkD,GACA5C,GARE1M,GAAkD,YAA9B3B,EAAQ2B,kBAAkC,GAAK,EACrEG,GAAiB9B,EAAQ8B,eACzBoP,GAAqBlR,EAAQ8B,eAAiB9B,EAAQ8B,eAAesG,UAAY,GACjF+I,IAAuB,qCAAwC,qBAQnE,GAAI5B,IAAYC,GACd,IAEE4B,GAIAC,GANEC,MACFC,MAIAC,IAAW,EAEXC,GAAU1J,GACR,SAAU2J,EAAGC,GAAK,OAAOD,EAAEE,EAAID,EAAEC,GACjC,SAAUF,EAAGC,GAAK,OAAOD,EAAEG,EAAIF,EAAEE,GAIlCrR,IAAasR,GAAyB/F,IAAWE,IAElD7F,IACFmE,GAAgBnE,EAChBoE,GAAkB,YAEdnE,GACFmE,IAAmBzC,GAAa,MAAQ,WACxC0C,GAAmB1C,GAAa,cAAgB,WAEhDyC,IAAmBzC,GAAa,KAAO,KACvC0C,GAAmB,MAKnB/C,IAAYzH,GAAUpE,UAAYoE,GAAUpE,UAAUI,QAAQ,YAAa,KAiO/E,WAGgB+N,GAAU,UAGxB,IAAKA,GAAU,oBAAsB1B,IAAc,EACjD,OAGFN,GAAanM,UATI,YAUjBoM,GAAapM,UATE,YAUfmM,GAAa/P,GAAK2T,GAAU,MAC5B3D,GAAahQ,GAAK2T,GAAU,MAGP,KAAjB3L,GAAUhI,KAAagI,GAAUhI,GAAK2T,IAC1CD,IAAuB9G,GAAoBrE,GAAY,gBAAkB,mBACzEmL,IAAuBtH,EAAO,YAAc,eACxC7D,KAAamL,IAAuB,kBACxCA,IAAuB,QAAU3L,EAAQG,KACzCF,GAAUpE,WAAa8P,GAGnBjE,IACFG,GAAgBrO,EAAIG,cAAc,QACpB1B,GAAK2T,GAAU,MAC7B/D,GAAchM,UAAY,UAE1BmM,GAAa5N,YAAYyN,IACzBA,GAAczN,YAAY6N,KAE1BD,GAAa5N,YAAY6N,IAG3B,GAAIzF,GAAY,CACd,IAAIuP,EAAKlK,IAAgCI,GACzC8J,EAAGlW,WAAa,UAqBlB,GAlBAqM,GAAgBxB,aAAasB,GAAc/H,IAC3CgI,GAAa7N,YAAY6F,IAIzBhF,EAAQoN,GAAY,SAAU7L,EAAM/D,GAClCqD,EAASU,EAAM,YACVA,EAAKvE,KAAMuE,EAAKvE,GAAK2T,GAAU,QAAUnT,IACzCiP,GAAYtF,IAAiBtG,EAASU,EAAM4F,IACjD3F,EAASD,GACPwV,cAAe,OACfC,SAAY,SAOZ1I,GAAY,CAId,IAHA,IAAI2I,EAAiB1Y,EAAI2Y,yBACvBC,EAAgB5Y,EAAI2Y,yBAEbhV,EAAIoM,GAAYpM,KAAM,CAC7B,IAAIkV,EAAMlV,EAAImL,GACZgK,EAAajK,GAAWgK,GAAKE,WAAU,GAIzC,GAHAtV,EAAYqV,EAAY,MACxBF,EAAc1L,aAAa4L,EAAYF,EAAcI,YAEjD9K,EAAU,CACZ,IAAI+K,EAAYpK,GAAWC,GAAa,EAAI+J,GAAKE,WAAU,GAC3DtV,EAAYwV,EAAW,MACvBP,EAAe9X,YAAYqY,IAI/BxS,GAAUyG,aAAawL,EAAgBjS,GAAUuS,YACjDvS,GAAU7F,YAAYgY,GACtB/J,GAAapI,GAAUqF,UA7S3BoN,GA6XA,WAGE,IAAKhL,EACH,IAAK,IAAIjP,EAAImC,GAAOS,EAAIT,GAAQsK,KAAK0E,IAAItB,GAAYlI,IAAQ3H,EAAI4C,EAAG5C,IAAK,CACvE,IAAI+D,EAAO6L,GAAW5P,GACtB+D,EAAKvC,MAAMoL,KAAqB,KAAb5M,EAAImC,IAAewF,GAAQ,IAC9CtE,EAASU,EAAM0F,IACflG,EAAYQ,EAAM4F,IAkBlB2F,KACElD,GAAoBrE,IACtBhG,EAAWC,GAAO,IAAMmR,GAAU,eAAgB,aAAevI,EAAIxF,iBAAiBwK,GAAW,IAAIsK,SAAW,IAAK5X,EAAkBN,KACvID,EAAWC,GAAO,IAAMmR,GAAS,eAAgB7Q,EAAkBN,MAC1DiN,GACTzM,EAAQoN,GAAY,SAAUuK,EAAOna,GAEf,OAAhBgB,SAASoZ,IACXD,EAAM3Y,MAAM6Y,YAAcC,GAAmBta,GAE7Cma,EAAM3Y,MAAM+Y,WAAaD,GAAmBta,MAQpD,GAAIgN,EAAO,CAET,GAAIoB,EAAoB,CACtB,IAAInL,EAAMmM,IAAiB7H,EAAQwC,WAAayQ,GAA2BjT,EAAQuB,OAAS,GAC5F/G,EAAWC,GAAO,IAAMmR,GAAU,MAAOlQ,EAAKX,EAAkBN,KAIlEiB,EAAMwX,GAAsBlT,EAAQM,YAAaN,EAAQK,OAAQL,EAAQO,WAAYP,EAAQuB,MAAOvB,EAAQwC,YAC5GhI,EAAWC,GAAO,IAAMmR,GAAU,MAAOlQ,EAAKX,EAAkBN,KAG5DiN,IACFhM,EAAMqM,KAAevH,GAAY,SAAW2S,GAAkBnT,EAAQO,WAAYP,EAAQK,OAAQL,EAAQI,OAAS,IAAM,GACrHyG,IAAsBnL,GAAOuX,GAA2B1R,KAC5D/G,EAAWC,GAAO,IAAMmR,GAASlQ,EAAKX,EAAkBN,MAI1DiB,EAAMqM,KAAevH,GAAY4S,GAAmBpT,EAAQO,WAAYP,EAAQK,OAAQL,EAAQI,OAAS,GACrGJ,EAAQK,SAAU3E,GAAO2X,GAAoBrT,EAAQK,SAEpDqH,IACCb,IAAsBnL,GAAOuX,GAA2B1R,KACxDwF,IAAqBrL,GAAO4X,GAA0B/R,MAExD7F,GAAOlB,EAAWC,GAAO,IAAMmR,GAAU,eAAgBlQ,EAAKX,EAAkBN,SAM/E,CAEL8Y,KAGAtL,GAAahO,MAAM+L,QAAUkN,GAAsB5S,GAAaD,GAAQE,GAAYiC,IAGhFkF,GAAYK,KAAevH,KAC7BP,GAAUhG,MAAMyK,MAAQyO,GAAkB5S,GAAYF,GAAQD,KAIhE,IAAI1E,EAAMqM,KAAevH,GAAY4S,GAAmB7S,GAAYF,GAAQD,IAAS,GACjFC,KAAU3E,GAAO2X,GAAoBhT,KAGrC3E,GAAOlB,EAAWC,GAAO,IAAMmR,GAAU,eAAgBlQ,EAAKX,EAAkBN,KAItF,GAAIgI,GAAcgD,EAChB,IAAK,IAAIgE,KAAMhH,EAAY,CAEzBgH,EAAK+J,SAAS/J,GAEd,IAAIgK,EAAOhR,EAAWgH,GACpB/N,EAAM,GACNgY,EAAmB,GACnBC,EAAkB,GAClBC,EAAe,GACfC,EAAW,GACXC,EAAWtT,GAAqC,KAAzBsI,GAAU,QAASW,GAC1CsK,EAAejL,GAAU,aAAcW,GACvCuK,EAAUlL,GAAU,QAASW,GAC7BwK,EAAgBnL,GAAU,cAAeW,GACzCyK,EAAepL,GAAU,aAAcW,GACvC0K,EAAWrL,GAAU,SAAUW,GAG7B5C,GAAsBgB,IAAiBiB,GAAU,aAAcW,IAAO,UAAWgK,IACnFC,EAAmB,IAAM9H,GAAU,OAASqH,GAA2Be,GAAW,MAIhF,gBAAiBP,GAAQ,WAAYA,KACvCE,EAAkB,IAAM/H,GAAU,OAASsH,GAAsBe,EAAeE,EAAUJ,EAAcC,EAASE,GAAgB,KAI/HxM,GAAYK,KAAevH,KAAc,eAAgBiT,GAAQ,UAAWA,GAASlT,IAAc,WAAYkT,KACjHG,EAAe,SAAWT,GAAkBY,EAAcI,EAAUL,GAAW,KAE7EjN,GAAsB,UAAW4M,IACnCG,GAAgBX,GAA2Be,IAEzCJ,IACFA,EAAe,IAAMhI,GAAU,IAAMgI,EAAe,MAIlD,eAAgBH,GAASlT,IAAc,WAAYkT,IAAU/L,GAAY,UAAW+L,KACtFI,GAAYT,GAAmBW,EAAcI,EAAUL,IAErD,WAAYL,IACdI,GAAYR,GAAoBc,KAG7BzM,GAAY,UAAW+L,IACtB5M,IAAsBgN,GAAYZ,GAA2Be,IAC7DjN,IAAqB8M,GAAYP,GAA0BU,KAE7DH,IAAYA,EAAW,IAAMjI,GAAU,gBAAkBiI,EAAW,MAGxEnY,EAAMgY,EAAmBC,EAAkBC,EAAeC,IAGxDpZ,GAAMI,WAAW,sBAAwB4O,EAAK,GAAK,QAAU/N,EAAM,IAAKjB,GAAMO,SAAStC,SAthB/F0b,GACAC,KAgjCA,IAAIC,GACKhS,GACLoF,EAEE,WACE,IAAI6M,EAAW1J,GACb2J,EAAYzJ,GAEdwJ,GAAY7T,GACZ8T,GAAa9T,GAITJ,IACFiU,GAAY,EACZC,GAAa,GACJjU,KACJwI,GAAW1I,KAAWE,GAAaF,MAAWmU,GAAa,GAG9DjL,KACE3O,GAAQ4Z,EACV5Z,IAAS0N,GACA1N,GAAQ2Z,IACjB3Z,IAAS0N,MAKf,WACE,GAAI1N,GAAQmQ,GACV,KAAOnQ,IAASiQ,GAAWvC,IAAc1N,IAAS0N,QAC7C,GAAI1N,GAAQiQ,GACjB,KAAOjQ,IAASmQ,GAAWzC,IAAc1N,IAAS0N,IAIxD,WACE1N,GAAQsK,KAAK4E,IAAIe,GAAU3F,KAAK0E,IAAImB,GAAUnQ,MAoiBhD6Z,GACK/M,EACL,WACEgN,GAAczU,GAAW,IACrB4G,IAAuBtF,IAGzBoT,KAGKpT,IAAU3D,EAAUqC,KAAc2M,MQxlE5C,SAAAgI,EAAAzY,EAAAiC,EAAAyW,EAAAC,EAAAC,EAAA5Z,GACP,IAAA6Z,EAAA9P,KAAA0E,IAAAmL,EAAA,IACAE,EAAAH,EAAAhc,QAAA,iBAEAoc,GADAJ,IAAA7Y,QAAAgZ,EAAA,IACAjI,OAAA4H,EAAA3a,MAAAkC,GAAAF,QAAAmC,EAAA,IAAAnC,QAAA4Y,EAAA,IAAA5Y,QAAAgZ,EAAA,MACAE,GAAAL,EAAAI,GAAAH,EAAAC,EAGApd,WACA,SAAAwd,IACAL,GAAAC,EACAE,GAAAC,EACAP,EAAA3a,MAAAkC,GAAAiC,EAAA8W,EAAAD,EAAAJ,EACAE,EAAA,EACAnd,WAAAwd,EAAAJ,GAEA7Z,KARA6Z,GRolEYK,CAAYpV,GAAWsK,GAAeC,GAAiBC,GAAkB6K,KAA8B/T,GAAOqL,IAG3G7E,IAAcwN,MAErB,WACEjM,MAEA,IAAIkM,KACJA,EAAIvO,GAAiBuO,EAAItO,GAAgB0F,GACzCtN,EAAa+I,GAAWuC,IAAc4K,GACtCrW,EAAUkJ,GAAWzN,IAAQ4a,GAE7BC,GAAa7K,GAAa1I,GAAWC,IAAY,GACjDsT,GAAa7a,GAAOwH,GAAeF,IAI9B+E,GAAkBC,GAAiB3F,IAAU3D,EAAUqC,KAAc2M,MAskBhF,OACE8I,QAAS,QACTC,QAASC,GACT1K,OAAQA,GACRkC,KAAMA,GACNyI,KAxVF,WACMrU,KAAa8L,KACfwI,KACA7E,IAAqB,IAsVvB8E,MAnVF,WACMzI,KACFC,KACA0D,IAAqB,IAiVvBxI,KAAMA,GACNuN,mBAAoBC,GACpBC,QAAS7B,GACT8B,QApiDF,WAoBE,GAlBA1b,GAAMuR,UAAW,EACbvR,GAAM2b,WAAa3b,GAAM2b,UAAU9b,SAGvCgF,EAAa+D,GAAOgT,OAAUC,KAG1BhV,IAAahC,EAAa9F,EAAK8U,IAC/BvN,IAAqBzB,EAAayB,GAAmBqL,IACrDhL,IAAgB9B,EAAa8B,GAAcuL,IAG/CrN,EAAaW,GAAW2N,IACxBtO,EAAaW,GAAWiO,IACpBpM,IAAkBxC,EAAawC,IAAkBuK,MAASkK,KAC1D/U,IAAYgV,cAAcxF,IAG1BtJ,GAAYT,EAAe,CAC7B,IAAIuO,KACJA,EAAIvO,GAAiB2F,GACrBtN,EAAaW,GAAWuV,GAEtB5S,IAAStD,EAAaW,GAAWsO,IACjC1L,IAAavD,EAAaW,GAAW8O,IAGzC,IAAI0H,GAAYtO,GAAekI,GAAuBC,GAAgBC,GAAgBC,GAAkBU,IAmBxG,IAAK,IAAIQ,KAjBTpK,EAAQrM,QAAQ,SAAUuB,EAAM/D,GAC9B,IAAIgD,EAAc,cAATe,EAAuBwL,GAAehI,EAAQxD,GAEvD,GAAkB,WAAdka,EAAOjb,GAAiB,CAC1B,IAAIkb,IAASlb,EAAGmb,wBAAyBnb,EAAGmb,uBAC1CC,EAAWpb,EAAGoE,WAChBpE,EAAG2M,UAAYqO,EAAShe,GACxBuH,EAAQxD,GAAQma,EAASA,EAAOG,mBAAqBD,EAASE,qBAMlE7U,GAAYC,GAAaE,GAAeD,GAAgB2F,GAAaC,GAAeC,GAAehI,GAAYiI,GAAkBC,GAAgBE,GAAaC,GAAaR,GAAiBS,GAAc/H,GAAYD,GAAaD,GAAcD,GAAS0I,GAAW3I,GAAQM,GAAUD,GAAca,GAAYC,GAAQgB,GAASD,GAAOE,GAAa/H,GAAQiI,GAAWiG,GAAiBW,GAAgBC,GAAaW,GAAgBC,GAAmBC,GAAgBE,GAA6BC,GAAgBC,GAAkBC,GAAmBC,GAAc9P,GAAQgQ,GAAcC,GAAWE,GAAyBjI,GAAakI,GAAwBC,GAAU9H,GAAS+H,GAASS,GAAsBC,GAAUG,GAAUC,GAAW9I,GAAY+I,GAASE,GAASC,GAAiBO,GAAYiB,GAAcM,GAAkBI,GAAsBC,GAAcQ,GAAaK,GAAcC,GAAShO,GAAkBiO,GAAcC,GAAWC,GAAeC,GAAmBC,GAAmBC,GAAY/G,GAAehI,GAAWE,GAAeC,GAAoBsP,GAAwBrP,GAAaC,GAAakP,GAAeC,GAAelP,GAAME,GAAeoP,GAAmB7C,GAAWZ,GAAaM,GAAkBuD,GAAwBC,GAAiBC,GAASC,GAAgBvP,GAAWE,GAAkBC,GAAoBC,GAAeC,GAAqBC,GAAiBoP,GAAqBlP,GAA4BmP,GAAsBH,GAAgB1D,GAAYS,GAAsBkD,GAAqB5C,GAA6CiD,GAAeC,GAAeH,GAA8BI,GAAWH,GAAWI,GAAU7O,GAAQC,GAAY,KAI7oDjD,KACF,YAAN8R,IAAmB9R,KAAK8R,GAAK,MAEnCjJ,IAAO,GAk/CPuO,QAAS,WACP,OAAOjX,EAAI5H,EAAO6H,EAASuH,MAzuE/B,SAASuK,GAAyBmF,GAC5BA,IACFrW,GAAWM,GAAM0B,GAAQC,GAAYvB,GAAYE,GAAWK,GAAqBG,IAA4B,GAIjH,SAAS8I,KAEP,IADA,IAAIpB,EAAMhC,EAAW9M,GAAQ2O,GAAa3O,GACnC8O,EAAM,GAAKA,GAAOpB,GACzB,OAAOoB,EAAMpB,GAAa,EAG5B,SAASqC,GAAcuM,GAErB,OADAA,EAAMA,EAAMhS,KAAK4E,IAAI,EAAG5E,KAAK0E,IAAItH,GAAOgG,GAAa,EAAIA,GAAalI,GAAO8W,IAAQ,EAC9ExP,EAAWwP,EAAM3N,GAAa2N,EAGvC,SAASC,GAAY1e,GAInB,IAHS,MAALA,IAAaA,EAAImC,IAEjB8M,IAAYjP,GAAK8Q,IACd9Q,EAAI,GAAKA,GAAK6P,GAErB,OAAOpD,KAAK+D,MAAMxQ,EAAI6P,IAGxB,SAASqI,KACP,IACEpM,EADE6S,EAAWD,KAUf,OAPA5S,EAASlD,GAAkB+V,EACzB7W,IAAcC,GAAY0E,KAAKyE,MAAMyN,EAAW,GAAKlK,GAAQ5E,GAAa,GACxEpD,KAAK+D,MAAMmO,EAAWhX,KAGrBkC,IAAQoF,GAAY9M,KAAUmQ,KAAYxG,EAAS2I,GAAQ,GAEzD3I,EAmCT,SAASiE,KACP,OAAOnF,EAAIgU,YAAc7d,EAAIM,gBAAgBwd,aAAe9d,EAAIE,KAAK4d,YAGvE,SAASC,GAAkBC,GACzB,MAAe,QAARA,EAAgB,aAAe,YAYxC,SAASxO,KACP,IAAIyO,EAAMnX,GAA4B,EAAdA,GAAkBD,GAAS,EACnD,OAXF,SAASqX,EAAejc,GACtB,IAAoCkc,EAAMjT,EAAtCJ,EAAM9K,EAAIG,cAAc,OAK5B,OAJA8B,EAAGrB,YAAYkK,GAEfI,GADAiT,EAAOrT,EAAIc,yBACEwS,MAAQD,EAAKtS,KAC1Bf,EAAIhK,SACGoK,GAASgT,EAAejc,EAAGoE,YAK3B6X,CAAexP,IAAmBuP,EAG3C,SAASzN,GAAUxN,GACjB,GAAIwD,EAAQxD,GACV,OAAO,EAEP,GAAIiG,EACF,IAAK,IAAIgH,KAAMhH,EACb,GAAIA,EAAWgH,GAAIjN,GAAS,OAAO,EAGvC,OAAO,EAQX,SAASsM,GAAUtM,EAAMqb,GAGvB,GAFU,MAANA,IAAcA,EAAKtP,IAEV,UAAT/L,GAAoB+D,GACtB,OAAO2E,KAAK+D,OAAOF,GAAW1I,KAAWE,GAAaF,MAAY,EAGlE,IAAIkE,EAASvE,EAAQxD,GAErB,GAAIiG,EACF,IAAK,IAAIgH,KAAMhH,EAEToV,GAAMrE,SAAS/J,IACbjN,KAAQiG,EAAWgH,KAAOlF,EAAS9B,EAAWgH,GAAIjN,IAQ5D,MAHa,YAATA,GAAiC,SAAX+H,IAAqBA,EAASuE,GAAU,UAC7DpB,GAAsB,YAATlL,GAA+B,UAATA,IAAqB+H,EAASW,KAAK+D,MAAM1E,IAE1EA,EAIX,SAASwO,GAAmBta,GAC1B,OAAO4L,EACLA,EAAO,IAAU,IAAJ5L,EAAU,OAASyR,GAAgB,IAC5C,IAAJzR,EAAUyR,GAAgB,IAG9B,SAASgJ,GAAsB4E,EAAgBC,EAAWC,EAAeC,EAAU/D,GACjF,IAAIxY,EAAM,GAEV,QAAuB/C,IAAnBmf,EAA8B,CAChC,IAAIL,EAAMK,EACNC,IAAaN,GAAOM,GACxBrc,EAAMqM,GACJ,aAAe0P,EAAM,QAAUK,EAAiB,MAChD,WAAaA,EAAiB,QAAUL,EAAM,aAC3C,GAAIM,IAAcC,EAAe,CACtC,IAAIE,EAAgB,IAAMH,EAAY,KAEtCrc,EAAM,cADEqM,GAAamQ,EAAgB,OAAS,KAAOA,EAAgB,MAC1C,IAI7B,OADKxQ,GAAYwM,GAAgBrN,GAAsBoR,IAAYvc,GAAOuX,GAA2BgF,IAC9Fvc,EAGT,SAASyX,GAAkB6E,EAAeD,EAAWI,GACnD,OAAIH,GACMA,EAAgBD,GAAa7N,GAAgB,KAE9C7F,EACLA,EAAO,IAAsB,IAAhB6F,GAAsB,OAASiO,EAAW,IACvC,IAAhBjO,GAAsBiO,EAAW,IAIvC,SAAS/E,GAAmB4E,EAAeD,EAAWI,GACpD,IAAIzT,EAEJ,GAAIsT,EACFtT,EAASsT,EAAgBD,EAAa,SACjC,CACArQ,IAAYyQ,EAAWjT,KAAK+D,MAAMkP,IACvC,IAAIC,EAAW1Q,EAAWwC,GAAgBiO,EAC1CzT,EAAQL,EACNA,EAAO,WAAa+T,EAAW,IAC/B,IAAMA,EAAW,IAMrB,OAHA1T,EAAQ,SAAWA,EAGD,UAAX3B,EAAqB2B,EAAQ,IAAMA,EAAQ,eAGpD,SAAS2O,GAAoB0E,GAC3B,IAAIrc,EAAM,IAIQ,IAAdqc,IAGFrc,GAFWqM,GAAa,WAAa,YAC7BA,GAAa,QAAU,UACZ,KAAOgQ,EAAY,OAGxC,OAAOrc,EAGT,SAAS2c,GAAahgB,EAAMga,GAC1B,IAAIjU,EAAS/F,EAAKigB,UAAU,EAAGjgB,EAAKK,OAAS2Z,GAAK1T,cAGlD,OAFIP,IAAUA,EAAS,IAAMA,EAAS,KAE/BA,EAGT,SAAS6U,GAA2B1R,GAClC,OAAO8W,GAAaxR,EAAoB,IAAM,uBAAyBtF,EAAQ,IAAO,KAGxF,SAAS+R,GAA0B/R,GACjC,OAAO8W,GAAatR,EAAmB,IAAM,sBAAwBxF,EAAQ,IAAO,KAqFtF,SAAS8S,KAEP,GAAIrK,GAAU,eAAiBxJ,KAAcuH,GAAY,CACvD,IAAIwQ,EAAOtY,GAAUuY,iBAAiB,OAGtCvd,EAAQsd,EAAM,SAAUxI,GACtB,IAAI0I,EAAM1I,EAAI0I,IAEVA,GAAOA,EAAI3f,QAAQ,cAAgB,GACrCqG,EAAU4Q,EAAKJ,IACfI,EAAI0I,IAAM,GACV1I,EAAI0I,IAAMA,EACV3c,EAASiU,EAAK,YACJrN,IACVmN,GAAUE,KAKdzY,EAAI,WAAcohB,GAAgBrb,EAAkBkb,GAAO,WAAc3P,IAAe,OAGnFpI,IAAauH,KAAcwQ,EAAOI,GAAc/d,GAAOsK,KAAK0E,IAAIhP,GAAQwF,GAAQ,EAAG8J,GAAgB,KAExGxH,GAAWkW,KAAkCthB,EAAI,WAAcohB,GAAgBrb,EAAkBkb,GAAOK,WAIpGlR,GAAYmR,KAGhBC,KACAC,KAIJ,SAASH,KACP,GAAIpY,GAAW,CAEb,IAAI6R,EAAM/P,GAAO1H,GAAQ0N,GAAa,GACtC,SAAU0Q,IACR3Q,GAAWgK,EAAM,GAAGjN,wBAAwBwS,MAAMqB,QAAQ,KAAO5Q,GAAWgK,GAAKjN,wBAAwBC,KAAK4T,QAAQ,GACpHC,KACAthB,WAAW,WAAcohB,KAA4B,IAHzD,QAMAE,KAKJ,SAASA,KAEFnR,KAAcvH,KACjB2Y,KAEI3Y,IACF4J,GAAgBC,KACZnH,KAAa+I,GAASC,MAC1BnB,GAAWL,KACXoH,GAAyB/F,IAAWE,KAEpCsJ,MAKA7N,GAAYmR,KAGhBC,KACAC,KAmKF,SAASD,KASP,GAPAM,KAGApR,GAAaqR,mBAAmB,aAAc,qHAAuHC,KAAqB,eAAiBhR,GAAa,UACxNO,GAAoBb,GAAaR,cAAc,4BAG3C8H,GAAa,CACf,IAAIiK,EAAM/X,GAAW,OAAS,QAC1BM,GACFrF,EAASqF,IAAkB0X,cAAeD,IACjCvZ,EAAQ+B,uBACjBiG,GAAaqR,mBAAmB9B,GAAkBvX,EAAQyB,kBAAmB,wBAA0B8X,EAAM,KAAOpI,GAAoB,GAAKoI,EAAMpI,GAAoB,GAAKvP,GAAa,GAAK,aAC9LE,GAAiBkG,GAAaR,cAAc,kBAI1C1F,IACF3C,EAAU2C,IAAkBuK,MAASkK,KAGnC/U,KACFsU,KACIjU,IAAsB1C,EAAUc,GAAW2N,IAC3C5L,IAA6B7C,EAAUc,GAAWiO,KAK1D,GAAImB,GAAQ,CAIV,GAAIjO,GACF3E,EAAS2E,IAAgBqY,aAAc,wBAEvCxe,EADA0S,GAAWvM,GAAakE,SACN,SAAU9I,EAAM/D,GAChCgE,EAASD,GACPkd,WAAYjhB,EACZwZ,SAAY,KACZwH,aAAc3I,IAAUrY,EAAI,GAC5BkhB,gBAAiB/N,WAKhB,CAGL,IAFA,IAAIgO,EAAU,GACZC,EAAYxY,GAAkB,GAAK,uBAC5B5I,EAAI,EAAGA,EAAI6P,GAAY7P,IAE9BmhB,GAAW,qBAAuBnhB,EAAI,kCAAoCmT,GAAU,KAAOiO,EAAY,gBAAkB/I,IAAUrY,EAAI,GAAK,cAE9ImhB,EAAU,yDAA2DA,EAAU,SAC/E5R,GAAaqR,mBAAmB9B,GAAkBvX,EAAQmB,aAAcyY,GAExExY,GAAe4G,GAAaR,cAAc,YAC1CmG,GAAWvM,GAAakE,SAM1B,GAHAwU,KAGIjT,EAAoB,CACtB,IAAIzI,EAASyI,EAAmByR,UAAU,EAAGzR,EAAmBnO,OAAS,IAAIiG,cAC3EjD,EAAM,mBAAqB6F,GAAQ,IAAO,IAExCnD,IACF1C,EAAM,IAAM0C,EAAS,IAAM1C,GAG7BlB,EAAWC,GAAO,mBAAqBmR,GAAU,SAAUlQ,EAAKX,EAAkBN,KAGpFgC,EAASkR,GAASN,KAAoBoM,aAAc3I,IAAUzD,GAAkB,GAAK0D,KACrF9T,EAAY0Q,GAASN,IAAkB,YACvCvR,EAAS6R,GAASN,IAAkBwD,IAGpC1R,EAAUiC,GAAcuL,IAMtByC,KACGrO,IAAuBC,IAAeC,KACzC+G,GAAaqR,mBAAmB9B,GAAkBvX,EAAQa,kBAAmB,qIAAuI+K,GAAU,KAAO9K,GAAa,GAAK,sEAAwE8K,GAAU,KAAO9K,GAAa,GAAK,mBAElWC,GAAoBiH,GAAaR,cAAc,kBAG5CxG,IAAeC,KAClBD,GAAaD,GAAkBuE,SAAS,GACxCrE,GAAaF,GAAkBuE,SAAS,IAGtCtF,EAAQe,mBACVtE,EAASsE,IACP0Y,aAAc,sBACdxH,SAAY,OAIZjS,EAAQe,mBAAsBf,EAAQgB,YAAchB,EAAQiB,aAC9DxE,GAAUuE,GAAYC,KACpB0Y,gBAAiB/N,GACjBqG,SAAY,QAIZjS,EAAQe,mBAAsBf,EAAQgB,YAAchB,EAAQiB,cAC9DxE,EAASuE,IAAc+Y,gBAAiB,SACxCtd,EAASwE,IAAc8Y,gBAAiB,UAG1C5J,GAAe6J,GAAShZ,IACxBoP,GAAe4J,GAAS/Y,IAExBgZ,KAGIlZ,GACF5B,EAAU4B,GAAmBqL,KAE7BjN,EAAU6B,GAAYoL,IACtBjN,EAAU8B,GAAYmL,MAK1B8N,KAGF,SAASnB,KAEP,GAAIrR,GAAYT,EAAe,CAC7B,IAAIuO,KACJA,EAAIvO,GAAiB2F,GACrBzN,EAAUc,GAAWuV,GAGnB5S,IAASzD,EAAUc,GAAWsO,GAAavO,EAAQiD,sBACnDJ,IAAa1D,EAAUc,GAAW8O,IAClCzN,IAAanC,EAAU3F,EAAK8U,IAEjB,UAAXvL,EACFmI,GAAOE,GAAG,eAAgB,WACxB+O,KACAjP,GAAOO,KAAK,cAAemK,SAEpBnT,GAAclC,IAAcC,IAAagC,KAAeuF,KACjE5I,EAAUkE,GAAOgT,OAAUC,KAGzB9T,KACa,UAAXO,EACFmI,GAAOE,GAAG,cAAegP,IACfrO,IAAWqO,MAGrBrO,GAAWsO,KAA4BpO,IAAUqO,KAErDpP,GAAOE,GAAG,eAAgBmP,IACX,UAAXxX,GAAsBmI,GAAOO,KAAK,cAAemK,MAC/B,mBAAXzS,IAAyBA,GAAOyS,MAC3CnN,IAAO,EA2DT,SAAS6N,GAAShd,GAChBhC,EAAI,WAAc6iB,GAAY3N,GAASlT,MAGzC,SAAS6gB,GAAY7gB,GACnB,GAAKmP,GAAL,CACe,UAAX1F,GAAsBmI,GAAOO,KAAK,eAAgBmK,GAAKtc,IAC3DiP,GAAcC,KACd,IAAIgS,EACFC,EAAoB3S,GACpB4S,GAAyB,EAEvBjY,IACFiG,MACA8R,EAAYC,IAAsB3S,KAEjBoD,GAAOO,KAAK,qBAAsBmK,GAAKtc,KAG1D,IAAIqhB,EACFC,EACAzC,EAAW/X,GACXya,EAAa9O,GACb+O,EAAY7O,GACZ8O,EAAezZ,GACf0Z,EAAcpa,GACdqa,EAAS/Z,GACTga,EAAWtY,GACXuY,EAAetY,GACfuY,EAAc5Z,GACd6Z,EAAwBxZ,GACxByZ,EAA+BtZ,GAC/BuZ,EAAW3gB,GAEb,GAAI4f,EAAW,CACb,IAAIxC,EAAgBzX,GAClBib,EAAgBhZ,GAChBiZ,EAAkB3a,GAClB4a,EAAY/a,GACZgb,EAAkB/Z,GAEpB,IAAK6D,EACH,IAAIsS,EAAY1X,GACdyX,EAAiBxX,GAqJvB,GA7IAgB,GAAYwH,GAAU,aACtBlI,GAAWkI,GAAU,YACrB5H,GAAM4H,GAAU,OAChBlG,GAAQkG,GAAU,SAClBnI,GAASmI,GAAU,UACnBjG,GAAYiG,GAAU,aACtBtH,GAAWsH,GAAU,YACrBjH,GAAqBiH,GAAU,sBAC/B9G,GAA4B8G,GAAU,6BAElC0R,IACFzO,GAAUjD,GAAU,WACpBvI,GAAauI,GAAU,cACvBvH,GAAQuH,GAAU,SAClBtG,GAAasG,GAAU,cACvBhI,GAAegI,GAAU,gBACzBlH,GAAekH,GAAU,gBACzBpH,GAAkBoH,GAAU,mBAEvBrD,IACHnF,GAAcwI,GAAU,eACxBzI,GAASyI,GAAU,YAIvBgJ,GAAyB/F,IAEzBhD,GAAWC,KACLjB,KAAcvH,IAAeuL,KACjCoN,KACKpR,KACHwN,KACAmF,GAAyB,KAGzBna,IAAcC,MAChB4J,GAAgBC,KAEhBU,GAAWL,OAIT8P,GAAaja,MACfH,GAAQ0I,GAAU,SAClBpI,GAAUoI,GAAU,YACpB8R,EAAexa,KAAU+X,KAGlB5X,IAAeC,KAAauK,GAAWL,MAG5C4J,OAIAkG,GACEzO,KAAY8O,IACV9O,GACFsO,KAoVR,WACE,IAAKrO,GAAY,OAMjB,GAJAvR,GAAMuR,UAAW,EACjB/L,GAAUpE,WAAa8P,GACvBkN,KAEIvW,GACF,IAAK,IAAInF,EAAIoM,GAAYpM,KACnBuK,GAAY/J,EAAY0K,GAAWlL,IACvCQ,EAAY0K,GAAW6B,GAAgB/M,EAAI,IAK/C,IAAKuK,EACH,IAAK,IAAIjP,EAAImC,GAAOS,EAAIT,GAAQ0N,GAAY7P,EAAI4C,EAAG5C,IAAK,CACtD,IAAI+D,EAAO6L,GAAW5P,GACpBmjB,EAASnjB,EAAImC,GAAQwF,GAAQ8B,GAAYE,GAC3C5F,EAAKvC,MAAMoL,KAAqB,KAAb5M,EAAImC,IAAewF,GAAQ,IAC9CtE,EAASU,EAAMof,GAKnBC,KAEA7P,IAAW,EA7WL8P,IAKF5Y,KAAcsX,GAAaja,IAAcC,MAC3CyL,GAASC,QAIM4O,IACT7O,IACF0I,GAAqBW,GAA2B3K,GAAc,KAC9D2P,QA+QR,WACE,IAAKnO,GAAU,OAIX7L,IAAemF,IAASwC,GAAahO,MAAM8hB,OAAS,IAGxD,GAAIxS,GAEF,IADA,IAAI7N,EAAM,kBACDjD,EAAI8Q,GAAY9Q,KACnBiP,GAAY1L,EAAYqM,GAAW5P,GAAIiD,GAC3CM,EAAYqM,GAAW6B,GAAgBzR,EAAI,GAAIiD,GAKnDmgB,KAEA1P,IAAS,EAhSH6P,GACAtB,GAAyB,IAK/B5I,GAAyB/F,IAAWE,IAC/BzK,KAAYK,GAAqBG,IAA4B,GAE9DV,KAAcyZ,IAChBzZ,GACEnC,EAAU3F,EAAK8U,IACfhP,EAAa9F,EAAK8U,KAElB1N,KAAaoa,IACXpa,GACEG,GACFpD,EAAYoD,KAERC,IAAcrD,EAAYqD,IAC1BC,IAActD,EAAYsD,KAG5BF,GACFvD,EAAYuD,KAERC,IAAcxD,EAAYwD,IAC1BC,IAAczD,EAAYyD,MAIhCC,KAAQ+Z,IACV/Z,GACEvD,EAAYyD,IACZ5D,EAAY4D,KAEZwB,KAAUsY,IACZtY,GACEzD,EAAUc,GAAWsO,GAAavO,EAAQiD,sBAC1C3D,EAAaW,GAAWsO,KAExB1L,KAAcsY,IAChBtY,GACE1D,EAAUc,GAAW8O,IACrBzP,EAAaW,GAAW8O,KAExBvN,KAAa4Z,IACX5Z,IACEM,IAAkBnE,EAAYmE,IAC7BwL,IAAc2D,IAAsB6E,OAErChU,IAAkBtE,EAAYsE,IAC9BwL,IAAaC,OAGjB1L,KAAuBwZ,IACzBxZ,GACE1C,EAAUc,GAAW2N,IACrBtO,EAAaW,GAAW2N,KAExB5L,KAA8BsZ,IAChCtZ,GACE7C,EAAU3F,EAAK0U,IACf5O,EAAa9F,EAAK0U,KAGlBsM,GAYF,GAXIja,KAAeyX,GAAiBrX,KAAW+a,IAAahB,GAAyB,GAEjFlY,KAAegZ,IACZhZ,KAAcyF,GAAahO,MAAMgiB,OAAS,KAG7Crb,IAAYE,KAAiB2a,IAC/Bza,GAAWiE,UAAYnE,GAAa,GACpCG,GAAWgE,UAAYnE,GAAa,IAGlCgB,IAAkBF,KAAiB+Z,EAAiB,CACtD,IAAIljB,EAAI+I,GAAW,EAAI,EACrB0a,EAAOpa,GAAemD,UACtBkX,EAAMD,EAAKxjB,OAASijB,EAAgBljB,GAAGC,OACrCwjB,EAAK5D,UAAU6D,KAASR,EAAgBljB,KAC1CqJ,GAAemD,UAAYiX,EAAK5D,UAAU,EAAG6D,GAAOva,GAAanJ,UAIjEkI,KAAWJ,IAAcC,MAAcka,GAAyB,GAqBtE,IAlBIE,GAAgBra,KAAeC,MACjC0M,GAAQuD,KACRqJ,OAGFa,EAAa/f,KAAU2gB,IAErBrQ,GAAOO,KAAK,eAAgBmK,MAC5B8E,GAAyB,GAChBE,EACJD,GAAcJ,MACVha,IAAcC,MACvB4Y,KACAgD,MAGExB,IAAiBlT,GAgdvB,WAEE,IADA,IAAIrM,EAAIT,GAAQsK,KAAK0E,IAAItB,GAAYlI,IAC5B3H,EAAIyR,GAAezR,KAAM,CAChC,IAAI+D,EAAO6L,GAAW5P,GAElBA,GAAKmC,IAASnC,EAAI4C,GAEpBS,EAASU,EAAM,cAEfA,EAAKvC,MAAMoL,KAAqB,KAAb5M,EAAImC,IAAewF,GAAQ,IAC9CtE,EAASU,EAAM0F,IACflG,EAAYQ,EAAM4F,KACT5F,EAAKvC,MAAMoL,OACpB7I,EAAKvC,MAAMoL,KAAO,GAClBvJ,EAASU,EAAM4F,IACfpG,EAAYQ,EAAM0F,KAIpBlG,EAAYQ,EAAM2F,IAIpBvK,WAAW,WACTqD,EAAQoN,GAAY,SAAU5M,GAC5BO,EAAYP,EAAI,iBAEjB,KA3e8B4gB,IAE5BtQ,KAAYE,GAAQ,CAEvB,GAAIuO,IAAc/U,IAEZjD,KAAe8Z,eAAiB/a,KAAU0W,UAC5C1E,KAIEjT,KAAgBwX,GAAkBzX,KAAW0X,IAC/C9P,GAAahO,MAAM+L,QAAUkN,GAAsB5S,GAAaD,GAAQE,GAAYgB,GAAOiB,KAGzFuF,IAAY,CAEVL,IACFzH,GAAUhG,MAAMyK,MAAQyO,GAAkB5S,GAAYF,GAAQD,KAIhE,IAAI1E,EAAM0X,GAAmB7S,GAAYF,GAAQD,IAC/CiT,GAAoBhT,KS/8C3B,SAAA5F,EAAAG,GAEP,eAAAH,EACAA,EAAA8hB,WAAA3hB,GACAH,EAAA+hB,WAAA5hB,GT+8CY6hB,CAAchiB,GAAOM,EAAkBN,IAAS,GAChDD,EAAWC,GAAO,IAAMmR,GAAU,eAAgBlQ,EAAKX,EAAkBN,KAKzE+H,IAAc4X,KAEdM,IACF7B,KACAjO,GAAchQ,IAId4f,GAAatP,GAAOO,KAAK,mBAAoBmK,GAAKtc,KAQxD,SAAS4S,KACP,IAAK3L,KAAeC,GAElB,OAAO8H,KADC3H,GAASP,IAASA,GAAQ,GAAK,EAAIA,IAI7C,IAAIsE,EAAQnE,IAAcA,GAAaF,IAAUiI,GAAaK,GAAeL,IAC3EoU,EAAKpc,GAAcyI,GAAyB,EAAdzI,GAAkByI,GAAW1I,GAM7D,OAJIM,KACF+b,GAAMnc,IAAcwI,GAAWxI,IAAc,GAAKwI,IAAYJ,GAAe/N,GAAQ,GAAK+N,GAAe/N,IAASyF,KAAW,GAGxHqE,GAASgY,EAGlB,SAAShU,KAEP,IAAK,IAAIe,KADT3B,GAAiB,EACFrF,EACbgH,EAAK+J,SAAS/J,GACVlB,IAAekB,IAAM3B,GAAiB2B,GA+C9C,SAASyQ,MACF1Y,IAAYM,IAAkBtE,EAAYsE,KAC1CZ,IAAOE,IAAgB5D,EAAY4D,IACnCR,KACCG,GACFvD,EAAYuD,KAERC,IAAcxD,EAAYwD,IAC1BC,IAAczD,EAAYyD,MAKpC,SAAS4a,KACHra,IAAYM,IAAkBnE,EAAYmE,IAC1CZ,IAAOE,IAAgBzD,EAAYyD,IACnCR,KACEG,GACFpD,EAAYoD,KAERC,IAAcrD,EAAYqD,IAC1BC,IAActD,EAAYsD,MAKpC,SAASqZ,KACP,IAAInO,GAAJ,CAMA,GAHI7L,KAAe2H,GAAahO,MAAM8hB,OAAS,OAG3CxS,GAEF,IADA,IAAI7N,EAAM,kBACDjD,EAAI8Q,GAAY9Q,KACnBiP,GAAY5L,EAASuM,GAAW5P,GAAIiD,GACxCI,EAASuM,GAAW6B,GAAgBzR,EAAI,GAAIiD,GAKhDwe,KAEA/N,IAAS,GAyBX,SAASkO,KACP,IAAIrO,GAAJ,CAKA,GAHAvR,GAAMuR,UAAW,EACjB/L,GAAUpE,UAAYoE,GAAUpE,UAAUI,QAAQ0P,GAAoB2M,UAAU,GAAI,IACpFrb,EAAYgD,IAAY,UACpBqC,GACF,IAAK,IAAInF,EAAIoM,GAAYpM,KACnBuK,GAAYlK,EAAY6K,GAAWlL,IACvCK,EAAY6K,GAAW6B,GAAgB/M,EAAI,IAQ/C,GAHK4K,IAAeL,GAAYzK,EAAYgL,IAAe,WAGtDP,EACH,IAAK,IAAIjP,EAAImC,GAAOS,EAAIT,GAAQ0N,GAAY7P,EAAI4C,EAAG5C,IAAK,CACtD,IAAI+D,EAAO6L,GAAW5P,GACtBwE,EAAYT,GAAO,UACnBR,EAAYQ,EAAM0F,IAClBlG,EAAYQ,EAAM4F,IAKtB8X,KAEAlO,IAAW,GAiCb,SAASoQ,KACP,IAAI1gB,EAAM4d,KACNzQ,GAAkB5D,YAAcvJ,IAAOmN,GAAkB5D,UAAYvJ,GAG3E,SAAS4d,KACP,IAAIpe,EAAMyhB,KACRC,EAAQ1hB,EAAI,GAAK,EACjB2hB,EAAM3hB,EAAI,GAAK,EACjB,OAAO0hB,IAAUC,EAAMD,EAAQ,GAAKA,EAAQ,OAASC,EAGvD,SAASF,GAAqBnY,GACjB,MAAPA,IAAeA,EAAM8Q,MACzB,IAAmBuH,EAAKC,EAAYC,EAAhCH,EAAQhiB,GAiBZ,GAdI+F,IAAUL,IACRE,IAAaD,MACfuc,IAAgBE,WAAWxY,GAAOlE,IAClCyc,EAAWD,EAAa/T,GAAyB,EAAdzI,IAGjCE,KACFsc,EAAanU,GAAe/N,IAC5BmiB,EAAWD,EAAa/T,IAMxBvI,GACFmI,GAAe1N,QAAQ,SAAUgiB,EAAOxkB,GAClCA,EAAIyR,MACDvJ,IAAUL,KAAgB2c,GAASH,EAAa,KAAOF,EAAQnkB,GAChEskB,EAAWE,GAAS,KAAOJ,EAAMpkB,UAKpC,CAEL,GAAI8H,GAAY,CACd,IAAI2c,EAAO3c,GAAaF,GACpBM,IAAUL,IACZsc,EAAQ1X,KAAK+D,MAAM6T,EAAaI,GAChCL,EAAM3X,KAAKyE,KAAKoT,EAAWG,EAAO,IAElCL,EAAMD,EAAQ1X,KAAKyE,KAAKZ,GAAWmU,GAAQ,OAI7C,GAAIvc,IAAUL,GAAa,CACzB,IAAIoR,EAAItR,GAAQ,EAQhB,GAPIO,IACFic,GAASlL,EAAI,EACbmL,EAAMjiB,GAAQ8W,EAAI,GAElBmL,EAAMjiB,GAAQ8W,EAGZpR,GAAa,CACf,IAAIqR,EAAIrR,GAAcF,GAAQ2I,GAC9B6T,GAASjL,EACTkL,GAAOlL,EAGTiL,EAAQ1X,KAAK+D,MAAM2T,GACnBC,EAAM3X,KAAKyE,KAAKkT,QAEhBA,EAAMD,EAAQxc,GAAQ,EAI1Bwc,EAAQ1X,KAAK4E,IAAI8S,EAAO,GACxBC,EAAM3X,KAAK0E,IAAIiT,EAAK3S,GAAgB,GAGtC,OAAQ0S,EAAOC,GAYjB,SAAShN,GAAUE,GACjBjU,EAASiU,EAAK,UACdC,GAAaD,GAQf,SAASC,GAAaD,GACpBjU,EAASiU,EAAK,gBACd/T,EAAY+T,EAAK,WACjBzQ,EAAayQ,EAAKJ,IAGpB,SAASgJ,GAAciE,EAAOC,GAE5B,IADA,IAAItE,KACGqE,GAASC,GACd5hB,EAAQoN,GAAWuU,GAAOpE,iBAAiB,OAAQ,SAAUzI,GAAOwI,EAAKhb,KAAKwS,KAC9E6M,IAGF,OAAOrE,EAKT,SAAS6B,KACP,IAAI7B,EAAOI,GAAc9O,MAAM,KAAM8S,MACrCrlB,EAAI,WAAcohB,GAAgBH,EAAMtC,MAG1C,SAASyC,GAAgBH,EAAM5gB,GAE7B,OAAIiR,GAAuBjR,KAG3B4gB,EAAKtd,QAAQ,SAAU8U,EAAKnV,GACtBY,EAASuU,EAAKL,KAAqB6I,EAAK/M,OAAO5Q,EAAO,KAIvD2d,EAAK7f,YAGVpB,EAAI,WAAcohB,GAAgBH,EAAM5gB,KAHbA,KAM7B,SAAS4iB,KACPnB,KACAgD,KACAnC,KA0GF,WAEE,GAAI/Y,KACFmM,GAAkBN,IAAc,EAAIA,GAAa4D,KACjD5D,IAAc,EAEVM,KAAoBuD,IAAuB,CAC7C,IAAIuM,EAAUxP,GAASiD,IACrBwM,EAAazP,GAASN,IAExB5Q,EAAS0gB,GACPlL,SAAY,KACZwH,aAAc3I,IAAUF,GAAwB,KAElD5U,EAAYmhB,EAAStM,IAErBpU,EAAS2gB,GAAc3D,aAAc3I,IAAUzD,GAAkB,GAAK0D,KACtE9T,EAAYmgB,EAAY,YACxBthB,EAASshB,EAAYvM,IAErBD,GAAwBvD,IA7H5BgQ,GAIF,SAAS9J,KACH7L,GAAYlF,KACdqF,GAAc5N,MAAM4M,GAAsBtF,GAAQ,IAAO,KAI7D,SAAS+b,GAAkBC,EAAYC,GAErC,IADA,IAAIC,KACKhlB,EAAI8kB,EAAYliB,EAAI6J,KAAK0E,IAAI2T,EAAaC,EAAYtT,IAAgBzR,EAAI4C,EAAG5C,IACpFglB,EAAQlgB,KAAK8K,GAAW5P,GAAG8B,cAG7B,OAAO2K,KAAK4E,IAAID,MAAM,KAAM4T,GAQ9B,SAASxH,KACP,IAAIyH,EAAYlb,GAAa8a,GAAkB1iB,GAAOwF,IAASkd,GAAkB/T,GAAYjB,IAC3FyJ,EAAKlK,IAAgCI,GAEnC8J,EAAG9X,MAAMgiB,SAAWyB,IAAa3L,EAAG9X,MAAMgiB,OAASyB,EAAY,MAKrE,SAASvE,KACPxQ,IAAkB,GAClB,IAAIxM,EAAO4L,GAAa,OAAS,MAC/B4V,EAAQ5V,GAAa,QAAU,SAC/B6V,EAAOvV,GAAW,GAAGjD,wBAAwBjJ,GAE/ClB,EAAQoN,GAAY,SAAU7L,EAAM/D,GAE9BA,GAAKkQ,GAAepL,KAAKf,EAAK4I,wBAAwBjJ,GAAQyhB,GAE9DnlB,IAAMyR,GAAgB,GAAKvB,GAAepL,KAAKf,EAAK4I,wBAAwBuY,GAASC,KAK7F,SAASxE,KACP,IAAIyE,EAAQlB,KACVC,EAAQiB,EAAM,GACdhB,EAAMgB,EAAM,GAEd5iB,EAAQoN,GAAY,SAAU7L,EAAM/D,GAE9BA,GAAKmkB,GAASnkB,GAAKokB,EACjB3gB,EAAQM,EAAM,iBAChBS,EAAYT,GAAO,cAAe,aAClCV,EAASU,EAAMiT,KAIZvT,EAAQM,EAAM,iBACjBC,EAASD,GACPwV,cAAe,OACfC,SAAY,OAEdjW,EAAYQ,EAAMiT,OA+D1B,SAASqO,GAAqBriB,GAC5B,OAAOA,EAAGgM,SAAS9I,cAGrB,SAASqb,GAASve,GAChB,MAAoC,WAA7BqiB,GAAqBriB,GAG9B,SAASsiB,GAAetiB,GACtB,MAA4C,SAArCA,EAAGa,aAAa,iBAGzB,SAAS0hB,GAAiBhE,EAAUve,EAAI+I,GAClCwV,EACFve,EAAGuQ,SAAWxH,EAEd/I,EAAGuB,aAAa,gBAAiBwH,EAAIzH,YAKzC,SAASkd,KACP,GAAKrZ,KAAY2B,KAAUD,GAA3B,CAEA,IAAI2b,EAAgB9N,GAAgBnP,GAAWgL,SAAW+R,GAAe/c,IACvEkd,EAAgB9N,GAAgBnP,GAAW+K,SAAW+R,GAAe9c,IACrEkd,EAAevjB,IAASiQ,GACxBuT,GAAgB7b,IAAU3H,IAASmQ,GAEjCoT,IAAgBF,GAClBD,GAAiB7N,GAAcnP,IAAY,IAExCmd,GAAeF,GAClBD,GAAiB7N,GAAcnP,IAAY,GAEzCod,IAAgBF,GAClBF,GAAiB5N,GAAcnP,IAAY,IAExCmd,GAAeF,GAClBF,GAAiB5N,GAAcnP,IAAY,IAK/C,SAASyT,GAAcjZ,EAAIC,GACrBmL,IAAsBpL,EAAGxB,MAAM4M,GAAsBnL,GAO3D,SAAS2iB,GAAahM,GAIpB,OAHW,MAAPA,IAAeA,EAAMzX,IAGlB4F,IAAcuI,IADXzI,GAAcD,GAAS,IACOsI,GAAe0J,EAAM,GAAK1J,GAAe0J,GAAOhS,KAAW,EACjGE,IAAcwI,GAAWxI,IAAc,GACpCH,GAAQ,GAAK,EAGpB,SAASiK,KACP,IACE9F,EAAUwE,IADFzI,GAAcD,GAAS,IAb1BE,IAAcA,GAAaF,IAAU6J,GAAgBvB,GAAeuB,KAsB3E,OANIvJ,KAAW2B,KACbiC,EAAShE,KAAgBA,GAAaF,KAAW6J,GAAgB,GAAKmU,KACpEA,GAAanU,GAAgB,GAAKvB,GAAeuB,GAAgB,IAEjE3F,EAAS,IAAKA,EAAS,GAEpBA,EAGT,SAAS+Q,GAA2BjD,GAGlC,IAAI7N,EACJ,GAHW,MAAP6N,IAAeA,EAAMzX,IAGrBmN,KAAevH,GACjB,GAAID,GACFiE,IAASjE,GAAaF,IAAUgS,EAC5B1R,KAAU6D,GAAO6Z,UAChB,CACL,IAAIC,EAAclY,EAAY8D,GAAgB9J,GAC1CO,KAAU0R,GAAOgM,MACrB7Z,EAAc,KAAN6N,EAAYiM,OAGtB9Z,GAAQmE,GAAe0J,GACnB1R,IAAUH,KACZgE,GAAO6Z,MAcX,OAVIlU,KAAoB3F,EAAMU,KAAK4E,IAAItF,EAAK4F,KAE5C5F,IAAQuD,IAAevH,IAAcD,GAAoB,KAAN,IAE/C9G,SAASoZ,KACS,OAAhBpZ,SAASoZ,MACTrO,EAAMA,EAAIvI,QAAQ,IAAK,KAItBuI,EAGT,SAASqU,GAA2BrU,GAClCkQ,GAAczU,GAAW,MACzB0U,GAAqBnQ,GAGvB,SAASmQ,GAAqBnQ,GACjB,MAAPA,IAAeA,EAAM8Q,MACzBrV,GAAUhG,MAAMsQ,IAAiBC,GAAkBhG,EAAMiG,GAG3D,SAASgL,GAAa8I,EAAQC,EAAUC,EAASC,GAC/C,IAAIrjB,EAAIkjB,EAASne,GACZkC,KAAQjH,EAAI6J,KAAK0E,IAAIvO,EAAG6O,KAE7B,IAAK,IAAIzR,EAAI8lB,EAAQ9lB,EAAI4C,EAAG5C,IAAK,CAC/B,IAAI+D,EAAO6L,GAAW5P,GAGjBimB,IAASliB,EAAKvC,MAAMoL,KAAqB,KAAb5M,EAAImC,IAAewF,GAAQ,KAExDiC,IAAgByE,IAClBtK,EAAKvC,MAAM6M,GAAmBtK,EAAKvC,MAAM+M,GAAkB3E,IAAgB5J,EAAI8lB,GAAU,IAAO,KAElGviB,EAAYQ,EAAMgiB,GAClB1iB,EAASU,EAAMiiB,GAEXC,GAASpV,GAAc/L,KAAKf,IA2CpC,SAASmiB,GAAOrlB,EAAGslB,GACbtU,IAA8BgK,MAG9B1Z,KAAUgQ,IAAegU,KAE3B1T,GAAOO,KAAK,eAAgBmK,MAC5B1K,GAAOO,KAAK,kBAAmBmK,MAC3BpT,IAAc4X,KAGd9M,IAAahU,IAAM,QAAS,WAAWR,QAAQQ,EAAEwM,OAAS,GAAKyH,KAEnEtC,IAAU,EACVwJ,MAWJ,SAASoK,GAASnjB,GAChB,OAAOA,EAAIiD,cAAc1C,QAAQ,KAAM,IAWzC,SAAS2Q,GAAgBkS,GAGvB,GAAIpX,GAAYuD,GAAS,CAGvB,GAFAC,GAAOO,KAAK,gBAAiBmK,GAAKkJ,KAE7BpX,GAAY4B,GAAc5Q,OAAS,EACtC,IAAK,IAAID,EAAI,EAAGA,EAAI6Q,GAAc5Q,OAAQD,IAAK,CAC7C,IAAI+D,EAAO8M,GAAc7Q,GAEzB+D,EAAKvC,MAAMoL,KAAO,GAEd2B,GAAkBF,IACpBtK,EAAKvC,MAAM+M,GAAkB,GAC7BxK,EAAKvC,MAAM6M,GAAmB,IAEhC9K,EAAYQ,EAAM2F,IAClBrG,EAASU,EAAM4F,IAanB,IAAK0c,IACFpX,GAAYoX,EAAMvmB,OAAOsH,aAAeI,IACzC6e,EAAMvmB,SAAW0H,IAAa4e,GAASC,EAAMC,gBAAkBF,GAAStU,IAAgB,CAExF,IAAKD,GAA4B,CAC/B,IAAIiR,EAAW3gB,GACf0Z,KACI1Z,KAAU2gB,IACZrQ,GAAOO,KAAK,eAAgBmK,MAE5BiD,MAIW,UAAX9V,GAAsBmI,GAAOO,KAAK,cAAemK,MACrD3K,IAAU,EACVL,GAAchQ,KAOpB,SAASwS,GAAKD,EAAa7T,GACzB,IAAI2S,GAGJ,GAAoB,SAAhBkB,EACFb,GAAgBhT,GAAI,QAGf,GAAoB,SAAhB6T,EACTb,GAAgBhT,EAAG,OAGd,CACL,GAAI2R,GAAS,CACX,GAAIjI,GAA4B,OAAiB4J,KAGnD,IAAIwK,EAAWD,KACb6H,EAAW,EAkBb,GAhBoB,UAAhB7R,EACF6R,GAAa5H,EACY,SAAhBjK,EACT6R,EAAWtX,EAAWY,GAAalI,GAAQgX,EAAW9O,GAAa,EAAI8O,GAE5C,iBAAhBjK,IAA4BA,EAAcqG,SAASrG,IAEzD8R,MAAM9R,KAEJ7T,IAAK6T,EAAcjI,KAAK4E,IAAI,EAAG5E,KAAK0E,IAAItB,GAAa,EAAG6E,KAE7D6R,EAAW7R,EAAciK,KAKxB1P,GAAYsX,GAAY9Z,KAAKC,IAAI6Z,GAAY5e,GAAO,CACvD,IAAI8e,EAASF,EAAW,EAAI,GAAK,EACjCA,GAAapkB,GAAQokB,EAAW1W,IAAeuC,GAAWvC,GAAa4W,EAAsB,EAAb5W,GAAiB4W,GAAU,EAG7GtkB,IAASokB,EAGLtX,GAAYpF,KACV1H,GAAQiQ,KAAYjQ,IAAS0N,IAC7B1N,GAAQmQ,KAAYnQ,IAAS0N,KAI/B6O,GAAYvc,MAAWuc,GAAYvM,KACrC+T,GAAOrlB,IAOb,SAASgT,GAAgBhT,EAAGuZ,GAC1B,GAAI5H,GAAS,CACX,GAAIjI,GAA4B,OAAiB4J,KAEnD,IAAIuS,EAEJ,IAAKtM,EAAK,CAIR,IAFA,IAAIta,EAASsU,GADbvT,EAAIkT,GAASlT,IAGNf,IAAWwI,KAAsBC,GAAYC,IAAYnI,QAAQP,GAAU,GAAKA,EAASA,EAAOsH,WAEvG,IAAIuf,GAAYpe,GAAYC,IAAYnI,QAAQP,GAC5C6mB,GAAY,IACdD,GAAkB,EAClBtM,EAAmB,IAAbuM,GAAkB,EAAI,GAIhC,GAAI7c,GAAQ,CACV,GAAI3H,KAAUiQ,KAAqB,IAATgI,EAExB,YADAzF,GAAK,OAAQ9T,GAER,GAAIsB,KAAUmQ,IAAoB,IAAR8H,EAE/B,YADAzF,GAAK,QAAS9T,GAKduZ,IACFjY,IAAS8F,GAAUmS,EACfrS,KAAa5F,GAAQsK,KAAK+D,MAAMrO,KAEpC+jB,GAAQQ,GAAoB7lB,GAAgB,YAAXA,EAAEwM,KAAuBxM,EAAI,OA6BlE,SAAS2U,KACP+C,GAAgBqO,YAAY,WAC1B/S,GAAgB,KAAM3K,KACrBD,IAEH4L,IAAY,EAGd,SAASQ,KACP0I,cAAcxF,IACd1D,IAAY,EAGd,SAASgS,GAAqBC,EAAQhG,GACpC9c,EAASqF,IAAkB0X,cAAe+F,IAC1Czd,GAAemD,UAAYkM,GAAoB,GAAKoO,EAASpO,GAAoB,GAAKoI,EAGxF,SAASzD,KACP7H,KACInM,IAAkBwd,GAAqB,OAAQ1d,GAAa,IAGlE,SAAS2L,KACPO,KACIhM,IAAkBwd,GAAqB,QAAS1d,GAAa,IAiBnE,SAAS2U,KACHjJ,IACFC,KACA0D,IAAqB,IAErB6E,KACA7E,IAAqB,GAuDzB,SAASvD,GAASjS,GAChBA,EAAG+jB,QAyBL,SAAShT,GAASlT,GAEhB,OAAOmmB,GADPnmB,EAAIA,GAAK+J,EAAIyb,OACYxlB,EAAEomB,eAAe,GAAKpmB,EAEjD,SAASuT,GAAUvT,GACjB,OAAOA,EAAEf,QAAU8K,EAAIyb,MAAMa,WAG/B,SAASF,GAAanmB,GACpB,OAAOA,EAAEwM,KAAKhN,QAAQ,UAAY,EAGpC,SAAS8mB,GAAuBtmB,GAC9BA,EAAEumB,eAAiBvmB,EAAEumB,iBAAmBvmB,EAAEwmB,aAAc,EAG1D,SAASC,KACP,OUt9EC,SAAAC,EAAAnC,GACP,IAAAoC,GAAA,EACAxI,EAAAvS,KAAAC,IAAA,GAAAD,KAAAC,IAAA6a,IAQA,OANAvI,GAAA,GAAAoG,EACAoC,EAAA,aACGxI,GAAAoG,IACHoC,EAAA,YAGAA,EV48EaC,CWt9EN,SAAArO,EAAAD,GACP,OAAA1M,KAAAib,MAAAtO,EAAAD,IAAA,IAAA1M,KAAAkb,IXq9E+BC,CAAS9O,GAAaM,EAAIP,GAAaO,EAAGN,GAAaK,EAAIN,GAAaM,GAAI9O,MAAgB9C,EAAQG,KAG/H,SAASsO,GAAWnV,GAClB,GAAI2R,GAAS,CACX,GAAIjI,GAA4B,OAAiB4J,KAG/CpL,IAAY8L,IAAaQ,KAE7B0D,IAAW,EACPH,KACFvZ,EAAIuZ,IACJA,GAAW,MAGb,IAAIiP,EAAI9T,GAASlT,GACjB4R,GAAOO,KAAKgU,GAAanmB,GAAK,aAAe,YAAasc,GAAKtc,KAE1DmmB,GAAanmB,KAAO,MAAO,KAAKR,QAAQglB,GAAqBjR,GAAUvT,MAAQ,GAClFsmB,GAAuBtmB,GAGzBiY,GAAaK,EAAIN,GAAaM,EAAI0O,EAAEC,QACpChP,GAAaM,EAAIP,GAAaO,EAAIyO,EAAEE,QAChC9Y,IACF0J,GAAgB4L,WAAW/c,GAAUhG,MAAMsQ,IAAetO,QAAQuO,GAAiB,KACnFkK,GAAczU,GAAW,OAI7B,SAAS0O,GAAUrV,GACjB,GAAIkY,GAAU,CACZ,IAAI8O,EAAI9T,GAASlT,GACjBiY,GAAaK,EAAI0O,EAAEC,QACnBhP,GAAaM,EAAIyO,EAAEE,QAEf9Y,EACG2J,KAAYA,GAAW/Z,EAAI,YAUtC,SAASmpB,EAAUnnB,GACjB,IAAK0R,GAEH,YADAwG,IAAW,GAGb1Z,EAAIuZ,IACAG,KAAYH,GAAW/Z,EAAI,WAAcmpB,EAAUnnB,MAEzB,MAA1B0R,KAAiCA,GAAwB+U,MAC7D,GAAI/U,GAAuB,EACpBkF,IAAiBuP,GAAanmB,KAAM4W,IAAgB,GAEzD,IACM5W,EAAEwM,MAAQoF,GAAOO,KAAKgU,GAAanmB,GAAK,YAAc,WAAYsc,GAAKtc,IAC3E,MAAOonB,IAET,IAAI9O,EAAIR,GACNuP,EAAOlP,GAAQF,GAAcD,IAC/B,IAAKvJ,IAAcxH,IAAcC,GAC/BoR,GAAK+O,EACL/O,GAAK,SACA,CACL,IAAIgP,EAAcxa,EAAYua,EAAOvgB,GAAQ,MAAQ2I,GAAW1I,IAAU6J,IAAwB,IAAPyW,GAAc5X,GAAW1I,IACpHuR,GAAKgP,EACLhP,GAAK,IAGP3R,GAAUhG,MAAMsQ,IAAiBC,GAAkBoH,EAAInH,IArCPgW,CAAUnnB,OAE1B,MAA1B0R,KAAiCA,GAAwB+U,MACzD/U,KAAyBkF,IAAgB,IAG3CA,IAAiB5W,EAAEumB,kBAmC3B,SAAShR,GAASvV,GAChB,GAAIkY,GAAU,CACRH,KACFvZ,EAAIuZ,IACJA,GAAW,MAET3J,GAAYgN,GAAczU,GAAW,IACzCuR,IAAW,EAEX,IAAI8O,EAAI9T,GAASlT,GACjBiY,GAAaK,EAAI0O,EAAEC,QACnBhP,GAAaM,EAAIyO,EAAEE,QACnB,IAAIG,EAAOlP,GAAQF,GAAcD,IAEjC,GAAIpM,KAAKC,IAAIwb,GAAO,CAElB,IAAKlB,GAAanmB,GAAI,CAEpB,IAAIf,EAASsU,GAAUvT,GACvB6F,EAAU5G,GACR8T,MAAS,SAASwU,EAAavnB,GAC7BsmB,GAAuBtmB,GACvBgG,EAAa/G,GAAU8T,MAASwU,OAKlCnZ,EACF2J,GAAW/Z,EAAI,WACb,GAAIyQ,KAAevH,GAAW,CAE5B,IAAIsgB,EACArnB,SAASoZ,KAAuB,OAAhBpZ,SAASoZ,KACzBiO,EAAaH,EAAOvgB,GAAQ2I,GAC5B+X,EAAaH,EAAO,EAAIzb,KAAK+D,MAAM6X,GAAc5b,KAAKyE,KAAKmX,KAE3DA,GAAeH,EAAOvgB,GAAQ2I,GAC9B+X,EAAaH,EAAO,EAAIzb,KAAK+D,MAAM6X,GAAc5b,KAAKyE,KAAKmX,IAG/DlmB,IAASkmB,MACJ,CACL,IAAIC,IAAW3P,GAAgBuP,GAC/B,GAAII,GAAS,EACXnmB,GAAQiQ,QACH,GAAIkW,GAASpY,GAAeuB,GAAgB,GACjDtP,GAAQmQ,QAGR,IADA,IAAItS,EAAI,EACDA,EAAIyR,IAAiB6W,GAASpY,GAAelQ,IAClDmC,GAAQnC,EACJsoB,EAAQpY,GAAelQ,IAAMkoB,EAAO,IAAK/lB,IAAS,GACtDnC,IAKNkmB,GAAOrlB,EAAGqnB,GACVzV,GAAOO,KAAKgU,GAAanmB,GAAK,WAAa,UAAWsc,GAAKtc,MAGzD0R,IACFsB,GAAgBhT,EAAGqnB,EAAO,GAAK,EAAI,IAON,SAAjC3gB,EAAQiD,uBAAmCiN,IAAgB,GAC3DpN,KAAckI,GAAwB,KACtCxJ,KAAa8L,IAAaW,KAKhC,SAASsH,MACE1N,IAAgCI,IACtChO,MAAMgiB,OAAStT,GAAe/N,GAAQwF,IAASuI,GAAe/N,IAAS,KAG5E,SAAS6V,KACP,IAAIuQ,EAAQzgB,IAAcA,GAAaF,IAAUiI,GAAaS,GAAWT,GAAalI,GACtF,OAAO8E,KAAK0E,IAAI1E,KAAKyE,KAAKqX,GAAQ1Y,IAQpC,SAASwR,KACP,GAAK5Y,KAAOG,IAER6L,KAAUwD,GAAa,CACzB,IAAI9G,EAAM8G,GACR5G,EAAMoD,GACN5B,EAAK3N,EAQP,IANI+S,GAAcxD,KAChBtD,EAAMsD,GACNpD,EAAM4G,GACNpF,EAAK9N,GAGAoM,EAAME,GACXwB,EAAGqC,GAAS/D,IACZA,IAIF8G,GAAcxD,IAIlB,SAAS0I,GAAKtc,GACZ,OACE2G,UAAWA,GACXoI,WAAYA,GACZjH,aAAcA,GACduM,SAAUA,GACV5M,kBAAmBA,GACnBqO,YAAaA,GACbpO,WAAYA,GACZC,WAAYA,GACZb,MAAOA,GACPM,QAASA,GACT6I,WAAYA,GACZjB,WAAYA,GACZ4B,cAAeA,GACftP,MAAOA,GACPgQ,YAAaA,GACbqW,aAAcnW,KACduC,gBAAiBA,GACjBuD,sBAAuBA,GACvB1D,MAAOA,GACPwD,YAAaA,GACbjW,MAAOA,GACPgO,KAAMA,GACNqW,MAAOxlB,OA1+EL6N,GAAsBC,QAAQC,KAAK,qBAAsBrH,EAAQC","file":"./modules/ClpSlider~HotspotImage~Slider~StageSlider~ThumbnailScrollBar~TileStageSlider.7bdd7b35.js","sourcesContent":["var win = window;\n\nexport var raf = win.requestAnimationFrame\n || win.webkitRequestAnimationFrame\n || win.mozRequestAnimationFrame\n || win.msRequestAnimationFrame\n || function(cb) { return setTimeout(cb, 16); };\n","var win = window;\n\nexport var caf = win.cancelAnimationFrame\n || win.mozCancelAnimationFrame\n || function(id){ clearTimeout(id); };\n","export function extend() {\n var obj, name, copy,\n target = arguments[0] || {},\n i = 1,\n length = arguments.length;\n\n for (; i < length; i++) {\n if ((obj = arguments[i]) !== null) {\n for (name in obj) {\n copy = obj[name];\n\n if (target === copy) {\n continue;\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n}","export function checkStorageValue (value) {\n return ['true', 'false'].indexOf(value) >= 0 ? JSON.parse(value) : value;\n}","export function setLocalStorage(storage, key, value, access) {\n if (access) {\n try { storage.setItem(key, value); } catch (e) {}\n }\n return value;\n}","export function getBody () {\n var doc = document,\n body = doc.body;\n\n if (!body) {\n body = doc.createElement('body');\n body.fake = true;\n }\n\n return body;\n}","export var docElement = document.documentElement;","import { docElement } from './docElement.js';\n\nexport function setFakeBody (body) {\n var docOverflow = '';\n if (body.fake) {\n docOverflow = docElement.style.overflow;\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n return docOverflow;\n}","import { docElement } from './docElement.js';\n\nexport function resetFakeBody (body, docOverflow) {\n if (body.fake) {\n body.remove();\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n }\n}","// cross browsers addRule method\nimport { raf } from './raf.js';\nexport function addCSSRule(sheet, selector, rules, index) {\n // return raf(function() {\n 'insertRule' in sheet ?\n sheet.insertRule(selector + '{' + rules + '}', index) :\n sheet.addRule(selector, rules, index);\n // });\n}","export function getCssRulesLength(sheet) {\n var rule = ('insertRule' in sheet) ? sheet.cssRules : sheet.rules;\n return rule.length;\n}","// https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\nexport function forEach (arr, callback, scope) {\n for (var i = 0, l = arr.length; i < l; i++) {\n callback.call(scope, arr[i], i);\n }\n}","export var classListSupport = 'classList' in document.createElement('_');","import { classListSupport } from './classListSupport.js';\n\nvar hasClass = classListSupport ?\n function (el, str) { return el.classList.contains(str); } :\n function (el, str) { return el.className.indexOf(str) >= 0; };\n\nexport { classListSupport, hasClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar addClass = classListSupport ?\n function (el, str) {\n if (!hasClass(el, str)) { el.classList.add(str); }\n } :\n function (el, str) {\n if (!hasClass(el, str)) { el.className += ' ' + str; }\n };\n\nexport { addClass };","import { classListSupport, hasClass } from './hasClass.js';\nvar removeClass = classListSupport ?\n function (el, str) {\n if (hasClass(el, str)) { el.classList.remove(str); }\n } :\n function (el, str) {\n if (hasClass(el, str)) { el.className = el.className.replace(str, ''); }\n };\n\nexport { removeClass };","export function hasAttr(el, attr) {\n return el.hasAttribute(attr);\n}","export function getAttr(el, attr) {\n return el.getAttribute(attr);\n}","export function isNodeList(el) {\n // Only NodeList has the \"item()\" function\n return typeof el.item !== \"undefined\"; \n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function setAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n if (Object.prototype.toString.call(attrs) !== '[object Object]') { return; }\n\n for (var i = els.length; i--;) {\n for(var key in attrs) {\n els[i].setAttribute(key, attrs[key]);\n }\n }\n}","import { isNodeList } from \"./isNodeList.js\";\n\nexport function removeAttrs(els, attrs) {\n els = (isNodeList(els) || els instanceof Array) ? els : [els];\n attrs = (attrs instanceof Array) ? attrs : [attrs];\n\n var attrLength = attrs.length;\n for (var i = els.length; i--;) {\n for (var j = attrLength; j--;) {\n els[i].removeAttribute(attrs[j]);\n }\n }\n}","export function arrayFromNodeList (nl) {\n var arr = [];\n for (var i = 0, l = nl.length; i < l; i++) {\n arr.push(nl[i]);\n }\n return arr;\n}","export function hideElement(el, forceHide) {\n if (el.style.display !== 'none') { el.style.display = 'none'; }\n}","export function showElement(el, forceHide) {\n if (el.style.display === 'none') { el.style.display = ''; }\n}","export function isVisible(el) {\n return window.getComputedStyle(el).display !== 'none';\n}","export function whichProperty(props){\n if (typeof props === 'string') {\n var arr = [props],\n Props = props.charAt(0).toUpperCase() + props.substr(1),\n prefixes = ['Webkit', 'Moz', 'ms', 'O'];\n \n prefixes.forEach(function(prefix) {\n if (prefix !== 'ms' || props === 'transform') {\n arr.push(prefix + Props);\n }\n });\n\n props = arr;\n }\n\n var el = document.createElement('fakeelement'),\n len = props.length;\n for(var i = 0; i < props.length; i++){\n var prop = props[i];\n if( el.style[prop] !== undefined ){ return prop; }\n }\n\n return false; // explicit for ie9-\n}\n","// get transitionend, animationend based on transitionDuration\n// @propin: string\n// @propOut: string, first-letter uppercase\n// Usage: getEndProperty('WebkitTransitionDuration', 'Transition') => webkitTransitionEnd\nexport function getEndProperty(propIn, propOut) {\n var endProp = false;\n if (/^Webkit/.test(propIn)) {\n endProp = 'webkit' + propOut + 'End';\n } else if (/^O/.test(propIn)) {\n endProp = 'o' + propOut + 'End';\n } else if (propIn) {\n endProp = propOut.toLowerCase() + 'end';\n }\n return endProp;\n}","// Test via a getter in the options object to see if the passive property is accessed\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n} catch (e) {}\nexport var passiveOption = supportsPassive ? { passive: true } : false;","import { passiveOption } from './passiveOption.js';\n\nexport function addEvents(el, obj, preventScrolling) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 && !preventScrolling ? passiveOption : false;\n el.addEventListener(prop, obj[prop], option);\n }\n}","import { passiveOption } from './passiveOption.js';\n\nexport function removeEvents(el, obj) {\n for (var prop in obj) {\n var option = ['touchstart', 'touchmove'].indexOf(prop) >= 0 ? passiveOption : false;\n el.removeEventListener(prop, obj[prop], option);\n }\n}","// NOTE Adjusted tiny-slider for Eucerin project\r\n//\r\n// 2019-03-07 Add `autoplayHoverPause` on controls and buttons\r\n// SEE line 1075 and 1085, look for `Eucerin addition`\r\n\r\n// helper functions\r\nif (!Object.keys) {\r\n Object.keys = function (object) {\r\n var keys = [];\r\n for (var name in object) {\r\n if (Object.prototype.hasOwnProperty.call(object, name)) {\r\n keys.push(name);\r\n }\r\n }\r\n return keys;\r\n };\r\n }\r\n if (!(\"remove\" in Element.prototype)) {\r\n Element.prototype.remove = function () {\r\n if (this.parentNode) {\r\n this.parentNode.removeChild(this);\r\n }\r\n };\r\n }\r\n // https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/\r\n export function forEachNodeList(arr, callback, scope) {\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n callback.call(scope, arr[i], i);\r\n }\r\n }\r\n // import './helpers/Object.keys';\r\n // import './helpers/childNode.remove';\r\n import { raf } from 'tiny-slider/src/helpers/raf.js';\r\n import { caf } from 'tiny-slider/src/helpers/caf.js';\r\n import { extend } from 'tiny-slider/src/helpers/extend.js';\r\n import { checkStorageValue } from 'tiny-slider/src/helpers/checkStorageValue.js';\r\n import { setLocalStorage } from 'tiny-slider/src/helpers/setLocalStorage.js';\r\n import { getSlideId } from 'tiny-slider/src/helpers/getSlideId.js';\r\n import { calc } from 'tiny-slider/src/helpers/calc.js';\r\n import { percentageLayout } from 'tiny-slider/src/helpers/percentageLayout.js';\r\n import { mediaquerySupport } from 'tiny-slider/src/helpers/mediaquerySupport.js';\r\n import { createStyleSheet } from 'tiny-slider/src/helpers/createStyleSheet.js';\r\n import { addCSSRule } from 'tiny-slider/src/helpers/addCSSRule.js';\r\n import { removeCSSRule } from 'tiny-slider/src/helpers/removeCSSRule.js';\r\n import { getCssRulesLength } from 'tiny-slider/src/helpers/getCssRulesLength.js';\r\n import { toDegree } from 'tiny-slider/src/helpers/toDegree.js';\r\n import { getTouchDirection } from 'tiny-slider/src/helpers/getTouchDirection.js';\r\n import { forEach } from 'tiny-slider/src/helpers/forEach.js';\r\n import { hasClass } from 'tiny-slider/src/helpers/hasClass.js';\r\n import { addClass } from 'tiny-slider/src/helpers/addClass.js';\r\n import { removeClass } from 'tiny-slider/src/helpers/removeClass.js';\r\n import { hasAttr } from 'tiny-slider/src/helpers/hasAttr.js';\r\n import { getAttr } from 'tiny-slider/src/helpers/getAttr.js';\r\n import { setAttrs } from 'tiny-slider/src/helpers/setAttrs.js';\r\n import { removeAttrs } from 'tiny-slider/src/helpers/removeAttrs.js';\r\n import { arrayFromNodeList } from 'tiny-slider/src/helpers/arrayFromNodeList.js';\r\n import { hideElement } from 'tiny-slider/src/helpers/hideElement.js';\r\n import { showElement } from 'tiny-slider/src/helpers/showElement.js';\r\n import { isVisible } from 'tiny-slider/src/helpers/isVisible.js';\r\n import { whichProperty } from 'tiny-slider/src/helpers/whichProperty.js';\r\n import { has3DTransforms } from 'tiny-slider/src/helpers/has3DTransforms.js';\r\n import { getEndProperty } from 'tiny-slider/src/helpers/getEndProperty.js';\r\n import { addEvents } from 'tiny-slider/src/helpers/addEvents.js';\r\n import { removeEvents } from 'tiny-slider/src/helpers/removeEvents.js';\r\n import { Events } from 'tiny-slider/src/helpers/events.js';\r\n import { jsTransform } from 'tiny-slider/src/helpers/jsTransform.js';\r\n \r\n export var tns = function (options) {\r\n options = extend({\r\n container: '.slider',\r\n mode: 'carousel',\r\n axis: 'horizontal',\r\n items: 1,\r\n gutter: 0,\r\n edgePadding: 0,\r\n fixedWidth: false,\r\n autoWidth: false,\r\n viewportMax: false,\r\n slideBy: 1,\r\n center: false,\r\n controls: true,\r\n controlsPosition: 'top',\r\n controlsText: ['prev', 'next'],\r\n controlsContainer: false,\r\n prevButton: false,\r\n nextButton: false,\r\n nav: true,\r\n navPosition: 'top',\r\n navContainer: false,\r\n navAsThumbnails: false,\r\n arrowKeys: false,\r\n speed: 300,\r\n autoplay: false,\r\n autoplayPosition: 'top',\r\n autoplayTimeout: 5000,\r\n autoplayDirection: 'forward',\r\n autoplayText: ['start', 'stop'],\r\n autoplayHoverPause: false,\r\n autoplayButton: false,\r\n autoplayButtonOutput: true,\r\n autoplayResetOnVisibility: true,\r\n /* NIVX addition */\r\n initSingleSlide: true,\r\n animateIn: 'tns-fadeIn',\r\n animateOut: 'tns-fadeOut',\r\n animateNormal: 'tns-normal',\r\n animateDelay: false,\r\n loop: true,\r\n rewind: false,\r\n autoHeight: false,\r\n responsive: false,\r\n lazyload: true,\r\n lazyloadSelector: '.tns-lazy-img',\r\n touch: true,\r\n mouseDrag: false,\r\n swipeAngle: 15,\r\n nested: false,\r\n preventActionWhenRunning: false,\r\n preventScrollOnTouch: false,\r\n freezable: true,\r\n onInit: false,\r\n useLocalStorage: true\r\n }, options || {});\r\n \r\n var doc = document,\r\n win = window,\r\n KEYS = {\r\n ENTER: 13,\r\n SPACE: 32,\r\n LEFT: 37,\r\n RIGHT: 39\r\n },\r\n tnsStorage = {},\r\n localStorageAccess = options.useLocalStorage;\r\n \r\n if (localStorageAccess) {\r\n // check browser version and local storage access\r\n var browserInfo = navigator.userAgent;\r\n var uid = new Date;\r\n \r\n try {\r\n tnsStorage = win.localStorage;\r\n if (tnsStorage) {\r\n tnsStorage.setItem(uid, uid);\r\n localStorageAccess = tnsStorage.getItem(uid) == uid;\r\n tnsStorage.removeItem(uid);\r\n } else {\r\n localStorageAccess = false;\r\n }\r\n if (!localStorageAccess) { tnsStorage = {}; }\r\n } catch (e) {\r\n localStorageAccess = false;\r\n }\r\n \r\n if (localStorageAccess) {\r\n // remove storage when browser version changes\r\n if (tnsStorage['tnsApp'] && tnsStorage['tnsApp'] !== browserInfo) {\r\n ['tC', 'tPL', 'tMQ', 'tTf', 't3D', 'tTDu', 'tTDe', 'tADu', 'tADe', 'tTE', 'tAE'].forEach(function (item) { tnsStorage.removeItem(item); });\r\n }\r\n // update browserInfo\r\n localStorage['tnsApp'] = browserInfo;\r\n }\r\n }\r\n \r\n var CALC = tnsStorage['tC'] ? checkStorageValue(tnsStorage['tC']) : setLocalStorage(tnsStorage, 'tC', calc(), localStorageAccess),\r\n PERCENTAGELAYOUT = tnsStorage['tPL'] ? checkStorageValue(tnsStorage['tPL']) : setLocalStorage(tnsStorage, 'tPL', percentageLayout(), localStorageAccess),\r\n CSSMQ = tnsStorage['tMQ'] ? checkStorageValue(tnsStorage['tMQ']) : setLocalStorage(tnsStorage, 'tMQ', mediaquerySupport(), localStorageAccess),\r\n TRANSFORM = tnsStorage['tTf'] ? checkStorageValue(tnsStorage['tTf']) : setLocalStorage(tnsStorage, 'tTf', whichProperty('transform'), localStorageAccess),\r\n HAS3DTRANSFORMS = tnsStorage['t3D'] ? checkStorageValue(tnsStorage['t3D']) : setLocalStorage(tnsStorage, 't3D', has3DTransforms(TRANSFORM), localStorageAccess),\r\n TRANSITIONDURATION = tnsStorage['tTDu'] ? checkStorageValue(tnsStorage['tTDu']) : setLocalStorage(tnsStorage, 'tTDu', whichProperty('transitionDuration'), localStorageAccess),\r\n TRANSITIONDELAY = tnsStorage['tTDe'] ? checkStorageValue(tnsStorage['tTDe']) : setLocalStorage(tnsStorage, 'tTDe', whichProperty('transitionDelay'), localStorageAccess),\r\n ANIMATIONDURATION = tnsStorage['tADu'] ? checkStorageValue(tnsStorage['tADu']) : setLocalStorage(tnsStorage, 'tADu', whichProperty('animationDuration'), localStorageAccess),\r\n ANIMATIONDELAY = tnsStorage['tADe'] ? checkStorageValue(tnsStorage['tADe']) : setLocalStorage(tnsStorage, 'tADe', whichProperty('animationDelay'), localStorageAccess),\r\n TRANSITIONEND = tnsStorage['tTE'] ? checkStorageValue(tnsStorage['tTE']) : setLocalStorage(tnsStorage, 'tTE', getEndProperty(TRANSITIONDURATION, 'Transition'), localStorageAccess),\r\n ANIMATIONEND = tnsStorage['tAE'] ? checkStorageValue(tnsStorage['tAE']) : setLocalStorage(tnsStorage, 'tAE', getEndProperty(ANIMATIONDURATION, 'Animation'), localStorageAccess);\r\n \r\n // get element nodes from selectors\r\n var supportConsoleWarn = win.console && typeof win.console.warn === \"function\",\r\n tnsList = ['container', 'controlsContainer', 'prevButton', 'nextButton', 'navContainer', 'autoplayButton'],\r\n optionsElements = {};\r\n \r\n tnsList.forEach(function (item) {\r\n if (typeof options[item] === 'string') {\r\n var str = options[item],\r\n el = doc.querySelector(str);\r\n optionsElements[item] = str;\r\n \r\n if (el && el.nodeName) {\r\n options[item] = el;\r\n } else {\r\n if (supportConsoleWarn) { console.warn('Can\\'t find', options[item]); }\r\n return;\r\n }\r\n }\r\n });\r\n \r\n // make sure at least 1 slide\r\n if (options.container.children.length < 1) {\r\n if (supportConsoleWarn) { console.warn('No slides found in', options.container); }\r\n return;\r\n }\r\n \r\n // update options\r\n var responsive = options.responsive,\r\n nested = options.nested,\r\n carousel = options.mode === 'carousel' ? true : false;\r\n \r\n if (responsive) {\r\n // apply responsive[0] to options and remove it\r\n if (0 in responsive) {\r\n options = extend(options, responsive[0]);\r\n delete responsive[0];\r\n }\r\n \r\n var responsiveTem = {};\r\n for (var key in responsive) {\r\n var val = responsive[key];\r\n // update responsive\r\n // from: 300: 2\r\n // to: \r\n // 300: { \r\n // items: 2 \r\n // } \r\n val = typeof val === 'number' ? { items: val } : val;\r\n responsiveTem[key] = val;\r\n }\r\n responsive = responsiveTem;\r\n responsiveTem = null;\r\n }\r\n \r\n // update options\r\n function updateOptions(obj) {\r\n for (var key in obj) {\r\n if (!carousel) {\r\n if (key === 'slideBy') { obj[key] = 'page'; }\r\n if (key === 'edgePadding') { obj[key] = false; }\r\n if (key === 'autoHeight') { obj[key] = false; }\r\n }\r\n \r\n // update responsive options\r\n if (key === 'responsive') { updateOptions(obj[key]); }\r\n }\r\n }\r\n if (!carousel) { updateOptions(options); }\r\n \r\n \r\n // === define and set variables ===\r\n if (!carousel) {\r\n options.axis = 'horizontal';\r\n options.slideBy = 'page';\r\n options.edgePadding = false;\r\n \r\n var animateIn = options.animateIn,\r\n animateOut = options.animateOut,\r\n animateDelay = options.animateDelay,\r\n animateNormal = options.animateNormal;\r\n }\r\n \r\n var horizontal = options.axis === 'horizontal' ? true : false,\r\n outerWrapper = doc.createElement('div'),\r\n innerWrapper = doc.createElement('div'),\r\n middleWrapper,\r\n container = options.container,\r\n containerParent = container.parentNode,\r\n containerHTML = container.outerHTML,\r\n slideItems = container.children,\r\n slideCount = slideItems.length,\r\n breakpointZone,\r\n windowWidth = getWindowWidth(),\r\n isOn = false;\r\n if (responsive) { setBreakpointZone(); }\r\n if (carousel) { container.className += ' tns-vpfix'; }\r\n \r\n // fixedWidth: viewport > rightBoundary > indexMax\r\n var autoWidth = options.autoWidth,\r\n fixedWidth = getOption('fixedWidth'),\r\n edgePadding = getOption('edgePadding'),\r\n gutter = getOption('gutter'),\r\n viewport = getViewportWidth(),\r\n center = getOption('center'),\r\n items = !autoWidth ? Math.floor(getOption('items')) : 1,\r\n slideBy = getOption('slideBy'),\r\n viewportMax = options.viewportMax || options.fixedWidthViewportWidth,\r\n arrowKeys = getOption('arrowKeys'),\r\n speed = getOption('speed'),\r\n rewind = options.rewind,\r\n loop = rewind ? false : options.loop,\r\n autoHeight = getOption('autoHeight'),\r\n controls = getOption('controls'),\r\n controlsText = getOption('controlsText'),\r\n nav = getOption('nav'),\r\n touch = getOption('touch'),\r\n mouseDrag = getOption('mouseDrag'),\r\n autoplay = getOption('autoplay'),\r\n autoplayTimeout = getOption('autoplayTimeout'),\r\n autoplayText = getOption('autoplayText'),\r\n autoplayHoverPause = getOption('autoplayHoverPause'),\r\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility'),\r\n initSingleSlide = getOption('initSingleSlide'),\r\n sheet = createStyleSheet(),\r\n lazyload = options.lazyload,\r\n lazyloadSelector = options.lazyloadSelector,\r\n slidePositions, // collection of slide positions\r\n slideItemsOut = [],\r\n cloneCount = loop ? getCloneCountForLoop() : 0,\r\n slideCountNew = !carousel ? slideCount + cloneCount : slideCount + cloneCount * 2,\r\n hasRightDeadZone = (fixedWidth || autoWidth) && !loop ? true : false,\r\n rightBoundary = fixedWidth ? getRightBoundary() : null,\r\n updateIndexBeforeTransform = (!carousel || !loop) ? true : false,\r\n // transform\r\n transformAttr = horizontal ? 'left' : 'top',\r\n transformPrefix = '',\r\n transformPostfix = '',\r\n // index\r\n getIndexMax = (function () {\r\n if (fixedWidth) {\r\n return function () { return center && !loop ? slideCount - 1 : Math.ceil(- rightBoundary / (fixedWidth + gutter)); };\r\n } else if (autoWidth) {\r\n return function () {\r\n for (var i = slideCountNew; i--;) {\r\n if (slidePositions[i] >= - rightBoundary) { return i; }\r\n }\r\n };\r\n } else {\r\n return function () {\r\n if (center && carousel && !loop) {\r\n return slideCount - 1;\r\n } else {\r\n return loop || carousel ? Math.max(0, slideCountNew - Math.ceil(items)) : slideCountNew - 1;\r\n }\r\n };\r\n }\r\n })(),\r\n index = getStartIndex(getOption('startIndex')),\r\n indexCached = index,\r\n displayIndex = getCurrentSlide(),\r\n indexMin = 0,\r\n indexMax = !autoWidth ? getIndexMax() : null,\r\n // resize\r\n resizeTimer,\r\n preventActionWhenRunning = options.preventActionWhenRunning,\r\n swipeAngle = options.swipeAngle,\r\n moveDirectionExpected = swipeAngle ? '?' : true,\r\n running = false,\r\n onInit = options.onInit,\r\n events = new Events(),\r\n // id, class\r\n newContainerClasses = ' tns-slider tns-' + options.mode,\r\n slideId = container.id || getSlideId(),\r\n disable = getOption('disable'),\r\n disabled = false,\r\n freezable = options.freezable,\r\n freeze = freezable && !autoWidth ? getFreeze() : false,\r\n frozen = false,\r\n controlsEvents = {\r\n 'click': onControlsClick,\r\n 'keydown': onControlsKeydown\r\n },\r\n navEvents = {\r\n 'click': onNavClick,\r\n 'keydown': onNavKeydown\r\n },\r\n hoverEvents = {\r\n 'mouseover': mouseoverPause,\r\n 'mouseout': mouseoutRestart\r\n },\r\n visibilityEvent = { 'visibilitychange': onVisibilityChange },\r\n docmentKeydownEvent = { 'keydown': onDocumentKeydown },\r\n touchEvents = {\r\n 'touchstart': onPanStart,\r\n 'touchmove': onPanMove,\r\n 'touchend': onPanEnd,\r\n 'touchcancel': onPanEnd\r\n }, dragEvents = {\r\n 'mousedown': onPanStart,\r\n 'mousemove': onPanMove,\r\n 'mouseup': onPanEnd,\r\n 'mouseleave': onPanEnd\r\n },\r\n hasControls = hasOption('controls'),\r\n hasNav = hasOption('nav'),\r\n navAsThumbnails = autoWidth ? true : options.navAsThumbnails,\r\n hasAutoplay = hasOption('autoplay'),\r\n hasTouch = hasOption('touch'),\r\n hasMouseDrag = hasOption('mouseDrag'),\r\n slideActiveClass = 'tns-slide-active',\r\n imgCompleteClass = 'tns-complete',\r\n imgEvents = {\r\n 'load': onImgLoaded,\r\n 'error': onImgFailed\r\n },\r\n imgsComplete,\r\n liveregionCurrent,\r\n preventScroll = options.preventScrollOnTouch === 'force' ? true : false;\r\n \r\n // controls\r\n if (hasControls) {\r\n var controlsContainer = options.controlsContainer,\r\n controlsContainerHTML = options.controlsContainer ? options.controlsContainer.outerHTML : '',\r\n prevButton = options.prevButton,\r\n nextButton = options.nextButton,\r\n prevButtonHTML = options.prevButton ? options.prevButton.outerHTML : '',\r\n nextButtonHTML = options.nextButton ? options.nextButton.outerHTML : '',\r\n prevIsButton,\r\n nextIsButton;\r\n }\r\n \r\n // nav\r\n if (hasNav) {\r\n var navContainer = options.navContainer,\r\n navContainerHTML = options.navContainer ? options.navContainer.outerHTML : '',\r\n navItems,\r\n pages = autoWidth ? slideCount : getPages(),\r\n pagesCached = 0,\r\n navClicked = -1,\r\n navCurrentIndex = getCurrentNavIndex(),\r\n navCurrentIndexCached = navCurrentIndex,\r\n navActiveClass = 'tns-nav-active',\r\n navStr = 'Carousel Page ',\r\n navStrCurrent = ' (Current Slide)';\r\n }\r\n \r\n // autoplay\r\n if (hasAutoplay) {\r\n var autoplayDirection = options.autoplayDirection === 'forward' ? 1 : -1,\r\n autoplayButton = options.autoplayButton,\r\n autoplayButtonHTML = options.autoplayButton ? options.autoplayButton.outerHTML : '',\r\n autoplayHtmlStrings = ['', ' animation'],\r\n autoplayTimer,\r\n animating,\r\n autoplayHoverPaused,\r\n autoplayUserPaused,\r\n autoplayVisibilityPaused;\r\n }\r\n \r\n if (hasTouch || hasMouseDrag) {\r\n var initPosition = {},\r\n lastPosition = {},\r\n translateInit,\r\n disX,\r\n disY,\r\n panStart = false,\r\n rafIndex,\r\n getDist = horizontal ?\r\n function (a, b) { return a.x - b.x; } :\r\n function (a, b) { return a.y - b.y; };\r\n }\r\n \r\n // disable slider when slidecount <= items\r\n if (!autoWidth) { resetVariblesWhenDisable(disable || freeze); }\r\n \r\n if (TRANSFORM) {\r\n transformAttr = TRANSFORM;\r\n transformPrefix = 'translate';\r\n \r\n if (HAS3DTRANSFORMS) {\r\n transformPrefix += horizontal ? '3d(' : '3d(0px, ';\r\n transformPostfix = horizontal ? ', 0px, 0px)' : ', 0px)';\r\n } else {\r\n transformPrefix += horizontal ? 'X(' : 'Y(';\r\n transformPostfix = ')';\r\n }\r\n \r\n }\r\n \r\n if (carousel) { container.className = container.className.replace('tns-vpfix', ''); }\r\n initStructure();\r\n initSheet();\r\n initSliderTransform();\r\n \r\n // === COMMON FUNCTIONS === //\r\n function resetVariblesWhenDisable(condition) {\r\n if (condition) {\r\n controls = nav = touch = mouseDrag = arrowKeys = autoplay = autoplayHoverPause = autoplayResetOnVisibility = false;\r\n }\r\n }\r\n \r\n function getCurrentSlide() {\r\n var tem = carousel ? index - cloneCount : index;\r\n while (tem < 0) { tem += slideCount; }\r\n return tem % slideCount + 1;\r\n }\r\n \r\n function getStartIndex(ind) {\r\n ind = ind ? Math.max(0, Math.min(loop ? slideCount - 1 : slideCount - items, ind)) : 0;\r\n return carousel ? ind + cloneCount : ind;\r\n }\r\n \r\n function getAbsIndex(i) {\r\n if (i == null) { i = index; }\r\n \r\n if (carousel) { i -= cloneCount; }\r\n while (i < 0) { i += slideCount; }\r\n \r\n return Math.floor(i % slideCount);\r\n }\r\n \r\n function getCurrentNavIndex() {\r\n var absIndex = getAbsIndex(),\r\n result;\r\n \r\n result = navAsThumbnails ? absIndex :\r\n fixedWidth || autoWidth ? Math.ceil((absIndex + 1) * pages / slideCount - 1) :\r\n Math.floor(absIndex / items);\r\n \r\n // set active nav to the last one when reaches the right edge\r\n if (!loop && carousel && index === indexMax) { result = pages - 1; }\r\n \r\n return result;\r\n }\r\n \r\n function getItemsMax() {\r\n // fixedWidth or autoWidth while viewportMax is not available\r\n if (autoWidth || (fixedWidth && !viewportMax)) {\r\n return slideCount - 1;\r\n // most cases\r\n } else {\r\n var str = fixedWidth ? 'fixedWidth' : 'items',\r\n arr = [];\r\n \r\n if (fixedWidth || options[str] < slideCount) { arr.push(options[str]); }\r\n \r\n if (responsive) {\r\n for (var bp in responsive) {\r\n var tem = responsive[bp][str];\r\n if (tem && (fixedWidth || tem < slideCount)) { arr.push(tem); }\r\n }\r\n }\r\n \r\n if (!arr.length) { arr.push(0); }\r\n \r\n return Math.ceil(fixedWidth ? viewportMax / Math.min.apply(null, arr) : Math.max.apply(null, arr));\r\n }\r\n }\r\n \r\n function getCloneCountForLoop() {\r\n var itemsMax = getItemsMax(),\r\n result = carousel ? Math.ceil((itemsMax * 5 - slideCount) / 2) : (itemsMax * 4 - slideCount);\r\n result = Math.max(itemsMax, result);\r\n \r\n return hasOption('edgePadding') ? result + 1 : result;\r\n }\r\n \r\n function getWindowWidth() {\r\n return win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;\r\n }\r\n \r\n function getInsertPosition(pos) {\r\n return pos === 'top' ? 'afterbegin' : 'beforeend';\r\n }\r\n \r\n function getClientWidth(el) {\r\n var div = doc.createElement('div'), rect, width;\r\n el.appendChild(div);\r\n rect = div.getBoundingClientRect();\r\n width = rect.right - rect.left;\r\n div.remove();\r\n return width || getClientWidth(el.parentNode);\r\n }\r\n \r\n function getViewportWidth() {\r\n var gap = edgePadding ? edgePadding * 2 - gutter : 0;\r\n return getClientWidth(containerParent) - gap;\r\n }\r\n \r\n function hasOption(item) {\r\n if (options[item]) {\r\n return true;\r\n } else {\r\n if (responsive) {\r\n for (var bp in responsive) {\r\n if (responsive[bp][item]) { return true; }\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n \r\n // get option:\r\n // fixed width: viewport, fixedWidth, gutter => items\r\n // others: window width => all variables\r\n // all: items => slideBy\r\n function getOption(item, ww) {\r\n if (ww == null) { ww = windowWidth; }\r\n \r\n if (item === 'items' && fixedWidth) {\r\n return Math.floor((viewport + gutter) / (fixedWidth + gutter)) || 1;\r\n \r\n } else {\r\n var result = options[item];\r\n \r\n if (responsive) {\r\n for (var bp in responsive) {\r\n // bp: convert string to number\r\n if (ww >= parseInt(bp)) {\r\n if (item in responsive[bp]) { result = responsive[bp][item]; }\r\n }\r\n }\r\n }\r\n \r\n if (item === 'slideBy' && result === 'page') { result = getOption('items'); }\r\n if (!carousel && (item === 'slideBy' || item === 'items')) { result = Math.floor(result); }\r\n \r\n return result;\r\n }\r\n }\r\n \r\n function getSlideMarginLeft(i) {\r\n return CALC ?\r\n CALC + '(' + i * 100 + '% / ' + slideCountNew + ')' :\r\n i * 100 / slideCountNew + '%';\r\n }\r\n \r\n function getInnerWrapperStyles(edgePaddingTem, gutterTem, fixedWidthTem, speedTem, autoHeightBP) {\r\n var str = '';\r\n \r\n if (edgePaddingTem !== undefined) {\r\n var gap = edgePaddingTem;\r\n if (gutterTem) { gap -= gutterTem; }\r\n str = horizontal ?\r\n 'margin: 0 ' + gap + 'px 0 ' + edgePaddingTem + 'px;' :\r\n 'margin: ' + edgePaddingTem + 'px 0 ' + gap + 'px 0;';\r\n } else if (gutterTem && !fixedWidthTem) {\r\n var gutterTemUnit = '-' + gutterTem + 'px',\r\n dir = horizontal ? gutterTemUnit + ' 0 0' : '0 ' + gutterTemUnit + ' 0';\r\n str = 'margin: 0 ' + dir + ';'\r\n }\r\n \r\n if (!carousel && autoHeightBP && TRANSITIONDURATION && speedTem) { str += getTransitionDurationStyle(speedTem); }\r\n return str;\r\n }\r\n \r\n function getContainerWidth(fixedWidthTem, gutterTem, itemsTem) {\r\n if (fixedWidthTem) {\r\n return (fixedWidthTem + gutterTem) * slideCountNew + 'px';\r\n } else {\r\n return CALC ?\r\n CALC + '(' + slideCountNew * 100 + '% / ' + itemsTem + ')' :\r\n slideCountNew * 100 / itemsTem + '%';\r\n }\r\n }\r\n \r\n function getSlideWidthStyle(fixedWidthTem, gutterTem, itemsTem) {\r\n var width;\r\n \r\n if (fixedWidthTem) {\r\n width = (fixedWidthTem + gutterTem) + 'px';\r\n } else {\r\n if (!carousel) { itemsTem = Math.floor(itemsTem); }\r\n var dividend = carousel ? slideCountNew : itemsTem;\r\n width = CALC ?\r\n CALC + '(100% / ' + dividend + ')' :\r\n 100 / dividend + '%';\r\n }\r\n \r\n width = 'width:' + width;\r\n \r\n // inner slider: overwrite outer slider styles\r\n return nested !== 'inner' ? width + ';' : width + ' !important;';\r\n }\r\n \r\n function getSlideGutterStyle(gutterTem) {\r\n var str = '';\r\n \r\n // gutter maybe interger || 0\r\n // so can't use 'if (gutter)'\r\n if (gutterTem !== false) {\r\n var prop = horizontal ? 'padding-' : 'margin-',\r\n dir = horizontal ? 'right' : 'bottom';\r\n str = prop + dir + ': ' + gutterTem + 'px;';\r\n }\r\n \r\n return str;\r\n }\r\n \r\n function getCSSPrefix(name, num) {\r\n var prefix = name.substring(0, name.length - num).toLowerCase();\r\n if (prefix) { prefix = '-' + prefix + '-'; }\r\n \r\n return prefix;\r\n }\r\n \r\n function getTransitionDurationStyle(speed) {\r\n return getCSSPrefix(TRANSITIONDURATION, 18) + 'transition-duration:' + speed / 1000 + 's;';\r\n }\r\n \r\n function getAnimationDurationStyle(speed) {\r\n return getCSSPrefix(ANIMATIONDURATION, 17) + 'animation-duration:' + speed / 1000 + 's;';\r\n }\r\n \r\n function initStructure() {\r\n var classOuter = 'tns-outer',\r\n classInner = 'tns-inner',\r\n hasGutter = hasOption('gutter');\r\n \r\n /* NIVX addition */\r\n if (!hasOption('initSingleSlide') && slideCount <= 1) {\r\n return;\r\n }\r\n \r\n outerWrapper.className = classOuter;\r\n innerWrapper.className = classInner;\r\n outerWrapper.id = slideId + '-ow';\r\n innerWrapper.id = slideId + '-iw';\r\n \r\n // set container properties\r\n if (container.id === '') { container.id = slideId; }\r\n newContainerClasses += PERCENTAGELAYOUT || autoWidth ? ' tns-subpixel' : ' tns-no-subpixel';\r\n newContainerClasses += CALC ? ' tns-calc' : ' tns-no-calc';\r\n if (autoWidth) { newContainerClasses += ' tns-autowidth'; }\r\n newContainerClasses += ' tns-' + options.axis;\r\n container.className += newContainerClasses;\r\n \r\n // add constrain layer for carousel\r\n if (carousel) {\r\n middleWrapper = doc.createElement('div');\r\n middleWrapper.id = slideId + '-mw';\r\n middleWrapper.className = 'tns-ovh';\r\n \r\n outerWrapper.appendChild(middleWrapper);\r\n middleWrapper.appendChild(innerWrapper);\r\n } else {\r\n outerWrapper.appendChild(innerWrapper);\r\n }\r\n \r\n if (autoHeight) {\r\n var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n wp.className += ' tns-ah';\r\n }\r\n \r\n containerParent.insertBefore(outerWrapper, container);\r\n innerWrapper.appendChild(container);\r\n \r\n // add id, class, aria attributes \r\n // before clone slides\r\n forEach(slideItems, function (item, i) {\r\n addClass(item, 'tns-item');\r\n if (!item.id) { item.id = slideId + '-item' + i; }\r\n if (!carousel && animateNormal) { addClass(item, animateNormal); }\r\n setAttrs(item, {\r\n 'aria-hidden': 'true',\r\n 'tabindex': '-1'\r\n });\r\n });\r\n \r\n // ## clone slides\r\n // carousel: n + slides + n\r\n // gallery: slides + n\r\n if (cloneCount) {\r\n var fragmentBefore = doc.createDocumentFragment(),\r\n fragmentAfter = doc.createDocumentFragment();\r\n \r\n for (var j = cloneCount; j--;) {\r\n var num = j % slideCount,\r\n cloneFirst = slideItems[num].cloneNode(true);\r\n removeAttrs(cloneFirst, 'id');\r\n fragmentAfter.insertBefore(cloneFirst, fragmentAfter.firstChild);\r\n \r\n if (carousel) {\r\n var cloneLast = slideItems[slideCount - 1 - num].cloneNode(true);\r\n removeAttrs(cloneLast, 'id');\r\n fragmentBefore.appendChild(cloneLast);\r\n }\r\n }\r\n \r\n container.insertBefore(fragmentBefore, container.firstChild);\r\n container.appendChild(fragmentAfter);\r\n slideItems = container.children;\r\n }\r\n \r\n }\r\n \r\n function initSliderTransform() {\r\n // ## images loaded/failed\r\n if (hasOption('autoHeight') || autoWidth || !horizontal) {\r\n var imgs = container.querySelectorAll('img');\r\n \r\n // add complete class if all images are loaded/failed\r\n forEach(imgs, function (img) {\r\n var src = img.src;\r\n \r\n if (src && src.indexOf('data:image') < 0) {\r\n addEvents(img, imgEvents);\r\n img.src = '';\r\n img.src = src;\r\n addClass(img, 'loading');\r\n } else if (!lazyload) {\r\n imgLoaded(img);\r\n }\r\n });\r\n \r\n // All imgs are completed\r\n raf(function () { imgsLoadedCheck(arrayFromNodeList(imgs), function () { imgsComplete = true; }); });\r\n \r\n // Check imgs in window only for auto height\r\n if (!autoWidth && horizontal) { imgs = getImageArray(index, Math.min(index + items - 1, slideCountNew - 1)); }\r\n \r\n lazyload ? initSliderTransformStyleCheck() : raf(function () { imgsLoadedCheck(arrayFromNodeList(imgs), initSliderTransformStyleCheck); });\r\n \r\n } else {\r\n // set container transform property\r\n if (carousel) { doContainerTransformSilent(); }\r\n \r\n // update slider tools and events\r\n initTools();\r\n initEvents();\r\n }\r\n }\r\n \r\n function initSliderTransformStyleCheck() {\r\n if (autoWidth) {\r\n // check styles application\r\n var num = loop ? index : slideCount - 1;\r\n (function stylesApplicationCheck() {\r\n slideItems[num - 1].getBoundingClientRect().right.toFixed(2) === slideItems[num].getBoundingClientRect().left.toFixed(2) ?\r\n initSliderTransformCore() :\r\n setTimeout(function () { stylesApplicationCheck() }, 16);\r\n })();\r\n } else {\r\n initSliderTransformCore();\r\n }\r\n }\r\n \r\n \r\n function initSliderTransformCore() {\r\n // run Fn()s which are rely on image loading\r\n if (!horizontal || autoWidth) {\r\n setSlidePositions();\r\n \r\n if (autoWidth) {\r\n rightBoundary = getRightBoundary();\r\n if (freezable) { freeze = getFreeze(); }\r\n indexMax = getIndexMax(); // <= slidePositions, rightBoundary <=\r\n resetVariblesWhenDisable(disable || freeze);\r\n } else {\r\n updateContentWrapperHeight();\r\n }\r\n }\r\n \r\n // set container transform property\r\n if (carousel) { doContainerTransformSilent(); }\r\n \r\n // update slider tools and events\r\n initTools();\r\n initEvents();\r\n }\r\n \r\n function initSheet() {\r\n // gallery:\r\n // set animation classes and left value for gallery slider\r\n if (!carousel) {\r\n for (var i = index, l = index + Math.min(slideCount, items); i < l; i++) {\r\n var item = slideItems[i];\r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n }\r\n }\r\n \r\n // #### LAYOUT\r\n \r\n // ## INLINE-BLOCK VS FLOAT\r\n \r\n // ## PercentageLayout:\r\n // slides: inline-block\r\n // remove blank space between slides by set font-size: 0\r\n \r\n // ## Non PercentageLayout:\r\n // slides: float\r\n // margin-right: -100%\r\n // margin-left: ~\r\n \r\n // Resource: https://docs.google.com/spreadsheets/d/147up245wwTXeQYve3BRSAD4oVcvQmuGsFteJOeA5xNQ/edit?usp=sharing\r\n if (horizontal) {\r\n if (PERCENTAGELAYOUT || autoWidth) {\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', 'font-size:' + win.getComputedStyle(slideItems[0]).fontSize + ';', getCssRulesLength(sheet));\r\n addCSSRule(sheet, '#' + slideId, 'font-size:0;', getCssRulesLength(sheet));\r\n } else if (carousel) {\r\n forEach(slideItems, function (slide, i) {\r\n // slide.style.marginLeft = getSlideMarginLeft(i);\r\n if (document.dir == 'rtl') {\r\n slide.style.marginRight = getSlideMarginLeft(i);\r\n } else {\r\n slide.style.marginLeft = getSlideMarginLeft(i);\r\n }\r\n });\r\n }\r\n }\r\n \r\n \r\n // ## BASIC STYLES\r\n if (CSSMQ) {\r\n // middle wrapper style\r\n if (TRANSITIONDURATION) {\r\n var str = middleWrapper && options.autoHeight ? getTransitionDurationStyle(options.speed) : '';\r\n addCSSRule(sheet, '#' + slideId + '-mw', str, getCssRulesLength(sheet));\r\n }\r\n \r\n // inner wrapper styles\r\n str = getInnerWrapperStyles(options.edgePadding, options.gutter, options.fixedWidth, options.speed, options.autoHeight);\r\n addCSSRule(sheet, '#' + slideId + '-iw', str, getCssRulesLength(sheet));\r\n \r\n // container styles\r\n if (carousel) {\r\n str = horizontal && !autoWidth ? 'width:' + getContainerWidth(options.fixedWidth, options.gutter, options.items) + ';' : '';\r\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\r\n addCSSRule(sheet, '#' + slideId, str, getCssRulesLength(sheet));\r\n }\r\n \r\n // slide styles\r\n str = horizontal && !autoWidth ? getSlideWidthStyle(options.fixedWidth, options.gutter, options.items) : '';\r\n if (options.gutter) { str += getSlideGutterStyle(options.gutter); }\r\n // set gallery items transition-duration\r\n if (!carousel) {\r\n if (TRANSITIONDURATION) { str += getTransitionDurationStyle(speed); }\r\n if (ANIMATIONDURATION) { str += getAnimationDurationStyle(speed); }\r\n }\r\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\r\n \r\n // non CSS mediaqueries: IE8\r\n // ## update inner wrapper, container, slides if needed\r\n // set inline styles for inner wrapper & container\r\n // insert stylesheet (one line) for slides only (since slides are many)\r\n } else {\r\n // middle wrapper styles\r\n update_carousel_transition_duration();\r\n \r\n // inner wrapper styles\r\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, autoHeight);\r\n \r\n // container styles\r\n if (carousel && horizontal && !autoWidth) {\r\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n }\r\n \r\n // slide styles\r\n var str = horizontal && !autoWidth ? getSlideWidthStyle(fixedWidth, gutter, items) : '';\r\n if (gutter) { str += getSlideGutterStyle(gutter); }\r\n \r\n // append to the last line\r\n if (str) { addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet)); }\r\n }\r\n \r\n // ## MEDIAQUERIES\r\n if (responsive && CSSMQ) {\r\n for (var bp in responsive) {\r\n // bp: convert string to number\r\n bp = parseInt(bp);\r\n \r\n var opts = responsive[bp],\r\n str = '',\r\n middleWrapperStr = '',\r\n innerWrapperStr = '',\r\n containerStr = '',\r\n slideStr = '',\r\n itemsBP = !autoWidth ? getOption('items', bp) : null,\r\n fixedWidthBP = getOption('fixedWidth', bp),\r\n speedBP = getOption('speed', bp),\r\n edgePaddingBP = getOption('edgePadding', bp),\r\n autoHeightBP = getOption('autoHeight', bp),\r\n gutterBP = getOption('gutter', bp);\r\n \r\n // middle wrapper string\r\n if (TRANSITIONDURATION && middleWrapper && getOption('autoHeight', bp) && 'speed' in opts) {\r\n middleWrapperStr = '#' + slideId + '-mw{' + getTransitionDurationStyle(speedBP) + '}';\r\n }\r\n \r\n // inner wrapper string\r\n if ('edgePadding' in opts || 'gutter' in opts) {\r\n innerWrapperStr = '#' + slideId + '-iw{' + getInnerWrapperStyles(edgePaddingBP, gutterBP, fixedWidthBP, speedBP, autoHeightBP) + '}';\r\n }\r\n \r\n // container string\r\n if (carousel && horizontal && !autoWidth && ('fixedWidth' in opts || 'items' in opts || (fixedWidth && 'gutter' in opts))) {\r\n containerStr = 'width:' + getContainerWidth(fixedWidthBP, gutterBP, itemsBP) + ';';\r\n }\r\n if (TRANSITIONDURATION && 'speed' in opts) {\r\n containerStr += getTransitionDurationStyle(speedBP);\r\n }\r\n if (containerStr) {\r\n containerStr = '#' + slideId + '{' + containerStr + '}';\r\n }\r\n \r\n // slide string\r\n if ('fixedWidth' in opts || (fixedWidth && 'gutter' in opts) || !carousel && 'items' in opts) {\r\n slideStr += getSlideWidthStyle(fixedWidthBP, gutterBP, itemsBP);\r\n }\r\n if ('gutter' in opts) {\r\n slideStr += getSlideGutterStyle(gutterBP);\r\n }\r\n // set gallery items transition-duration\r\n if (!carousel && 'speed' in opts) {\r\n if (TRANSITIONDURATION) { slideStr += getTransitionDurationStyle(speedBP); }\r\n if (ANIMATIONDURATION) { slideStr += getAnimationDurationStyle(speedBP); }\r\n }\r\n if (slideStr) { slideStr = '#' + slideId + ' > .tns-item{' + slideStr + '}'; }\r\n \r\n // add up\r\n str = middleWrapperStr + innerWrapperStr + containerStr + slideStr;\r\n \r\n if (str) {\r\n sheet.insertRule('@media (min-width: ' + bp / 16 + 'em) {' + str + '}', sheet.cssRules.length);\r\n }\r\n }\r\n }\r\n }\r\n \r\n function initTools() {\r\n // == slides ==\r\n updateSlideStatus();\r\n \r\n // == live region ==\r\n outerWrapper.insertAdjacentHTML('afterbegin', '
slide ' + getLiveRegionStr() + ' of ' + slideCount + '
');\r\n liveregionCurrent = outerWrapper.querySelector('.tns-liveregion .current');\r\n \r\n // == autoplayInit ==\r\n if (hasAutoplay) {\r\n var txt = autoplay ? 'stop' : 'start';\r\n if (autoplayButton) {\r\n setAttrs(autoplayButton, { 'data-action': txt });\r\n } else if (options.autoplayButtonOutput) {\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.autoplayPosition), '');\r\n autoplayButton = outerWrapper.querySelector('[data-action]');\r\n }\r\n \r\n // add event\r\n if (autoplayButton) {\r\n addEvents(autoplayButton, { 'click': toggleAutoplay });\r\n }\r\n \r\n if (autoplay) {\r\n startAutoplay();\r\n if (autoplayHoverPause) { addEvents(container, hoverEvents); }\r\n if (autoplayResetOnVisibility) { addEvents(container, visibilityEvent); }\r\n }\r\n }\r\n \r\n // == navInit ==\r\n if (hasNav) {\r\n var initIndex = !carousel ? 0 : cloneCount;\r\n // customized nav\r\n // will not hide the navs in case they're thumbnails\r\n if (navContainer) {\r\n setAttrs(navContainer, { 'aria-label': 'Carousel Pagination' });\r\n navItems = navContainer.children;\r\n forEach(navItems, function (item, i) {\r\n setAttrs(item, {\r\n 'data-nav': i,\r\n 'tabindex': '-1',\r\n 'aria-label': navStr + (i + 1),\r\n 'aria-controls': slideId,\r\n });\r\n });\r\n \r\n // generated nav \r\n } else {\r\n var navHtml = '',\r\n hiddenStr = navAsThumbnails ? '' : 'style=\"display:none\"';\r\n for (var i = 0; i < slideCount; i++) {\r\n // hide nav items by default\r\n navHtml += '';\r\n }\r\n navHtml = '
' + navHtml + '
';\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.navPosition), navHtml);\r\n \r\n navContainer = outerWrapper.querySelector('.tns-nav');\r\n navItems = navContainer.children;\r\n }\r\n \r\n updateNavVisibility();\r\n \r\n // add transition\r\n if (TRANSITIONDURATION) {\r\n var prefix = TRANSITIONDURATION.substring(0, TRANSITIONDURATION.length - 18).toLowerCase(),\r\n str = 'transition: all ' + speed / 1000 + 's';\r\n \r\n if (prefix) {\r\n str = '-' + prefix + '-' + str;\r\n }\r\n \r\n addCSSRule(sheet, '[aria-controls^=' + slideId + '-item]', str, getCssRulesLength(sheet));\r\n }\r\n \r\n setAttrs(navItems[navCurrentIndex], { 'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent });\r\n removeAttrs(navItems[navCurrentIndex], 'tabindex');\r\n addClass(navItems[navCurrentIndex], navActiveClass);\r\n \r\n // add events\r\n addEvents(navContainer, navEvents);\r\n }\r\n \r\n \r\n \r\n // == controlsInit ==\r\n if (hasControls) {\r\n if (!controlsContainer && (!prevButton || !nextButton)) {\r\n outerWrapper.insertAdjacentHTML(getInsertPosition(options.controlsPosition), '
');\r\n \r\n controlsContainer = outerWrapper.querySelector('.tns-controls');\r\n }\r\n \r\n if (!prevButton || !nextButton) {\r\n prevButton = controlsContainer.children[0];\r\n nextButton = controlsContainer.children[1];\r\n }\r\n \r\n if (options.controlsContainer) {\r\n setAttrs(controlsContainer, {\r\n 'aria-label': 'Carousel Navigation',\r\n 'tabindex': '0'\r\n });\r\n }\r\n \r\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\r\n setAttrs([prevButton, nextButton], {\r\n 'aria-controls': slideId,\r\n 'tabindex': '-1',\r\n });\r\n }\r\n \r\n if (options.controlsContainer || (options.prevButton && options.nextButton)) {\r\n setAttrs(prevButton, { 'data-controls': 'prev' });\r\n setAttrs(nextButton, { 'data-controls': 'next' });\r\n }\r\n \r\n prevIsButton = isButton(prevButton);\r\n nextIsButton = isButton(nextButton);\r\n \r\n updateControlsStatus();\r\n \r\n // add events\r\n if (controlsContainer) {\r\n addEvents(controlsContainer, controlsEvents);\r\n } else {\r\n addEvents(prevButton, controlsEvents);\r\n addEvents(nextButton, controlsEvents);\r\n }\r\n }\r\n \r\n // hide tools if needed\r\n disableUI();\r\n }\r\n \r\n function initEvents() {\r\n // add events\r\n if (carousel && TRANSITIONEND) {\r\n var eve = {};\r\n eve[TRANSITIONEND] = onTransitionEnd;\r\n addEvents(container, eve);\r\n }\r\n \r\n if (touch) { addEvents(container, touchEvents, options.preventScrollOnTouch); }\r\n if (mouseDrag) { addEvents(container, dragEvents); }\r\n if (arrowKeys) { addEvents(doc, docmentKeydownEvent); }\r\n \r\n if (nested === 'inner') {\r\n events.on('outerResized', function () {\r\n resizeTasks();\r\n events.emit('innerLoaded', info());\r\n });\r\n } else if (responsive || fixedWidth || autoWidth || autoHeight || !horizontal) {\r\n addEvents(win, { 'resize': onResize });\r\n }\r\n \r\n if (autoHeight) {\r\n if (nested === 'outer') {\r\n events.on('innerLoaded', doAutoHeight);\r\n } else if (!disable) { doAutoHeight(); }\r\n }\r\n \r\n if (disable) { disableSlider(); } else if (freeze) { freezeSlider(); }\r\n \r\n events.on('indexChanged', additionalUpdates);\r\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\r\n if (typeof onInit === 'function') { onInit(info()); }\r\n isOn = true;\r\n }\r\n \r\n function destroy() {\r\n // sheet\r\n sheet.disabled = true;\r\n if (sheet.ownerNode) { sheet.ownerNode.remove(); }\r\n \r\n // remove win event listeners\r\n removeEvents(win, { 'resize': onResize });\r\n \r\n // arrowKeys, controls, nav\r\n if (arrowKeys) { removeEvents(doc, docmentKeydownEvent); }\r\n if (controlsContainer) { removeEvents(controlsContainer, controlsEvents); }\r\n if (navContainer) { removeEvents(navContainer, navEvents); }\r\n \r\n // autoplay\r\n removeEvents(container, hoverEvents);\r\n removeEvents(container, visibilityEvent);\r\n if (autoplayButton) { removeEvents(autoplayButton, { 'click': toggleAutoplay }); }\r\n if (autoplay) { clearInterval(autoplayTimer); }\r\n \r\n // container\r\n if (carousel && TRANSITIONEND) {\r\n var eve = {};\r\n eve[TRANSITIONEND] = onTransitionEnd;\r\n removeEvents(container, eve);\r\n }\r\n if (touch) { removeEvents(container, touchEvents); }\r\n if (mouseDrag) { removeEvents(container, dragEvents); }\r\n \r\n // cache Object values in options && reset HTML\r\n var htmlList = [containerHTML, controlsContainerHTML, prevButtonHTML, nextButtonHTML, navContainerHTML, autoplayButtonHTML];\r\n \r\n tnsList.forEach(function (item, i) {\r\n var el = item === 'container' ? outerWrapper : options[item];\r\n \r\n if (typeof el === 'object') {\r\n var prevEl = el.previousElementSibling ? el.previousElementSibling : false,\r\n parentEl = el.parentNode;\r\n el.outerHTML = htmlList[i];\r\n options[item] = prevEl ? prevEl.nextElementSibling : parentEl.firstElementChild;\r\n }\r\n });\r\n \r\n \r\n // reset variables\r\n animateIn = animateOut = animateDelay = animateNormal = horizontal = outerWrapper = innerWrapper = container = containerParent = containerHTML = slideItems = slideCount = breakpointZone = windowWidth = autoWidth = fixedWidth = edgePadding = gutter = viewport = items = slideBy = viewportMax = arrowKeys = speed = rewind = loop = autoHeight = sheet = lazyload = slidePositions = slideItemsOut = cloneCount = slideCountNew = hasRightDeadZone = rightBoundary = updateIndexBeforeTransform = transformAttr = transformPrefix = transformPostfix = getIndexMax = index = indexCached = indexMin = indexMax = resizeTimer = swipeAngle = moveDirectionExpected = running = onInit = events = newContainerClasses = slideId = disable = disabled = freezable = freeze = frozen = controlsEvents = navEvents = hoverEvents = visibilityEvent = docmentKeydownEvent = touchEvents = dragEvents = hasControls = hasNav = navAsThumbnails = hasAutoplay = hasTouch = hasMouseDrag = slideActiveClass = imgCompleteClass = imgEvents = imgsComplete = controls = controlsText = controlsContainer = controlsContainerHTML = prevButton = nextButton = prevIsButton = nextIsButton = nav = navContainer = navContainerHTML = navItems = navClicked = navCurrentIndex = navCurrentIndexCached = navActiveClass = navStr = navStrCurrent = autoplay = autoplayTimeout = autoplayDirection = autoplayText = autoplayHoverPause = autoplayButton = autoplayButtonHTML = autoplayResetOnVisibility = autoplayHtmlStrings = autoplayTimer = animating = autoplayHoverPaused = autoplayUserPaused = autoplayVisibilityPaused = initSingleSlide = initPosition = lastPosition = translateInit = disX = disY = panStart = rafIndex = getDist = touch = mouseDrag = null;\r\n // check variables\r\n // [animateIn, animateOut, animateDelay, animateNormal, horizontal, outerWrapper, innerWrapper, container, containerParent, containerHTML, slideItems, slideCount, breakpointZone, windowWidth, autoWidth, fixedWidth, edgePadding, gutter, viewport, items, slideBy, viewportMax, arrowKeys, speed, rewind, loop, autoHeight, sheet, lazyload, slidePositions, slideItemsOut, cloneCount, slideCountNew, hasRightDeadZone, rightBoundary, updateIndexBeforeTransform, transformAttr, transformPrefix, transformPostfix, getIndexMax, index, indexCached, indexMin, indexMax, resizeTimer, swipeAngle, moveDirectionExpected, running, onInit, events, newContainerClasses, slideId, disable, disabled, freezable, freeze, frozen, controlsEvents, navEvents, hoverEvents, visibilityEvent, docmentKeydownEvent, touchEvents, dragEvents, hasControls, hasNav, navAsThumbnails, hasAutoplay, hasTouch, hasMouseDrag, slideActiveClass, imgCompleteClass, imgEvents, imgsComplete, controls, controlsText, controlsContainer, controlsContainerHTML, prevButton, nextButton, prevIsButton, nextIsButton, nav, navContainer, navContainerHTML, navItems, pages, pagesCached, navClicked, navCurrentIndex, navCurrentIndexCached, navActiveClass, navStr, navStrCurrent, autoplay, autoplayTimeout, autoplayDirection, autoplayText, autoplayHoverPause, autoplayButton, autoplayButtonHTML, autoplayResetOnVisibility, autoplayHtmlStrings, autoplayTimer, animating, autoplayHoverPaused, autoplayUserPaused, autoplayVisibilityPaused, initPosition, lastPosition, translateInit, disX, disY, panStart, rafIndex, getDist, touch, mouseDrag ].forEach(function(item) { if (item !== null) { console.log(item); } });\r\n \r\n for (var a in this) {\r\n if (a !== 'rebuild') { this[a] = null; }\r\n }\r\n isOn = false;\r\n }\r\n \r\n // === ON RESIZE ===\r\n // responsive || fixedWidth || autoWidth || !horizontal\r\n function onResize(e) {\r\n raf(function () { resizeTasks(getEvent(e)); });\r\n }\r\n \r\n function resizeTasks(e) {\r\n if (!isOn) { return; }\r\n if (nested === 'outer') { events.emit('outerResized', info(e)); }\r\n windowWidth = getWindowWidth();\r\n var bpChanged,\r\n breakpointZoneTem = breakpointZone,\r\n needContainerTransform = false;\r\n \r\n if (responsive) {\r\n setBreakpointZone();\r\n bpChanged = breakpointZoneTem !== breakpointZone;\r\n // if (hasRightDeadZone) { needContainerTransform = true; } // *?\r\n if (bpChanged) { events.emit('newBreakpointStart', info(e)); }\r\n }\r\n \r\n var indChanged,\r\n itemsChanged,\r\n itemsTem = items,\r\n disableTem = disable,\r\n freezeTem = freeze,\r\n arrowKeysTem = arrowKeys,\r\n controlsTem = controls,\r\n navTem = nav,\r\n touchTem = touch,\r\n mouseDragTem = mouseDrag,\r\n autoplayTem = autoplay,\r\n autoplayHoverPauseTem = autoplayHoverPause,\r\n autoplayResetOnVisibilityTem = autoplayResetOnVisibility,\r\n indexTem = index;\r\n \r\n if (bpChanged) {\r\n var fixedWidthTem = fixedWidth,\r\n autoHeightTem = autoHeight,\r\n controlsTextTem = controlsText,\r\n centerTem = center,\r\n autoplayTextTem = autoplayText;\r\n \r\n if (!CSSMQ) {\r\n var gutterTem = gutter,\r\n edgePaddingTem = edgePadding;\r\n }\r\n }\r\n \r\n // get option:\r\n // fixed width: viewport, fixedWidth, gutter => items\r\n // others: window width => all variables\r\n // all: items => slideBy\r\n arrowKeys = getOption('arrowKeys');\r\n controls = getOption('controls');\r\n nav = getOption('nav');\r\n touch = getOption('touch');\r\n center = getOption('center');\r\n mouseDrag = getOption('mouseDrag');\r\n autoplay = getOption('autoplay');\r\n autoplayHoverPause = getOption('autoplayHoverPause');\r\n autoplayResetOnVisibility = getOption('autoplayResetOnVisibility');\r\n \r\n if (bpChanged) {\r\n disable = getOption('disable');\r\n fixedWidth = getOption('fixedWidth');\r\n speed = getOption('speed');\r\n autoHeight = getOption('autoHeight');\r\n controlsText = getOption('controlsText');\r\n autoplayText = getOption('autoplayText');\r\n autoplayTimeout = getOption('autoplayTimeout');\r\n \r\n if (!CSSMQ) {\r\n edgePadding = getOption('edgePadding');\r\n gutter = getOption('gutter');\r\n }\r\n }\r\n // update options\r\n resetVariblesWhenDisable(disable);\r\n \r\n viewport = getViewportWidth(); // <= edgePadding, gutter\r\n if ((!horizontal || autoWidth) && !disable) {\r\n setSlidePositions();\r\n if (!horizontal) {\r\n updateContentWrapperHeight(); // <= setSlidePositions\r\n needContainerTransform = true;\r\n }\r\n }\r\n if (fixedWidth || autoWidth) {\r\n rightBoundary = getRightBoundary(); // autoWidth: <= viewport, slidePositions, gutter\r\n // fixedWidth: <= viewport, fixedWidth, gutter\r\n indexMax = getIndexMax(); // autoWidth: <= rightBoundary, slidePositions\r\n // fixedWidth: <= rightBoundary, fixedWidth, gutter\r\n }\r\n \r\n if (bpChanged || fixedWidth) {\r\n items = getOption('items');\r\n slideBy = getOption('slideBy');\r\n itemsChanged = items !== itemsTem;\r\n \r\n if (itemsChanged) {\r\n if (!fixedWidth && !autoWidth) { indexMax = getIndexMax(); } // <= items\r\n // check index before transform in case\r\n // slider reach the right edge then items become bigger\r\n updateIndex();\r\n }\r\n }\r\n \r\n if (bpChanged) {\r\n if (disable !== disableTem) {\r\n if (disable) {\r\n disableSlider();\r\n } else {\r\n enableSlider(); // <= slidePositions, rightBoundary, indexMax\r\n }\r\n }\r\n }\r\n \r\n if (freezable && (bpChanged || fixedWidth || autoWidth)) {\r\n freeze = getFreeze(); // <= autoWidth: slidePositions, gutter, viewport, rightBoundary\r\n // <= fixedWidth: fixedWidth, gutter, rightBoundary\r\n // <= others: items\r\n \r\n if (freeze !== freezeTem) {\r\n if (freeze) {\r\n doContainerTransform(getContainerTransformValue(getStartIndex(0)));\r\n freezeSlider();\r\n } else {\r\n unfreezeSlider();\r\n needContainerTransform = true;\r\n }\r\n }\r\n }\r\n \r\n resetVariblesWhenDisable(disable || freeze); // controls, nav, touch, mouseDrag, arrowKeys, autoplay, autoplayHoverPause, autoplayResetOnVisibility\r\n if (!autoplay) { autoplayHoverPause = autoplayResetOnVisibility = false; }\r\n \r\n if (arrowKeys !== arrowKeysTem) {\r\n arrowKeys ?\r\n addEvents(doc, docmentKeydownEvent) :\r\n removeEvents(doc, docmentKeydownEvent);\r\n }\r\n if (controls !== controlsTem) {\r\n if (controls) {\r\n if (controlsContainer) {\r\n showElement(controlsContainer);\r\n } else {\r\n if (prevButton) { showElement(prevButton); }\r\n if (nextButton) { showElement(nextButton); }\r\n }\r\n } else {\r\n if (controlsContainer) {\r\n hideElement(controlsContainer);\r\n } else {\r\n if (prevButton) { hideElement(prevButton); }\r\n if (nextButton) { hideElement(nextButton); }\r\n }\r\n }\r\n }\r\n if (nav !== navTem) {\r\n nav ?\r\n showElement(navContainer) :\r\n hideElement(navContainer);\r\n }\r\n if (touch !== touchTem) {\r\n touch ?\r\n addEvents(container, touchEvents, options.preventScrollOnTouch) :\r\n removeEvents(container, touchEvents);\r\n }\r\n if (mouseDrag !== mouseDragTem) {\r\n mouseDrag ?\r\n addEvents(container, dragEvents) :\r\n removeEvents(container, dragEvents);\r\n }\r\n if (autoplay !== autoplayTem) {\r\n if (autoplay) {\r\n if (autoplayButton) { showElement(autoplayButton); }\r\n if (!animating && !autoplayUserPaused) { startAutoplay(); }\r\n } else {\r\n if (autoplayButton) { hideElement(autoplayButton); }\r\n if (animating) { stopAutoplay(); }\r\n }\r\n }\r\n if (autoplayHoverPause !== autoplayHoverPauseTem) {\r\n autoplayHoverPause ?\r\n addEvents(container, hoverEvents) :\r\n removeEvents(container, hoverEvents);\r\n }\r\n if (autoplayResetOnVisibility !== autoplayResetOnVisibilityTem) {\r\n autoplayResetOnVisibility ?\r\n addEvents(doc, visibilityEvent) :\r\n removeEvents(doc, visibilityEvent);\r\n }\r\n \r\n if (bpChanged) {\r\n if (fixedWidth !== fixedWidthTem || center !== centerTem) { needContainerTransform = true; }\r\n \r\n if (autoHeight !== autoHeightTem) {\r\n if (!autoHeight) { innerWrapper.style.height = ''; }\r\n }\r\n \r\n if (controls && controlsText !== controlsTextTem) {\r\n prevButton.innerHTML = controlsText[0];\r\n nextButton.innerHTML = controlsText[1];\r\n }\r\n \r\n if (autoplayButton && autoplayText !== autoplayTextTem) {\r\n var i = autoplay ? 1 : 0,\r\n html = autoplayButton.innerHTML,\r\n len = html.length - autoplayTextTem[i].length;\r\n if (html.substring(len) === autoplayTextTem[i]) {\r\n autoplayButton.innerHTML = html.substring(0, len) + autoplayText[i];\r\n }\r\n }\r\n } else {\r\n if (center && (fixedWidth || autoWidth)) { needContainerTransform = true; }\r\n }\r\n \r\n if (itemsChanged || fixedWidth && !autoWidth) {\r\n pages = getPages();\r\n updateNavVisibility();\r\n }\r\n \r\n indChanged = index !== indexTem;\r\n if (indChanged) {\r\n events.emit('indexChanged', info());\r\n needContainerTransform = true;\r\n } else if (itemsChanged) {\r\n if (!indChanged) { additionalUpdates(); }\r\n } else if (fixedWidth || autoWidth) {\r\n updateSlideStatus();\r\n updateLiveRegion();\r\n }\r\n \r\n if (itemsChanged && !carousel) { updateGallerySlidePositions(); }\r\n \r\n if (!disable && !freeze) {\r\n // non-meduaqueries: IE8\r\n if (bpChanged && !CSSMQ) {\r\n // middle wrapper styles\r\n if (autoHeight !== autoheightTem || speed !== speedTem) {\r\n update_carousel_transition_duration();\r\n }\r\n \r\n // inner wrapper styles\r\n if (edgePadding !== edgePaddingTem || gutter !== gutterTem) {\r\n innerWrapper.style.cssText = getInnerWrapperStyles(edgePadding, gutter, fixedWidth, speed, autoHeight);\r\n }\r\n \r\n if (horizontal) {\r\n // container styles\r\n if (carousel) {\r\n container.style.width = getContainerWidth(fixedWidth, gutter, items);\r\n }\r\n \r\n // slide styles\r\n var str = getSlideWidthStyle(fixedWidth, gutter, items) +\r\n getSlideGutterStyle(gutter);\r\n \r\n // remove the last line and\r\n // add new styles\r\n removeCSSRule(sheet, getCssRulesLength(sheet) - 1);\r\n addCSSRule(sheet, '#' + slideId + ' > .tns-item', str, getCssRulesLength(sheet));\r\n }\r\n }\r\n \r\n // auto height\r\n if (autoHeight) { doAutoHeight(); }\r\n \r\n if (needContainerTransform) {\r\n doContainerTransformSilent();\r\n indexCached = index;\r\n }\r\n }\r\n \r\n if (bpChanged) { events.emit('newBreakpointEnd', info(e)); }\r\n }\r\n \r\n \r\n \r\n \r\n \r\n // === INITIALIZATION FUNCTIONS === //\r\n function getFreeze() {\r\n if (!fixedWidth && !autoWidth) {\r\n var a = center ? items - (items - 1) / 2 : items;\r\n return slideCount <= a;\r\n }\r\n \r\n var width = fixedWidth ? (fixedWidth + gutter) * slideCount : slidePositions[slideCount],\r\n vp = edgePadding ? viewport + edgePadding * 2 : viewport + gutter;\r\n \r\n if (center) {\r\n vp -= fixedWidth ? (viewport - fixedWidth) / 2 : (viewport - (slidePositions[index + 1] - slidePositions[index] - gutter)) / 2;\r\n }\r\n \r\n return width <= vp;\r\n }\r\n \r\n function setBreakpointZone() {\r\n breakpointZone = 0;\r\n for (var bp in responsive) {\r\n bp = parseInt(bp); // convert string to number\r\n if (windowWidth >= bp) { breakpointZone = bp; }\r\n }\r\n }\r\n \r\n // (slideBy, indexMin, indexMax) => index\r\n var updateIndex = (function () {\r\n return loop ?\r\n carousel ?\r\n // loop + carousel\r\n function () {\r\n var leftEdge = indexMin,\r\n rightEdge = indexMax;\r\n \r\n leftEdge += slideBy;\r\n rightEdge -= slideBy;\r\n \r\n // adjust edges when has edge paddings\r\n // or fixed-width slider with extra space on the right side\r\n if (edgePadding) {\r\n leftEdge += 1;\r\n rightEdge -= 1;\r\n } else if (fixedWidth) {\r\n if ((viewport + gutter) % (fixedWidth + gutter)) { rightEdge -= 1; }\r\n }\r\n \r\n if (cloneCount) {\r\n if (index > rightEdge) {\r\n index -= slideCount;\r\n } else if (index < leftEdge) {\r\n index += slideCount;\r\n }\r\n }\r\n } :\r\n // loop + gallery\r\n function () {\r\n if (index > indexMax) {\r\n while (index >= indexMin + slideCount) { index -= slideCount; }\r\n } else if (index < indexMin) {\r\n while (index <= indexMax - slideCount) { index += slideCount; }\r\n }\r\n } :\r\n // non-loop\r\n function () {\r\n index = Math.max(indexMin, Math.min(indexMax, index));\r\n };\r\n })();\r\n \r\n function disableUI() {\r\n if (!autoplay && autoplayButton) { hideElement(autoplayButton); }\r\n if (!nav && navContainer) { hideElement(navContainer); }\r\n if (!controls) {\r\n if (controlsContainer) {\r\n hideElement(controlsContainer);\r\n } else {\r\n if (prevButton) { hideElement(prevButton); }\r\n if (nextButton) { hideElement(nextButton); }\r\n }\r\n }\r\n }\r\n \r\n function enableUI() {\r\n if (autoplay && autoplayButton) { showElement(autoplayButton); }\r\n if (nav && navContainer) { showElement(navContainer); }\r\n if (controls) {\r\n if (controlsContainer) {\r\n showElement(controlsContainer);\r\n } else {\r\n if (prevButton) { showElement(prevButton); }\r\n if (nextButton) { showElement(nextButton); }\r\n }\r\n }\r\n }\r\n \r\n function freezeSlider() {\r\n if (frozen) { return; }\r\n \r\n // remove edge padding from inner wrapper\r\n if (edgePadding) { innerWrapper.style.margin = '0px'; }\r\n \r\n // add class tns-transparent to cloned slides\r\n if (cloneCount) {\r\n var str = 'tns-transparent';\r\n for (var i = cloneCount; i--;) {\r\n if (carousel) { addClass(slideItems[i], str); }\r\n addClass(slideItems[slideCountNew - i - 1], str);\r\n }\r\n }\r\n \r\n // update tools\r\n disableUI();\r\n \r\n frozen = true;\r\n }\r\n \r\n function unfreezeSlider() {\r\n if (!frozen) { return; }\r\n \r\n // restore edge padding for inner wrapper\r\n // for mordern browsers\r\n if (edgePadding && CSSMQ) { innerWrapper.style.margin = ''; }\r\n \r\n // remove class tns-transparent to cloned slides\r\n if (cloneCount) {\r\n var str = 'tns-transparent';\r\n for (var i = cloneCount; i--;) {\r\n if (carousel) { removeClass(slideItems[i], str); }\r\n removeClass(slideItems[slideCountNew - i - 1], str);\r\n }\r\n }\r\n \r\n // update tools\r\n enableUI();\r\n \r\n frozen = false;\r\n }\r\n \r\n function disableSlider() {\r\n if (disabled) { return; }\r\n \r\n sheet.disabled = true;\r\n container.className = container.className.replace(newContainerClasses.substring(1), '');\r\n removeAttrs(container, ['style']);\r\n if (loop) {\r\n for (var j = cloneCount; j--;) {\r\n if (carousel) { hideElement(slideItems[j]); }\r\n hideElement(slideItems[slideCountNew - j - 1]);\r\n }\r\n }\r\n \r\n // vertical slider\r\n if (!horizontal || !carousel) { removeAttrs(innerWrapper, ['style']); }\r\n \r\n // gallery\r\n if (!carousel) {\r\n for (var i = index, l = index + slideCount; i < l; i++) {\r\n var item = slideItems[i];\r\n removeAttrs(item, ['style']);\r\n removeClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n }\r\n }\r\n \r\n // update tools\r\n disableUI();\r\n \r\n disabled = true;\r\n }\r\n \r\n function enableSlider() {\r\n if (!disabled) { return; }\r\n \r\n sheet.disabled = false;\r\n container.className += newContainerClasses;\r\n doContainerTransformSilent();\r\n \r\n if (loop) {\r\n for (var j = cloneCount; j--;) {\r\n if (carousel) { showElement(slideItems[j]); }\r\n showElement(slideItems[slideCountNew - j - 1]);\r\n }\r\n }\r\n \r\n // gallery\r\n if (!carousel) {\r\n for (var i = index, l = index + slideCount; i < l; i++) {\r\n var item = slideItems[i],\r\n classN = i < index + items ? animateIn : animateNormal;\r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, classN);\r\n }\r\n }\r\n \r\n // update tools\r\n enableUI();\r\n \r\n disabled = false;\r\n }\r\n \r\n function updateLiveRegion() {\r\n var str = getLiveRegionStr();\r\n if (liveregionCurrent.innerHTML !== str) { liveregionCurrent.innerHTML = str; }\r\n }\r\n \r\n function getLiveRegionStr() {\r\n var arr = getVisibleSlideRange(),\r\n start = arr[0] + 1,\r\n end = arr[1] + 1;\r\n return start === end ? start + '' : start + ' to ' + end;\r\n }\r\n \r\n function getVisibleSlideRange(val) {\r\n if (val == null) { val = getContainerTransformValue(); }\r\n var start = index, end, rangestart, rangeend;\r\n \r\n // get range start, range end for autoWidth and fixedWidth\r\n if (center || edgePadding) {\r\n if (autoWidth || fixedWidth) {\r\n rangestart = - (parseFloat(val) + edgePadding);\r\n rangeend = rangestart + viewport + edgePadding * 2;\r\n }\r\n } else {\r\n if (autoWidth) {\r\n rangestart = slidePositions[index];\r\n rangeend = rangestart + viewport;\r\n }\r\n }\r\n \r\n // get start, end\r\n // - check auto width\r\n if (autoWidth) {\r\n slidePositions.forEach(function (point, i) {\r\n if (i < slideCountNew) {\r\n if ((center || edgePadding) && point <= rangestart + 0.5) { start = i; }\r\n if (rangeend - point >= 0.5) { end = i; }\r\n }\r\n });\r\n \r\n // - check percentage width, fixed width\r\n } else {\r\n \r\n if (fixedWidth) {\r\n var cell = fixedWidth + gutter;\r\n if (center || edgePadding) {\r\n start = Math.floor(rangestart / cell);\r\n end = Math.ceil(rangeend / cell - 1);\r\n } else {\r\n end = start + Math.ceil(viewport / cell) - 1;\r\n }\r\n \r\n } else {\r\n if (center || edgePadding) {\r\n var a = items - 1;\r\n if (center) {\r\n start -= a / 2;\r\n end = index + a / 2;\r\n } else {\r\n end = index + a;\r\n }\r\n \r\n if (edgePadding) {\r\n var b = edgePadding * items / viewport;\r\n start -= b;\r\n end += b;\r\n }\r\n \r\n start = Math.floor(start);\r\n end = Math.ceil(end);\r\n } else {\r\n end = start + items - 1;\r\n }\r\n }\r\n \r\n start = Math.max(start, 0);\r\n end = Math.min(end, slideCountNew - 1);\r\n }\r\n \r\n return [start, end];\r\n }\r\n \r\n \r\n function onImgLoaded(e) {\r\n imgLoaded(getTarget(e));\r\n }\r\n \r\n function onImgFailed(e) {\r\n imgFailed(getTarget(e));\r\n }\r\n \r\n function imgLoaded(img) {\r\n addClass(img, 'loaded');\r\n imgCompleted(img);\r\n }\r\n \r\n function imgFailed(img) {\r\n addClass(img, 'failed');\r\n imgCompleted(img);\r\n }\r\n \r\n function imgCompleted(img) {\r\n addClass(img, 'tns-complete');\r\n removeClass(img, 'loading');\r\n removeEvents(img, imgEvents);\r\n }\r\n \r\n function getImageArray(start, end) {\r\n var imgs = [];\r\n while (start <= end) {\r\n forEach(slideItems[start].querySelectorAll('img'), function (img) { imgs.push(img); });\r\n start++;\r\n }\r\n \r\n return imgs;\r\n }\r\n \r\n // check if all visible images are loaded\r\n // and update container height if it's done\r\n function doAutoHeight() {\r\n var imgs = getImageArray.apply(null, getVisibleSlideRange());\r\n raf(function () { imgsLoadedCheck(imgs, updateInnerWrapperHeight); });\r\n }\r\n \r\n function imgsLoadedCheck(imgs, cb) {\r\n // directly execute callback function if all images are complete\r\n if (imgsComplete) { return cb(); }\r\n \r\n // check selected image classes otherwise\r\n imgs.forEach(function (img, index) {\r\n if (hasClass(img, imgCompleteClass)) { imgs.splice(index, 1); }\r\n });\r\n \r\n // execute callback function if selected images are all complete\r\n if (!imgs.length) { return cb(); }\r\n \r\n // otherwise execute this functiona again\r\n raf(function () { imgsLoadedCheck(imgs, cb); });\r\n }\r\n \r\n function additionalUpdates() {\r\n updateSlideStatus();\r\n updateLiveRegion();\r\n updateControlsStatus();\r\n updateNavStatus();\r\n }\r\n \r\n \r\n function update_carousel_transition_duration() {\r\n if (carousel && autoHeight) {\r\n middleWrapper.style[TRANSITIONDURATION] = speed / 1000 + 's';\r\n }\r\n }\r\n \r\n function getMaxSlideHeight(slideStart, slideRange) {\r\n var heights = [];\r\n for (var i = slideStart, l = Math.min(slideStart + slideRange, slideCountNew); i < l; i++) {\r\n heights.push(slideItems[i].offsetHeight);\r\n }\r\n \r\n return Math.max.apply(null, heights);\r\n }\r\n \r\n // update inner wrapper height\r\n // 1. get the max-height of the visible slides\r\n // 2. set transitionDuration to speed\r\n // 3. update inner wrapper height to max-height\r\n // 4. set transitionDuration to 0s after transition done\r\n function updateInnerWrapperHeight() {\r\n var maxHeight = autoHeight ? getMaxSlideHeight(index, items) : getMaxSlideHeight(cloneCount, slideCount),\r\n wp = middleWrapper ? middleWrapper : innerWrapper;\r\n \r\n if (wp.style.height !== maxHeight) { wp.style.height = maxHeight + 'px'; }\r\n }\r\n \r\n // get the distance from the top edge of the first slide to each slide\r\n // (init) => slidePositions\r\n function setSlidePositions() {\r\n slidePositions = [0];\r\n var attr = horizontal ? 'left' : 'top',\r\n attr2 = horizontal ? 'right' : 'bottom',\r\n base = slideItems[0].getBoundingClientRect()[attr];\r\n \r\n forEach(slideItems, function (item, i) {\r\n // skip the first slide\r\n if (i) { slidePositions.push(item.getBoundingClientRect()[attr] - base); }\r\n // add the end edge\r\n if (i === slideCountNew - 1) { slidePositions.push(item.getBoundingClientRect()[attr2] - base); }\r\n });\r\n }\r\n \r\n // update slide\r\n function updateSlideStatus() {\r\n var range = getVisibleSlideRange(),\r\n start = range[0],\r\n end = range[1];\r\n \r\n forEach(slideItems, function (item, i) {\r\n // show slides\r\n if (i >= start && i <= end) {\r\n if (hasAttr(item, 'aria-hidden')) {\r\n removeAttrs(item, ['aria-hidden', 'tabindex']);\r\n addClass(item, slideActiveClass);\r\n }\r\n // hide slides\r\n } else {\r\n if (!hasAttr(item, 'aria-hidden')) {\r\n setAttrs(item, {\r\n 'aria-hidden': 'true',\r\n 'tabindex': '-1'\r\n });\r\n removeClass(item, slideActiveClass);\r\n }\r\n }\r\n });\r\n }\r\n \r\n // gallery: update slide position\r\n function updateGallerySlidePositions() {\r\n var l = index + Math.min(slideCount, items);\r\n for (var i = slideCountNew; i--;) {\r\n var item = slideItems[i];\r\n \r\n if (i >= index && i < l) {\r\n // add transitions to visible slides when adjusting their positions\r\n addClass(item, 'tns-moving');\r\n \r\n item.style.left = (i - index) * 100 / items + '%';\r\n addClass(item, animateIn);\r\n removeClass(item, animateNormal);\r\n } else if (item.style.left) {\r\n item.style.left = '';\r\n addClass(item, animateNormal);\r\n removeClass(item, animateIn);\r\n }\r\n \r\n // remove outlet animation\r\n removeClass(item, animateOut);\r\n }\r\n \r\n // removing '.tns-moving'\r\n setTimeout(function () {\r\n forEach(slideItems, function (el) {\r\n removeClass(el, 'tns-moving');\r\n });\r\n }, 300);\r\n }\r\n \r\n // set tabindex on Nav\r\n function updateNavStatus() {\r\n // get current nav\r\n if (nav) {\r\n navCurrentIndex = navClicked >= 0 ? navClicked : getCurrentNavIndex();\r\n navClicked = -1;\r\n \r\n if (navCurrentIndex !== navCurrentIndexCached) {\r\n var navPrev = navItems[navCurrentIndexCached],\r\n navCurrent = navItems[navCurrentIndex];\r\n \r\n setAttrs(navPrev, {\r\n 'tabindex': '-1',\r\n 'aria-label': navStr + (navCurrentIndexCached + 1)\r\n });\r\n removeClass(navPrev, navActiveClass);\r\n \r\n setAttrs(navCurrent, { 'aria-label': navStr + (navCurrentIndex + 1) + navStrCurrent });\r\n removeAttrs(navCurrent, 'tabindex');\r\n addClass(navCurrent, navActiveClass);\r\n \r\n navCurrentIndexCached = navCurrentIndex;\r\n }\r\n }\r\n }\r\n \r\n function getLowerCaseNodeName(el) {\r\n return el.nodeName.toLowerCase();\r\n }\r\n \r\n function isButton(el) {\r\n return getLowerCaseNodeName(el) === 'button';\r\n }\r\n \r\n function isAriaDisabled(el) {\r\n return el.getAttribute('aria-disabled') === 'true';\r\n }\r\n \r\n function disEnableElement(isButton, el, val) {\r\n if (isButton) {\r\n el.disabled = val;\r\n } else {\r\n el.setAttribute('aria-disabled', val.toString());\r\n }\r\n }\r\n \r\n // set 'disabled' to true on controls when reach the edges\r\n function updateControlsStatus() {\r\n if (!controls || rewind || loop) { return; }\r\n \r\n var prevDisabled = (prevIsButton) ? prevButton.disabled : isAriaDisabled(prevButton),\r\n nextDisabled = (nextIsButton) ? nextButton.disabled : isAriaDisabled(nextButton),\r\n disablePrev = (index <= indexMin) ? true : false,\r\n disableNext = (!rewind && index >= indexMax) ? true : false;\r\n \r\n if (disablePrev && !prevDisabled) {\r\n disEnableElement(prevIsButton, prevButton, true);\r\n }\r\n if (!disablePrev && prevDisabled) {\r\n disEnableElement(prevIsButton, prevButton, false);\r\n }\r\n if (disableNext && !nextDisabled) {\r\n disEnableElement(nextIsButton, nextButton, true);\r\n }\r\n if (!disableNext && nextDisabled) {\r\n disEnableElement(nextIsButton, nextButton, false);\r\n }\r\n }\r\n \r\n // set duration\r\n function resetDuration(el, str) {\r\n if (TRANSITIONDURATION) { el.style[TRANSITIONDURATION] = str; }\r\n }\r\n \r\n function getSliderWidth() {\r\n return fixedWidth ? (fixedWidth + gutter) * slideCountNew : slidePositions[slideCountNew];\r\n }\r\n \r\n function getCenterGap(num) {\r\n if (num == null) { num = index; }\r\n \r\n var gap = edgePadding ? gutter : 0;\r\n return autoWidth ? ((viewport - gap) - (slidePositions[num + 1] - slidePositions[num] - gutter)) / 2 :\r\n fixedWidth ? (viewport - fixedWidth) / 2 :\r\n (items - 1) / 2;\r\n }\r\n \r\n function getRightBoundary() {\r\n var gap = edgePadding ? gutter : 0,\r\n result = (viewport + gap) - getSliderWidth();\r\n \r\n if (center && !loop) {\r\n result = fixedWidth ? - (fixedWidth + gutter) * (slideCountNew - 1) - getCenterGap() :\r\n getCenterGap(slideCountNew - 1) - slidePositions[slideCountNew - 1];\r\n }\r\n if (result > 0) { result = 0; }\r\n \r\n return result;\r\n }\r\n \r\n function getContainerTransformValue(num) {\r\n if (num == null) { num = index; }\r\n \r\n var val;\r\n if (horizontal && !autoWidth) {\r\n if (fixedWidth) {\r\n val = - (fixedWidth + gutter) * num;\r\n if (center) { val += getCenterGap(); }\r\n } else {\r\n var denominator = TRANSFORM ? slideCountNew : items;\r\n if (center) { num -= getCenterGap(); }\r\n val = - num * 100 / denominator;\r\n }\r\n } else {\r\n val = - slidePositions[num];\r\n if (center && autoWidth) {\r\n val += getCenterGap();\r\n }\r\n }\r\n \r\n if (hasRightDeadZone) { val = Math.max(val, rightBoundary); }\r\n \r\n val += (horizontal && !autoWidth && !fixedWidth) ? '%' : 'px';\r\n \r\n if (document.dir) {\r\n if (document.dir == 'rtl') {\r\n val = val.replace(\"-\", \"\");\r\n }\r\n }\r\n \r\n return val;\r\n }\r\n \r\n function doContainerTransformSilent(val) {\r\n resetDuration(container, '0s');\r\n doContainerTransform(val);\r\n }\r\n \r\n function doContainerTransform(val) {\r\n if (val == null) { val = getContainerTransformValue(); }\r\n container.style[transformAttr] = transformPrefix + val + transformPostfix;\r\n }\r\n \r\n function animateSlide(number, classOut, classIn, isOut) {\r\n var l = number + items;\r\n if (!loop) { l = Math.min(l, slideCountNew); }\r\n \r\n for (var i = number; i < l; i++) {\r\n var item = slideItems[i];\r\n \r\n // set item positions\r\n if (!isOut) { item.style.left = (i - index) * 100 / items + '%'; }\r\n \r\n if (animateDelay && TRANSITIONDELAY) {\r\n item.style[TRANSITIONDELAY] = item.style[ANIMATIONDELAY] = animateDelay * (i - number) / 1000 + 's';\r\n }\r\n removeClass(item, classOut);\r\n addClass(item, classIn);\r\n \r\n if (isOut) { slideItemsOut.push(item); }\r\n }\r\n }\r\n \r\n // make transfer after click/drag:\r\n // 1. change 'transform' property for mordern browsers\r\n // 2. change 'left' property for legacy browsers\r\n var transformCore = (function () {\r\n return carousel ?\r\n function () {\r\n resetDuration(container, '');\r\n if (TRANSITIONDURATION || !speed) {\r\n // for morden browsers with non-zero duration or \r\n // zero duration for all browsers\r\n doContainerTransform();\r\n // run fallback function manually \r\n // when duration is 0 / container is hidden\r\n if (!speed || !isVisible(container)) { onTransitionEnd(); }\r\n \r\n } else {\r\n // for old browser with non-zero duration\r\n jsTransform(container, transformAttr, transformPrefix, transformPostfix, getContainerTransformValue(), speed, onTransitionEnd);\r\n }\r\n \r\n if (!horizontal) { updateContentWrapperHeight(); }\r\n } :\r\n function () {\r\n slideItemsOut = [];\r\n \r\n var eve = {};\r\n eve[TRANSITIONEND] = eve[ANIMATIONEND] = onTransitionEnd;\r\n removeEvents(slideItems[indexCached], eve);\r\n addEvents(slideItems[index], eve);\r\n \r\n animateSlide(indexCached, animateIn, animateOut, true);\r\n animateSlide(index, animateNormal, animateIn);\r\n \r\n // run fallback function manually \r\n // when transition or animation not supported / duration is 0\r\n if (!TRANSITIONEND || !ANIMATIONEND || !speed || !isVisible(container)) { onTransitionEnd(); }\r\n };\r\n })();\r\n \r\n function render(e, sliderMoved) {\r\n if (updateIndexBeforeTransform) { updateIndex(); }\r\n \r\n // render when slider was moved (touch or drag) even though index may not change\r\n if (index !== indexCached || sliderMoved) {\r\n // events\r\n events.emit('indexChanged', info());\r\n events.emit('transitionStart', info());\r\n if (autoHeight) { doAutoHeight(); }\r\n \r\n // pause autoplay when click or keydown from user\r\n if (animating && e && ['click', 'keydown'].indexOf(e.type) >= 0) { stopAutoplay(); }\r\n \r\n running = true;\r\n transformCore();\r\n }\r\n }\r\n \r\n /*\r\n * Transfer prefixed properties to the same format\r\n * CSS: -Webkit-Transform => webkittransform\r\n * JS: WebkitTransform => webkittransform\r\n * @param {string} str - property\r\n *\r\n */\r\n function strTrans(str) {\r\n return str.toLowerCase().replace(/-/g, '');\r\n }\r\n \r\n // AFTER TRANSFORM\r\n // Things need to be done after a transfer:\r\n // 1. check index\r\n // 2. add classes to visible slide\r\n // 3. disable controls buttons when reach the first/last slide in non-loop slider\r\n // 4. update nav status\r\n // 5. lazyload images\r\n // 6. update container height\r\n function onTransitionEnd(event) {\r\n // check running on gallery mode\r\n // make sure trantionend/animationend events run only once\r\n if (carousel || running) {\r\n events.emit('transitionEnd', info(event));\r\n \r\n if (!carousel && slideItemsOut.length > 0) {\r\n for (var i = 0; i < slideItemsOut.length; i++) {\r\n var item = slideItemsOut[i];\r\n // set item positions\r\n item.style.left = '';\r\n \r\n if (ANIMATIONDELAY && TRANSITIONDELAY) {\r\n item.style[ANIMATIONDELAY] = '';\r\n item.style[TRANSITIONDELAY] = '';\r\n }\r\n removeClass(item, animateOut);\r\n addClass(item, animateNormal);\r\n }\r\n }\r\n \r\n /* update slides, nav, controls after checking ...\r\n * => legacy browsers who don't support 'event' \r\n * have to check event first, otherwise event.target will cause an error \r\n * => or 'gallery' mode: \r\n * + event target is slide item\r\n * => or 'carousel' mode: \r\n * + event target is container, \r\n * + event.property is the same with transform attribute\r\n */\r\n if (!event ||\r\n !carousel && event.target.parentNode === container ||\r\n event.target === container && strTrans(event.propertyName) === strTrans(transformAttr)) {\r\n \r\n if (!updateIndexBeforeTransform) {\r\n var indexTem = index;\r\n updateIndex();\r\n if (index !== indexTem) {\r\n events.emit('indexChanged', info());\r\n \r\n doContainerTransformSilent();\r\n }\r\n }\r\n \r\n if (nested === 'inner') { events.emit('innerLoaded', info()); }\r\n running = false;\r\n indexCached = index;\r\n }\r\n }\r\n \r\n }\r\n \r\n // # ACTIONS\r\n function goTo(targetIndex, e) {\r\n if (freeze) { return; }\r\n \r\n // prev slideBy\r\n if (targetIndex === 'prev') {\r\n onControlsClick(e, -1);\r\n \r\n // next slideBy\r\n } else if (targetIndex === 'next') {\r\n onControlsClick(e, 1);\r\n \r\n // go to exact slide\r\n } else {\r\n if (running) {\r\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\r\n }\r\n \r\n var absIndex = getAbsIndex(),\r\n indexGap = 0;\r\n \r\n if (targetIndex === 'first') {\r\n indexGap = - absIndex;\r\n } else if (targetIndex === 'last') {\r\n indexGap = carousel ? slideCount - items - absIndex : slideCount - 1 - absIndex;\r\n } else {\r\n if (typeof targetIndex !== 'number') { targetIndex = parseInt(targetIndex); }\r\n \r\n if (!isNaN(targetIndex)) {\r\n // from directly called goTo function\r\n if (!e) { targetIndex = Math.max(0, Math.min(slideCount - 1, targetIndex)); }\r\n \r\n indexGap = targetIndex - absIndex;\r\n }\r\n }\r\n \r\n // gallery: make sure new page won't overlap with current page\r\n if (!carousel && indexGap && Math.abs(indexGap) < items) {\r\n var factor = indexGap > 0 ? 1 : -1;\r\n indexGap += (index + indexGap - slideCount) >= indexMin ? slideCount * factor : slideCount * 2 * factor * -1;\r\n }\r\n \r\n index += indexGap;\r\n \r\n // make sure index is in range\r\n if (carousel && loop) {\r\n if (index < indexMin) { index += slideCount; }\r\n if (index > indexMax) { index -= slideCount; }\r\n }\r\n \r\n // if index is changed, start rendering\r\n if (getAbsIndex(index) !== getAbsIndex(indexCached)) {\r\n render(e);\r\n }\r\n \r\n }\r\n }\r\n \r\n // on controls click\r\n function onControlsClick(e, dir) {\r\n if (running) {\r\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\r\n }\r\n var passEventObject;\r\n \r\n if (!dir) {\r\n e = getEvent(e);\r\n var target = getTarget(e);\r\n \r\n while (target !== controlsContainer && [prevButton, nextButton].indexOf(target) < 0) { target = target.parentNode; }\r\n \r\n var targetIn = [prevButton, nextButton].indexOf(target);\r\n if (targetIn >= 0) {\r\n passEventObject = true;\r\n dir = targetIn === 0 ? -1 : 1;\r\n }\r\n }\r\n \r\n if (rewind) {\r\n if (index === indexMin && dir === -1) {\r\n goTo('last', e);\r\n return;\r\n } else if (index === indexMax && dir === 1) {\r\n goTo('first', e);\r\n return;\r\n }\r\n }\r\n \r\n if (dir) {\r\n index += slideBy * dir;\r\n if (autoWidth) { index = Math.floor(index); }\r\n // pass e when click control buttons or keydown\r\n render((passEventObject || (e && e.type === 'keydown')) ? e : null);\r\n }\r\n }\r\n \r\n // on nav click\r\n function onNavClick(e) {\r\n if (running) {\r\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\r\n }\r\n \r\n e = getEvent(e);\r\n var target = getTarget(e), navIndex;\r\n \r\n // find the clicked nav item\r\n while (target !== navContainer && !hasAttr(target, 'data-nav')) { target = target.parentNode; }\r\n if (hasAttr(target, 'data-nav')) {\r\n var navIndex = navClicked = Number(getAttr(target, 'data-nav')),\r\n targetIndexBase = fixedWidth || autoWidth ? navIndex * slideCount / pages : navIndex * items,\r\n targetIndex = navAsThumbnails ? navIndex : Math.min(Math.ceil(targetIndexBase), slideCount - 1);\r\n goTo(targetIndex, e);\r\n \r\n if (navCurrentIndex === navIndex) {\r\n if (animating) { stopAutoplay(); }\r\n navClicked = -1; // reset navClicked\r\n }\r\n }\r\n }\r\n \r\n // autoplay functions\r\n function setAutoplayTimer() {\r\n autoplayTimer = setInterval(function () {\r\n onControlsClick(null, autoplayDirection);\r\n }, autoplayTimeout);\r\n \r\n animating = true;\r\n }\r\n \r\n function stopAutoplayTimer() {\r\n clearInterval(autoplayTimer);\r\n animating = false;\r\n }\r\n \r\n function updateAutoplayButton(action, txt) {\r\n setAttrs(autoplayButton, { 'data-action': action });\r\n autoplayButton.innerHTML = autoplayHtmlStrings[0] + action + autoplayHtmlStrings[1] + txt;\r\n }\r\n \r\n function startAutoplay() {\r\n setAutoplayTimer();\r\n if (autoplayButton) { updateAutoplayButton('stop', autoplayText[1]); }\r\n }\r\n \r\n function stopAutoplay() {\r\n stopAutoplayTimer();\r\n if (autoplayButton) { updateAutoplayButton('start', autoplayText[0]); }\r\n }\r\n \r\n // programaitcally play/pause the slider\r\n function play() {\r\n if (autoplay && !animating) {\r\n startAutoplay();\r\n autoplayUserPaused = false;\r\n }\r\n }\r\n function pause() {\r\n if (animating) {\r\n stopAutoplay();\r\n autoplayUserPaused = true;\r\n }\r\n }\r\n \r\n function toggleAutoplay() {\r\n if (animating) {\r\n stopAutoplay();\r\n autoplayUserPaused = true;\r\n } else {\r\n startAutoplay();\r\n autoplayUserPaused = false;\r\n }\r\n }\r\n \r\n function onVisibilityChange() {\r\n if (doc.hidden) {\r\n if (animating) {\r\n stopAutoplayTimer();\r\n autoplayVisibilityPaused = true;\r\n }\r\n } else if (autoplayVisibilityPaused) {\r\n setAutoplayTimer();\r\n autoplayVisibilityPaused = false;\r\n }\r\n }\r\n \r\n function mouseoverPause() {\r\n if (animating) {\r\n stopAutoplayTimer();\r\n autoplayHoverPaused = true;\r\n }\r\n }\r\n \r\n function mouseoutRestart() {\r\n if (autoplayHoverPaused) {\r\n setAutoplayTimer();\r\n autoplayHoverPaused = false;\r\n }\r\n }\r\n \r\n // keydown events on document \r\n function onDocumentKeydown(e) {\r\n e = getEvent(e);\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n \r\n if (keyIndex >= 0) {\r\n onControlsClick(e, keyIndex === 0 ? -1 : 1);\r\n }\r\n }\r\n \r\n // on key control\r\n function onControlsKeydown(e) {\r\n e = getEvent(e);\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT].indexOf(e.keyCode);\r\n \r\n if (keyIndex >= 0) {\r\n if (keyIndex === 0) {\r\n if (!prevButton.disabled) { onControlsClick(e, -1); }\r\n } else if (!nextButton.disabled) {\r\n onControlsClick(e, 1);\r\n }\r\n }\r\n }\r\n \r\n // set focus\r\n function setFocus(el) {\r\n el.focus();\r\n }\r\n \r\n // on key nav\r\n function onNavKeydown(e) {\r\n e = getEvent(e);\r\n var curElement = doc.activeElement;\r\n if (!hasAttr(curElement, 'data-nav')) { return; }\r\n \r\n // var code = e.keyCode,\r\n var keyIndex = [KEYS.LEFT, KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE].indexOf(e.keyCode),\r\n navIndex = Number(getAttr(curElement, 'data-nav'));\r\n \r\n if (keyIndex >= 0) {\r\n if (keyIndex === 0) {\r\n if (navIndex > 0) { setFocus(navItems[navIndex - 1]); }\r\n } else if (keyIndex === 1) {\r\n if (navIndex < pages - 1) { setFocus(navItems[navIndex + 1]); }\r\n } else {\r\n navClicked = navIndex;\r\n goTo(navIndex, e);\r\n }\r\n }\r\n }\r\n \r\n function getEvent(e) {\r\n e = e || win.event;\r\n return isTouchEvent(e) ? e.changedTouches[0] : e;\r\n }\r\n function getTarget(e) {\r\n return e.target || win.event.srcElement;\r\n }\r\n \r\n function isTouchEvent(e) {\r\n return e.type.indexOf('touch') >= 0;\r\n }\r\n \r\n function preventDefaultBehavior(e) {\r\n e.preventDefault ? e.preventDefault() : e.returnValue = false;\r\n }\r\n \r\n function getMoveDirectionExpected() {\r\n return getTouchDirection(toDegree(lastPosition.y - initPosition.y, lastPosition.x - initPosition.x), swipeAngle) === options.axis;\r\n }\r\n \r\n function onPanStart(e) {\r\n if (running) {\r\n if (preventActionWhenRunning) { return; } else { onTransitionEnd(); }\r\n }\r\n \r\n if (autoplay && animating) { stopAutoplayTimer(); }\r\n \r\n panStart = true;\r\n if (rafIndex) {\r\n caf(rafIndex);\r\n rafIndex = null;\r\n }\r\n \r\n var $ = getEvent(e);\r\n events.emit(isTouchEvent(e) ? 'touchStart' : 'dragStart', info(e));\r\n \r\n if (!isTouchEvent(e) && ['img', 'a'].indexOf(getLowerCaseNodeName(getTarget(e))) >= 0) {\r\n preventDefaultBehavior(e);\r\n }\r\n \r\n lastPosition.x = initPosition.x = $.clientX;\r\n lastPosition.y = initPosition.y = $.clientY;\r\n if (carousel) {\r\n translateInit = parseFloat(container.style[transformAttr].replace(transformPrefix, ''));\r\n resetDuration(container, '0s');\r\n }\r\n }\r\n \r\n function onPanMove(e) {\r\n if (panStart) {\r\n var $ = getEvent(e);\r\n lastPosition.x = $.clientX;\r\n lastPosition.y = $.clientY;\r\n \r\n if (carousel) {\r\n if (!rafIndex) { rafIndex = raf(function () { panUpdate(e); }); }\r\n } else {\r\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\r\n if (moveDirectionExpected) { preventScroll = true; }\r\n }\r\n \r\n if (preventScroll) { e.preventDefault(); }\r\n }\r\n }\r\n \r\n function panUpdate(e) {\r\n if (!moveDirectionExpected) {\r\n panStart = false;\r\n return;\r\n }\r\n caf(rafIndex);\r\n if (panStart) { rafIndex = raf(function () { panUpdate(e); }); }\r\n \r\n if (moveDirectionExpected === '?') { moveDirectionExpected = getMoveDirectionExpected(); }\r\n if (moveDirectionExpected) {\r\n if (!preventScroll && isTouchEvent(e)) { preventScroll = true; }\r\n \r\n try {\r\n if (e.type) { events.emit(isTouchEvent(e) ? 'touchMove' : 'dragMove', info(e)); }\r\n } catch (err) { }\r\n \r\n var x = translateInit,\r\n dist = getDist(lastPosition, initPosition);\r\n if (!horizontal || fixedWidth || autoWidth) {\r\n x += dist;\r\n x += 'px';\r\n } else {\r\n var percentageX = TRANSFORM ? dist * items * 100 / ((viewport + gutter) * slideCountNew) : dist * 100 / (viewport + gutter);\r\n x += percentageX;\r\n x += '%';\r\n }\r\n \r\n container.style[transformAttr] = transformPrefix + x + transformPostfix;\r\n }\r\n }\r\n \r\n function onPanEnd(e) {\r\n if (panStart) {\r\n if (rafIndex) {\r\n caf(rafIndex);\r\n rafIndex = null;\r\n }\r\n if (carousel) { resetDuration(container, ''); }\r\n panStart = false;\r\n \r\n var $ = getEvent(e);\r\n lastPosition.x = $.clientX;\r\n lastPosition.y = $.clientY;\r\n var dist = getDist(lastPosition, initPosition);\r\n \r\n if (Math.abs(dist)) {\r\n // drag vs click\r\n if (!isTouchEvent(e)) {\r\n // prevent \"click\"\r\n var target = getTarget(e);\r\n addEvents(target, {\r\n 'click': function preventClick(e) {\r\n preventDefaultBehavior(e);\r\n removeEvents(target, { 'click': preventClick });\r\n }\r\n });\r\n }\r\n \r\n if (carousel) {\r\n rafIndex = raf(function () {\r\n if (horizontal && !autoWidth) {\r\n // var indexMoved = - dist * items / (viewport + gutter);\r\n var indexMoved;\r\n if (document.dir && document.dir == 'rtl') {\r\n indexMoved = dist * items / viewport;\r\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\r\n } else {\r\n indexMoved = - dist * items / viewport;\r\n indexMoved = dist > 0 ? Math.floor(indexMoved) : Math.ceil(indexMoved);\r\n }\r\n \r\n index += indexMoved;\r\n } else {\r\n var moved = - (translateInit + dist);\r\n if (moved <= 0) {\r\n index = indexMin;\r\n } else if (moved >= slidePositions[slideCountNew - 1]) {\r\n index = indexMax;\r\n } else {\r\n var i = 0;\r\n while (i < slideCountNew && moved >= slidePositions[i]) {\r\n index = i;\r\n if (moved > slidePositions[i] && dist < 0) { index += 1; }\r\n i++;\r\n }\r\n }\r\n }\r\n \r\n render(e, dist);\r\n events.emit(isTouchEvent(e) ? 'touchEnd' : 'dragEnd', info(e));\r\n });\r\n } else {\r\n if (moveDirectionExpected) {\r\n onControlsClick(e, dist > 0 ? -1 : 1);\r\n }\r\n }\r\n }\r\n }\r\n \r\n // reset\r\n if (options.preventScrollOnTouch === 'auto') { preventScroll = false; }\r\n if (swipeAngle) { moveDirectionExpected = '?'; }\r\n if (autoplay && !animating) { setAutoplayTimer(); }\r\n }\r\n \r\n // === RESIZE FUNCTIONS === //\r\n // (slidePositions, index, items) => vertical_conentWrapper.height\r\n function updateContentWrapperHeight() {\r\n var wp = middleWrapper ? middleWrapper : innerWrapper;\r\n wp.style.height = slidePositions[index + items] - slidePositions[index] + 'px';\r\n }\r\n \r\n function getPages() {\r\n var rough = fixedWidth ? (fixedWidth + gutter) * slideCount / viewport : slideCount / items;\r\n return Math.min(Math.ceil(rough), slideCount);\r\n }\r\n \r\n /*\r\n * 1. update visible nav items list\r\n * 2. add \"hidden\" attributes to previous visible nav items\r\n * 3. remove \"hidden\" attrubutes to new visible nav items\r\n */\r\n function updateNavVisibility() {\r\n if (!nav || navAsThumbnails) { return; }\r\n \r\n if (pages !== pagesCached) {\r\n var min = pagesCached,\r\n max = pages,\r\n fn = showElement;\r\n \r\n if (pagesCached > pages) {\r\n min = pages;\r\n max = pagesCached;\r\n fn = hideElement;\r\n }\r\n \r\n while (min < max) {\r\n fn(navItems[min]);\r\n min++;\r\n }\r\n \r\n // cache pages\r\n pagesCached = pages;\r\n }\r\n }\r\n \r\n function info(e) {\r\n return {\r\n container: container,\r\n slideItems: slideItems,\r\n navContainer: navContainer,\r\n navItems: navItems,\r\n controlsContainer: controlsContainer,\r\n hasControls: hasControls,\r\n prevButton: prevButton,\r\n nextButton: nextButton,\r\n items: items,\r\n slideBy: slideBy,\r\n cloneCount: cloneCount,\r\n slideCount: slideCount,\r\n slideCountNew: slideCountNew,\r\n index: index,\r\n indexCached: indexCached,\r\n displayIndex: getCurrentSlide(),\r\n navCurrentIndex: navCurrentIndex,\r\n navCurrentIndexCached: navCurrentIndexCached,\r\n pages: pages,\r\n pagesCached: pagesCached,\r\n sheet: sheet,\r\n isOn: isOn,\r\n event: e || {},\r\n };\r\n }\r\n \r\n return {\r\n version: '2.9.2',\r\n getInfo: info,\r\n events: events,\r\n goTo: goTo,\r\n play: play,\r\n pause: pause,\r\n isOn: isOn,\r\n updateSliderHeight: updateInnerWrapperHeight,\r\n refresh: initSliderTransform,\r\n destroy: destroy,\r\n rebuild: function () {\r\n return tns(extend(options, optionsElements));\r\n }\r\n };\r\n };\r\n \r\n ","// get css-calc \n// @return - false | calc | -webkit-calc | -moz-calc\n// @usage - var calc = getCalc(); \nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function calc() {\n var doc = document, \n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'), \n result = false;\n\n body.appendChild(div);\n try {\n var str = '(10px * 10)',\n vals = ['calc' + str, '-moz-calc' + str, '-webkit-calc' + str],\n val;\n for (var i = 0; i < 3; i++) {\n val = vals[i];\n div.style.width = val;\n if (div.offsetWidth === 100) { \n result = val.replace(str, ''); \n break;\n }\n }\n } catch (e) {}\n \n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return result;\n}","// get subpixel support value\n// @return - boolean\nimport { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function percentageLayout() {\n // check subpixel layout supporting\n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n wrapper = doc.createElement('div'),\n outer = doc.createElement('div'),\n str = '',\n count = 70,\n perPage = 3,\n supported = false;\n\n wrapper.className = \"tns-t-subp2\";\n outer.className = \"tns-t-ct\";\n\n for (var i = 0; i < count; i++) {\n str += '
';\n }\n\n outer.innerHTML = str;\n wrapper.appendChild(outer);\n body.appendChild(wrapper);\n\n supported = Math.abs(wrapper.getBoundingClientRect().left - outer.children[count - perPage].getBoundingClientRect().left) < 2;\n\n body.fake ? resetFakeBody(body, docOverflow) : wrapper.remove();\n\n return supported;\n}","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function mediaquerySupport () {\n if (window.matchMedia || window.msMatchMedia) {\n return true;\n }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n div = doc.createElement('div'),\n style = doc.createElement('style'),\n rule = '@media all and (min-width:1px){.tns-mq-test{position:absolute}}',\n position;\n\n style.type = 'text/css';\n div.className = 'tns-mq-test';\n\n body.appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(doc.createTextNode(rule));\n }\n\n position = window.getComputedStyle ? window.getComputedStyle(div).position : div.currentStyle['position'];\n\n body.fake ? resetFakeBody(body, docOverflow) : div.remove();\n\n return position === \"absolute\";\n}\n","import { getBody } from './getBody.js';\nimport { setFakeBody } from './setFakeBody.js';\nimport { resetFakeBody } from './resetFakeBody.js';\n\nexport function has3DTransforms(tf){\n if (!tf) { return false; }\n if (!window.getComputedStyle) { return false; }\n \n var doc = document,\n body = getBody(),\n docOverflow = setFakeBody(body),\n el = doc.createElement('p'),\n has3d,\n cssTF = tf.length > 9 ? '-' + tf.slice(0, -9).toLowerCase() + '-' : '';\n\n cssTF += 'transform';\n\n // Add it to the body to get the computed style\n body.insertBefore(el, null);\n\n el.style[tf] = 'translate3d(1px,1px,1px)';\n has3d = window.getComputedStyle(el).getPropertyValue(cssTF);\n\n body.fake ? resetFakeBody(body, docOverflow) : el.remove();\n\n return (has3d !== undefined && has3d.length > 0 && has3d !== \"none\");\n}\n","// create and append style sheet\nexport function createStyleSheet (media, nonce) {\n // Create the