{"version":3,"sources":["webpack:///webpack/bootstrap fcf5652d4a1d57089aaa","webpack:///external \"jQuery\"","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/fizzy-ui-utils/utils.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/flickity.js","webpack:///./scripts/util/helper.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/ev-emitter/ev-emitter.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unipointer/unipointer.js","webpack:///./scripts/components/alert.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/get-size/get-size.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/swiper/swiper-bundle.js","webpack:///./scripts/components/language.js","webpack:///./scripts/main.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/dist/flickity.pkgd.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/overlayscrollbars/js/jquery.overlayScrollbars.js","webpack:///./scripts/vendor/flickity-fullscreen.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/index.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/desandro-matches-selector/matches-selector.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/cell.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/slide.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/animate.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/drag.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unidragger/unidragger.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/prev-next-button.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/page-dots.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/player.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/add-remove-cell.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/lazyload.js","webpack:///./scripts/vendor/jquery.txtTruncate.js","webpack:///./scripts/autoload/_bootstrap.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/bootstrap/dist/js/bootstrap.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/popper.js/dist/esm/popper.js","webpack:///(webpack)/buildin/global.js","webpack:///./scripts/util/Router.js","webpack:///./scripts/util/camelCase.js","webpack:///./scripts/routes/common.js","webpack:///./scripts/components/modal.js","webpack:///./scripts/components/nav.js","webpack:///./scripts/components/headroom.js","webpack:///./scripts/vendor/headroom.js","webpack:///./scripts/components/cookie.js","webpack:///./scripts/components/filter.js","webpack:///./scripts/components/dropdown.js","webpack:///./scripts/components/picker.js","webpack:///./scripts/components/video.js","webpack:///./scripts/components/sidebar.js","webpack:///./scripts/components/size-guide.js","webpack:///./scripts/components/instagram.js","webpack:///./scripts/components/newsletter.js","webpack:///./scripts/util/Rule.js","webpack:///./scripts/components/unshippable.js","webpack:///./scripts/components/category.js","webpack:///./scripts/components/product-selected.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/sticky-sidebar/dist/sticky-sidebar.js","webpack:///./scripts/components/product.js","webpack:///./scripts/components/cart.js","webpack:///./scripts/components/search.js","webpack:///./scripts/components/checkout.js","webpack:///./scripts/components/scroll.js","webpack:///./scripts/components/backgroundSwitch.js","webpack:///./scripts/components/articles.js","webpack:///./scripts/components/text-banner.js","webpack:///./scripts/components/forms.js","webpack:///./scripts/components/hero.js","webpack:///./scripts/components/store-locator.js","webpack:///./scripts/components/bullet-list.js","webpack:///./scripts/components/bundles.js","webpack:///./scripts/tracking/hotjar.js","webpack:///./scripts/components/text-editor.js","webpack:///./scripts/tracking/gtag.js","webpack:///./scripts/components/top-banner.js","webpack:///./scripts/components/sliders/index.js","webpack:///./scripts/components/sliders/product-selected.js","webpack:///./scripts/components/sliders/product-slider.js","webpack:///./scripts/components/sliders/feature-slider.js","webpack:///./scripts/components/sliders/article-slider.js","webpack:///./scripts/components/sliders/article-listing.js","webpack:///./scripts/components/sliders/trustbar-slider.js","webpack:///./scripts/components/sliders/cart-slider.js","webpack:///./scripts/components/sliders/category-promo-slider.js","webpack:///./scripts/components/sliders/sub-navigation.js","webpack:///./scripts/components/sliders/product-bundle-page-slider.js","webpack:///C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/vanilla-lazyload/dist/lazyload.min.js","webpack:///./scripts/util/plusItem.js","webpack:///./scripts/util/crossPlatform.js","webpack:///./scripts/util/autoPadding.js","webpack:///./scripts/util/ellipsis.js","webpack:///./scripts/util/backgroundSwitcher.js","webpack:///./scripts/util/articleFilter.js","webpack:///./scripts/util/checkTouch.js","webpack:///./scripts/util/displayProp.js","webpack:///./scripts/util/disableBodyScroll.js","webpack:///./styles/main.scss"],"names":["const","let","this","arguments"],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AC7DA,wB;;;;;;ACAA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,uBAA4C;AAClD,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AChPD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,MAAM,sBAAmB;AACzB,MAAM,sBAAsB;AAC5B,MAAM,uBAAQ;AACd,MAAM,uBAAS;AACf,MAAM,uBAAW;AACjB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oCAAoC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;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A;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;AC/GD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AAC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AO,GAAG,KAAK,C;;;;;;;AClEtB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;;;;;;AC9MD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,KAA4D;AAChE;AACA;AACA,CAAC,qBAAqB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC,UAAU;AAC3C;AACA,uEAAuE;AACvE;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc;;AAEd,2BAA2B;;AAE3B,8BAA8B;;AAE9B;AACA,iBAAiB;;AAEjB;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,2BAA2B;;AAE3B;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,yBAAyB;;AAEzB,sBAAsB;;AAEtB,eAAe;;AAEf;;AAEA,OAAO;AACP;AACA;AACA,OAAO;;AAEP,2BAA2B;;AAE3B,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP,gBAAgB;;AAEhB,eAAe;;AAEf,gBAAgB;;AAEhB,qBAAqB;;AAErB,uBAAuB;;AAEvB;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,kCAAkC;AAC3D;AACA;AACA,SAAS;AACT;AACA,SAAS;;AAET,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;;AAGP,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC,6EAA6E,SAAS;AACtF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4EAA4E;AAC5E,8CAA8C;;AAE9C,yBAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;;AAEA,uBAAuB,iBAAiB;AACxC;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,6CAA6C,QAAQ;AACrD;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;;AAEA,uBAAuB,iBAAiB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT,mBAAmB,iBAAiB;AACpC,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;;AAEA,uBAAuB,iBAAiB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,2BAA2B,qBAAqB;AAChD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA;;AAEA,iDAAiD,QAAQ;AACzD;AACA;AACA,SAAS;AACT,qBAAqB,qBAAqB;AAC1C;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;;AAE/C;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB,qBAAqB,iBAAiB;AACtC,wCAAwC;;AAExC;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA,uBAAuB,kBAAkB;AACzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B;;AAE1B,qBAAqB,iBAAiB;AACtC;;AAEA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,iBAAiB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY;AACrB;;AAEA;AACA;AACA,SAAS,YAAY;AACrB;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS,4DAA4D;AACrE;;;AAGA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,6EAA6E;AAC7E;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,6EAA6E;AAC7E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;;AAEA;AACA;;AAEA,yDAAyD,iBAAiB;AAC1E;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA,WAAW,YAAY;AACvB;;AAEA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK,KAAK;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,oBAAoB;;AAE9D;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;;AAEA,oEAAoE,YAAY,GAAG,aAAa;AAChG;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA,qCAAqC;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB,6BAA6B;AACtD;AACA;AACA,SAAS;;;AAGT;AACA;AACA,SAAS,EAAE;;AAEX;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,6CAA6C,yBAAyB;AACtE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA,OAAO,EAAE;AACT;AACA;AACA;AACA,OAAO,EAAE;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA,OAAO;;AAEP,qBAAqB,kBAAkB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA,sDAAsD;;AAEtD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA,6DAA6D,UAAU;AACvE;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,yCAAyC;AAC7D,SAAS;AACT;;AAEA;AACA;AACA,2CAA2C,yCAAyC;AACpF,SAAS;AACT;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA,uBAAuB,qBAAqB;AAC5C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS;AACT,oBAAoB,aAAa;AACjC,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA,+EAA+E,aAAa;AAC5F,8EAA8E,kEAAkE;AAChJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;;;AAGR;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,qBAAqB,4CAA4C;AACjE;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;;;AAGP,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA,OAAO;;;AAGP,wDAAwD,UAAU;AAClE;;AAEA;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,wDAAwD;;AAExD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,4BAA4B,wBAAwB,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,iCAAiC,GAAG,+BAA+B,GAAG,+BAA+B;AAC9M;;AAEA;AACA,iDAAiD,kBAAkB,4BAA4B,YAAY;AAC3G,OAAO;AACP;AACA,OAAO;;;AAGP;;AAEA;AACA;AACA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,UAAU;AAC9H,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,UAAU;AACxH;AACA,OAAO;;;AAGP,8CAA8C,kBAAkB;;AAEhE;AACA;AACA;AACA,OAAO;;;AAGP,8CAA8C,kBAAkB;;AAEhE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,0CAA0C;AAC9J,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,0CAA0C;AACxJ;;AAEA;AACA,kCAAkC,kBAAkB,QAAQ,2BAA2B,6BAA6B,0CAA0C;AAC9J,SAAS;AACT,kCAAkC,kBAAkB,GAAG,2BAA2B,4BAA4B,0CAA0C;AACxJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP,4CAA4C,EAAE,MAAM,EAAE,MAAM,EAAE;AAC9D;;AAEA;AACA,uDAAuD;;AAEvD;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,mFAAmF,kFAAkF,8BAA8B;;AAEnM;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,sDAAsD,mDAAmD;AACzG;;AAEA,+BAA+B,KAAK;;AAEpC;AACA;AACA,6CAA6C,KAAK;AAClD;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA,4CAA4C,KAAK;AACjD,SAAS;AACT,4CAA4C,KAAK;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mGAAmG,aAAa;AAChH;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA;;AAEA;AACA,gGAAgG,MAAM;AACtG,SAAS;AACT;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6CAA6C;;AAE7C,uCAAuC;;AAEvC;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,sDAAsD,yBAAyB;;AAEtI;AACA,6CAA6C;;AAE7C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,yBAAyB;;AAEzB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mDAAmD,kBAAkB,4BAA4B,UAAU,UAAU,2BAA2B;AAChJ;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,iDAAiD,kBAAkB,4BAA4B,UAAU,UAAU,2BAA2B;AAC9I;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB,8BAA8B,kBAAkB,GAAG,2BAA2B;AAC9E,2CAA2C,kBAAkB;;AAE7D;AACA;;AAEA;AACA,yBAAyB,oBAAoB;AAC7C,2EAA2E,kBAAkB,GAAG,uBAAuB;AACvH;AACA;;AAEA,2CAA2C,kBAAkB;AAC7D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;;AAEP,qBAAqB,yBAAyB;AAC9C;AACA;;AAEA,4CAA4C,QAAQ;AACpD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,yDAAyD;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,8BAA8B,kBAAkB,GAAG,2BAA2B,IAAI,kBAAkB,GAAG,uBAAuB;AAC9H;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD;;AAEjD;;AAEA;AACA;AACA;;AAEA,0FAA0F,sBAAsB;AAChH,iEAAiE;;AAEjE;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAyC;;AAEzC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,yDAAyD;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP,mDAAmD;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA,OAAO;;;AAGP;AACA,0DAA0D;;AAE1D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;;;AAGP;AACA;;AAEA,qBAAqB,uBAAuB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qFAAqF;AACrF;;AAEA;AACA,wFAAwF;AACxF;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,6CAA6C;;AAE7C;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;;AAEA;AACA;AACA,OAAO;;;AAGP;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,uFAAuF;;AAEvF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,8BAA8B,OAAO,8BAA8B;AAC9F;AACA,OAAO;AACP,wBAAwB,8BAA8B;;AAEtD;AACA,0BAA0B,8BAA8B;AACxD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,SAAS;;AAET;AACA,+CAA+C,MAAM;AACrD;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAU;;AAEjB;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,gCAAgC;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS,EAAE;;AAEX,sCAAsC,8BAA8B;;AAEpE,iCAAiC;AACjC,yCAAyC;AACzC,uCAAuC,UAAU;;AAEjD;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA,SAAS;;;AAGT,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT,+BAA+B;;AAE/B;AACA;AACA,SAAS;;;AAGT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA,uCAAuC,mBAAmB;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yCAAyC,mBAAmB;AAC5D;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,yCAAyC,QAAQ;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kCAAkC,qCAAqC,EAAE,iBAAiB,eAAe,qCAAqC,EAAE,aAAa;AAC7J;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC;;AAExC;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,qBAAqB,+DAA+D;AACpF;;AAEA;AACA;AACA,6EAA6E;;AAE7E;;AAEA;AACA;;AAEA;AACA,UAAU;;;AAGV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA,SAAS;;;AAGT,4BAA4B;;AAE5B;AACA;AACA,SAAS;;;AAGT,4BAA4B;;AAE5B;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA,SAAS;AACT;AACA,SAAS;;;AAGT,8BAA8B;;AAE9B,kCAAkC;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA,qCAAqC;;AAErC,mCAAmC;;AAEnC,8BAA8B;;AAE9B;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+BAA+B;;AAE/B;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kHAAkH,yBAAyB,6BAA6B,MAAM,IAAI,MAAM;AACxL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,sDAAsD;AACtD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,OAAO;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,SAAS;AACzC;AACA;;AAEA;AACA,aAAa;AACb,WAAW;;AAEX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC,yBAAyB;AAC9D,SAAS;AACT,oCAAoC,iBAAiB;AACrD;AACA,yCAAyC,yBAAyB,4BAA4B,EAAE;AAChG;AACA;AACA;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,uEAAuE,OAAO;AAC9E;AACA;;AAEA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,QAAQ;AACxD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,uEAAuE,mBAAmB;AAC1F;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6BAA6B;;AAE7B,qCAAqC,yBAAyB,wCAAwC,+BAA+B;AACrI;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,wBAAwB;AACjD;;AAEA;AACA,6DAA6D;;AAE7D;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA,SAAS;AACT;AACA,qDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;;AAGT,qDAAqD;;AAErD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,iDAAiD;;AAEjD;AACA;AACA;;AAEA;AACA;AACA,gGAAgG;AAChG,WAAW,8EAA8E;AACzF,SAAS;AACT;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA,sCAAsC;AACtC;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;;AAGA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK,aAAa;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;;AAGb,sDAAsD;;AAEtD,6GAA6G;;AAE7G;AACA;AACA;;AAEA,iDAAiD;AACjD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,gBAAgB;;AAElE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,iBAAiB;AACjB,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,IAAI;AAC9B,gCAAgC,IAAI;AACpC,4BAA4B,IAAI;AAChC,2BAA2B,IAAI;AAC/B,yBAAyB,IAAI;AAC7B,0BAA0B,IAAI;AAC9B,mCAAmC,IAAI;AACvC,uCAAuC,IAAI;AAC3C,6BAA6B,IAAI;AACjC,wBAAwB,IAAI;AAC5B,8BAA8B,IAAI;AAClC,4BAA4B,IAAI;AAChC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,0CAA0C,kBAAkB,GAAG,SAAS,2BAA2B,kBAAkB,GAAG,SAAS,GAAG,SAAS;AAC7I;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mEAAmE,6CAA6C;;AAEhH;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2GAA2G,yBAAyB,EAAE,OAAO;;AAE7I;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sCAAsC,gBAAgB;AACtD,0CAA0C,yBAAyB;AACnE;;AAEA;AACA;AACA,yDAAyD,QAAQ;AACjE,+DAA+D,yBAAyB;AACxF;;AAEA,yFAAyF,yBAAyB;AAClH,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uEAAuE,cAAc;AACrF;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA,0GAA0G,OAAO,WAAW,OAAO;AACnI;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB,qBAAqB;AAC9C;AACA;AACA,aAAa;AACb,oCAAoC,qBAAqB,UAAU,mBAAmB,MAAM,qBAAqB;AACjH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,6CAA6C,oBAAoB,qCAAqC,kBAAkB;AACxH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,6CAA6C,4BAA4B;AACzE;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B,qBAAqB,EAAE,YAAY;AAC7D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,2CAA2C,OAAO;AAClD,sCAAsC,QAAQ;AAC9C,SAAS;AACT,gDAAgD,OAAO;AACvD,uCAAuC,QAAQ;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,sCAAsC,SAAS;AAC/C,SAAS;AACT,uCAAuC,SAAS;AAChD;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mCAAmC,kCAAkC;;AAErE;AACA,qCAAqC,kCAAkC;AACvE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,iBAAiB,uCAAuC;AACxD,SAAS;AACT,iBAAiB,yBAAyB;AAC1C;;AAEA;AACA,iBAAiB,2BAA2B;AAC5C,SAAS;AACT,iBAAiB,aAAa;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,EAAE,IAAI,EAAE;AAC/C,SAAS;AACT;AACA,uCAAuC,EAAE,IAAI,EAAE,eAAe,aAAa;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qDAAqD,yBAAyB;AAC9E;AACA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,+DAA+D,WAAW;AAC1E;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,+FAA+F,WAAW;AAC1G;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,eAAe,MAAM,eAAe;AAC1F;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;;AAEhE;AACA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,eAAe,MAAM,eAAe;AACvH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,yBAAyB;AAChF;;AAEA;AACA;AACA,gEAAgE,+BAA+B;AAC/F,aAAa;AACb;AACA;AACA;;AAEA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,qCAAqC,wBAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,sEAAsE,WAAW,MAAM,WAAW;AAClG,+EAA+E,WAAW;AAC1F;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8DAA8D,+BAA+B;AAC7F,WAAW;AACX;AACA;;AAEA,uDAAuD,sBAAsB;AAC7E,6DAA6D,sBAAsB;AACnF;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE;AACA,OAAO;;;AAGP;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,yBAAyB;AAC5C;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iDAAiD;;AAEjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT,0DAA0D,kCAAkC;AAC5F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iDAAiD;;AAEjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;;AAGT,2DAA2D,kCAAkC;AAC7F;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oEAAoE,yBAAyB,4BAA4B,MAAM;AAC/H,0CAA0C,oBAAoB,QAAQ,mBAAmB,SAAS,oBAAoB;;AAEtH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uDAAuD,WAAW;AAClE;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,sBAAsB;;AAEpD;AACA;;AAEA;AACA,8FAA8F,mBAAmB,UAAU,kCAAkC;AAC7J;AACA,eAAe;AACf,uEAAuE,kCAAkC,4BAA4B,mBAAmB;AACxJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,wBAAwB,4BAA4B,MAAM;AAClG;AACA;AACA,WAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA,WAAW;AACX,SAAS;AACT,mCAAmC,iCAAiC;AACpE;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8EAA8E;;AAE9E,qDAAqD,cAAc;AACnE;AACA,aAAa;;;AAGb,kCAAkC,iBAAiB;AACnD;AACA;AACA,WAAW;AACX,sDAAsD,4BAA4B;AAClF;AACA,sDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,uBAAuB,wBAAwB;AAC/C;;AAEA;AACA,2DAA2D;;AAE3D;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;;AAEA;AACA,4BAA4B;;AAE5B;AACA,sBAAsB;AACtB;;AAEA;AACA;;AAEA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;;AAEA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,OAAO;AACzD,gCAAgC,OAAO,KAAK,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,8EAA8E,EAAE,OAAO,EAAE;AACzF;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;;AAEtC;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA,qEAAqE,oBAAoB;AACzF;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uEAAuE,EAAE,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE;AAClI;AACA,SAAS,EAAE;;AAEX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;;AAGT;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,qCAAqC;AAC5E,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,KAAK,GAAG,IAAI,GAAG,MAAM;AAC1C,SAAS;AACT,qBAAqB,IAAI,GAAG,MAAM;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,wDAAwD,YAAY;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA,0DAA0D,yBAAyB,cAAc,QAAQ;AACzG;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sDAAsD,uDAAuD;AAC7G;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wDAAwD,YAAY;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;;AAEA,sEAAsE;AACtE;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B;;AAE7B;AACA;AACA;;AAEA,gGAAgG,aAAa;AAC7G,gGAAgG,aAAa;AAC7G,yEAAyE,oEAAoE,uFAAuF;AACpO;;AAEA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,qDAAqD;AACrD;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA,aAAa;;;AAGb,oHAAoH,iBAAiB;AACrI,oHAAoH,iBAAiB;;AAErI;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;;AAGT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,sBAAsB;AAC/C,0EAA0E,qBAAqB;AAC/F;AACA,SAAS;AACT,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;;;AAGA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA,WAAW;AACX;;AAEA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb,WAAW;;;AAGX;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS,sBAAsB;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA,kFAAkF,aAAa;AAC/F;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2CAA2C,kCAAkC;AAC7E,SAAS;;AAET;AACA;AACA;;AAEA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,gDAAgD,kBAAkB;AAClE;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA,OAAO;AACP;AACA;;AAEA,qBAAqB,yBAAyB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,gDAAgD,kBAAkB;AAClE;;AAEA;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,0BAA0B;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,kCAAkC,qCAAqC,EAAE,OAAO;;AAEhF;AACA,oCAAoC,qCAAqC;AACzE;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,0BAA0B;AACnD;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA,SAAS;AACT;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,2BAA2B,GAAG,MAAM,GAAG;AAClD;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,YAAY;AACrC,aAAa;AACb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uCAAuC,+BAA+B,eAAe,8BAA8B,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG;;AAE3J;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,8BAA8B;AAChG;AACA;;AAEA;AACA,iEAAiE,kCAAkC;AACnG;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD,eAAe;AACjE,0CAA0C,eAAe;AACzD,SAAS;;AAET;AACA;AACA,wDAAwD,sCAAsC,MAAM,iBAAiB,yCAAyC,mBAAmB;AACjL,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO,OAAO,OAAO,qBAAqB,0BAA0B,MAAM,2BAA2B;AACpJ;AACA;;AAEA;AACA,kDAAkD,QAAQ,cAAc,0CAA0C,eAAe,2CAA2C;AAC5K;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,gDAAgD,WAAW,KAAK,OAAO;AACvE;AACA,oDAAoD,YAAY;;AAEhE;AACA,wDAAwD,WAAW,KAAK,OAAO;AAC/E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,uBAAuB,mBAAmB;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2CAA2C,GAAG,MAAM,GAAG,mBAAmB,QAAQ,eAAe,QAAQ;AACzG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC,+CAA+C,YAAY;AAC3D;AACA;AACA;AACA;AACA;AACA,qEAAqE;;AAErE;AACA,uCAAuC;;AAEvC;AACA;AACA;;AAEA;AACA;AACA,0EAA0E;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,WAAW,KAAK,WAAW,KAAK,WAAW,eAAe,QAAQ,eAAe,QAAQ,aAAa,MAAM;AAC5J;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,kBAAkB,MAAM;AACxB;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;;;AAGX;AACA,+BAA+B,MAAM,QAAQ,yCAAyC,KAAK,gCAAgC;AAC3H,WAAW,EAAE;;AAEb;AACA;AACA,WAAW;AACX;AACA;AACA,0CAA0C,KAAK,eAAe,KAAK,eAAe,KAAK;AACvF,8DAA8D,qDAAqD,cAAc,qDAAqD;AACtL;AACA,2CAA2C,gBAAgB,IAAI,aAAa,GAAG,YAAY,EAAE;;AAE7F;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AAC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AAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD,IAAI;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gDAAgD,UAAU;AAC1D;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAgC,OAAO,6jBAAE;AAC7C,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAAqD,OAAO,klBAAE;AAClE,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,qBAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAA4C;AAClD,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,GAAG;AACH;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAmB;AACzB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,uCAA4B,OAAO,yjBAAE;AACzC,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA8B;AAClC,MAAM,0BAAsB;AAC5B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAuB;AAC7B,MAAM,0BAAmB;AACzB,MAAM,0BAAsB;AAC5B,MAAM,0BAAQ;AACd,MAAM,0BAAS;AACf,MAAM,0BAAW;AACjB,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,iCAAiC;AAC5C,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,kBAAkB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,cAAc;AAC3B;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,wBAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,oCAAoC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,iCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA2B;AAC/B,MAAM,0BAAY;AAClB,MAAM,2BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB,EAAE,sBAAsB,eAAe;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAuC;AAC3C,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAgC;AACpC,MAAM,0BAAY;AAClB,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;;;AAIA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA6B;AACjC,MAAM,0BAAuB;AAC7B,MAAM,0BAAsB;AAC5B,MAAM,0BAAY;AAClB,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAsC;AAC1C,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA+B;AACnC,MAAM,0BAAY;AAClB,MAAM,0BAAsB;AAC5B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAA4B;AAChC,MAAM,0BAAY;AAClB,MAAM,2BAAQ;AACd,MAAM,2BAAoB;AAC1B,MAAM,2BAAa;AACnB,MAAM,2BAAU;AAChB,MAAM,2BAAmB;AACzB,MAAM,2BAAY;AAClB,KAAK,oCAAE,OAAO;AAAA;AAAA,oHAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAyC;AAC7C,MAAM,2BAAmB;AACzB,MAAM,0BAAsB;AAC5B,KAAK,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE;AAChB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;AAID;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;;AAEA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAoC;AACxC,MAAM,0BAAuB;AAC7B,KAAK,kCAAE;AACP;AACA,KAAK,gDAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;;;AAIA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,iCAAiC;AAC5C,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,qBAAqB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,2BAAmB;AACzB,MAAM,2BAA2B;AACjC,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;;ACt+ID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,IAA0C;AAClD,QAAQ,iCAAO,CAAC,sBAAQ,CAAC,mCAAE,qBAAqB,+DAA+D,EAAE;AAAA,oGAAC;AAClH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE;AAC1B,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,qBAAqB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oCAAoC;AAClE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA,uFAAuF,2CAA2C,EAAE;AACpI,aAAa;;AAEb;AACA;AACA,yBAAyB,WAAW;AACpC;AACA;AACA,oFAAoF,gCAAgC,EAAE;AACtH,aAAa;;AAEb;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,0BAA0B,sBAAsB;AAChD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA,+BAA+B,oBAAoB;AACnD;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;;AAGb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,4GAA4G;;AAEtJ;AACA,8CAA8C;AAC9C;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,EAAE;AAC/D;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,gDAAgD;AAChD,wDAAwD;AACxD,iEAAiE,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mFAAmF,EAAE;;AAErF;AACA;AACA,kEAAkE;AAClE,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,kDAAkD,8BAA8B;AAChF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D,4CAA4C;AACtG;AACA;AACA;AACA,8DAA8D,yDAAyD;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,EAAE;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,aAAa;;AAEtC;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB,iDAAiD,eAAe;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,qCAAqC;AAClE;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,mDAAmD,0EAA0E;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,yFAAyF,EAAE;AAC3F;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB,YAAY;AACrC;AACA,qBAAqB;AACrB;AACA;AACA,iBAAiB;;AAEjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,mCAAmC;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,6CAA6C;AAC7C,2CAA2C;AAC3C,qCAAqC;AACrC,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;;AAEA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,iCAAiC;AACjC,6CAA6C;AAC7C,yCAAyC;AACzC,oCAAoC;AACpC,qCAAqC;AACrC,oCAAoC;AACpC,2CAA2C;AAC3C,wCAAwC;AACxC,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,uBAAuB;AACjD,iEAAiE,uBAAuB;AACxF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,+DAA+D;AACxH;AACA;AACA;AACA;AACA,iEAAiE,4EAA4E,gBAAgB;AAC7J;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,6BAA6B;AACzD;;;AAGA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;AACA;AACA;AACA,uCAAuC,2BAA2B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;AAC9C,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA,yD;AACA;AACA;AACA,sE;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,mIAAmI;;AAEnI;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE;AAC1C;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qE;AACA,8M;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D;AAC1D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8FAA8F;;AAE9F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8FAA8F;AAC9F;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA,8DAA8D;;AAE9D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C,iDAAiD;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,oDAAoD;AACpD,mDAAmD;AACnD,8CAA8C;AAC9C,2CAA2C;AAC3C,4CAA4C;AAC5C,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4DAA4D;AAC5D,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,WAAW;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gLAAgL;AAChL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mDAAmD,gBAAgB;AACnE;;;AAGA;;AAEA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;;AAEA,mDAAmD;AACnD,2DAA2D;;AAE3D;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kJAAkJ;AAClJ;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mHAAmH;;AAEnH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+NAA+N;AAC/N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0HAA0H;AAC1H,iHAAiH;AACjH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,yCAAyC;AACzC,kDAAkD;;AAElD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,wCAAwC;AACvG;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,mDAAmD,qBAAqB;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,2BAA2B;AACrD;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C;AACA,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,mGAAmG;AACjI;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,iCAAiC;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,yBAAyB,kBAAkB;AAC3C,mFAAmF,EAAE;AACrF;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,+BAA+B;AAC/D,qB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,sBAAsB;AACxD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC,uBAAuB,oBAAoB;AAC3C,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD,6BAA6B,qBAAqB;AAClD,2BAA2B,qBAAqB;AAChD,oCAAoC,qBAAqB;AACzD,oCAAoC,qBAAqB;AACzD,yCAAyC,qBAAqB;AAC9D,kCAAkC,qBAAqB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8BAA8B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2G;AACA,uCAAuC,gCAAgC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8CAA8C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,EAAE;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,+EAA+E,kCAAkC,sBAAsB,kCAAkC,qBAAqB;AAC5N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,wHAAwH;AACtJ;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,4DAA4D;AAC5D,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kCAAkC,2BAA2B;AAC7D;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,oDAAoD,EAAE;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,EAAE;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA,wDAAwD;AACxD,8DAA8D;AAC9D,8DAA8D;AAC9D,sDAAsD;;AAEtD;AACA,2CAA2C,EAAE;;AAE7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uEAAuE,oCAAoC,EAAE;AAC7G;;AAEA;AACA;AACA;AACA;AACA,kEAAkE,oBAAoB,EAAE;AACxF;AACA,gEAAgE,0BAA0B,EAAE;;AAE5F;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,EAAE;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,EAAE;;AAErD;AACA,yEAAyE,EAAE;AAC3E;;AAEA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,yCAAyC;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA,oEAAoE;AACpE;AACA,mEAAmE,EAAE,yBAAyB;AAC9F;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA,uDAAuD,mCAAmC,EAAE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACpxKA;;;;;;;AAOA,EAAE,UAAU,MAAM,EAAE,OAAO,GAAG;;;EAG5B,KAAK,IAAyC,GAAG;;IAE/C,iCAAQ;MACN,uBAAmB,CACrB,CAAC,oCAAE,OAAO;AAAA;AAAA;AAAA,oGAAE,CAAC;GACd,MAAM,KAAK,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC,OAAO,GAA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;;;;;ACpDD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAmB;AACzB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;ACrGD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,oCAAQ,OAAO;AAAA;AAAA;AAAA;AAAA,oGAAE;AACrB,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA,CAAC;;;;;;;ACzED;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;;;;;;ACxMD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO,IAAI,YAAY,OAAO,UAAU,QAAQ;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB,EAAE,sBAAsB,eAAe;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;ACxYD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yBAAyB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;ACtRD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AClND;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AC3LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,sBAAY;AAClB,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AC9LD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,CAAC;;;;;;;AChKD;AACA;AACA;AACA;AACA,OAAO,IAAyC;AAChD;AACA,IAAI,iCAAQ;AACZ,MAAM,sBAAY;AAClB,MAAM,sBAAsB;AAC5B,KAAK,mCAAE;AACP;AACA,KAAK;AAAA,oGAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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ACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,oBAAoB;AAC/B;AACA,WAAW,OAAO;AAClB,YAAY,OAAO;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA,oBAAoB;AACpB;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;;AAEA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA,cAAc;AACd;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd,mBAAmB;AACnB,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,QAAQ;AACtB,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,gBAAgB;;AAE5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,gBAAgB;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB,yDAAyD;;AAE9E;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B,2BAA2B;AAC3B,gCAAgC;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gDAAgD;;AAEhD;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,cAAc;AAC5B;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB,GAAG;;AAEH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,4BAA4B;AAC5B;;AAEA,qCAAqC;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,WAAW;AACzB,cAAc,OAAO;AACrB,aAAa,WAAW;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,MAAM;AACpB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,mBAAmB;AAClC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,aAAa;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA,eAAe,QAAQ;AACvB;AACA,eAAe,WAAW;AAC1B;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,YAAY;AAC1B,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB,cAAc,OAAO;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,IAAI;AACJ;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,WAAW,WAAW;AACtB;;AAEA;AACA;AACA,WAAW,WAAW;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,4BAA4B;AACzC,aAAa,YAAY;AACzB,aAAa,OAAO;AACpB,cAAc,OAAO;AACrB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,cAAc;AACd,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B,iDAAiD,uCAAuC,kDAAkD;AAC1I,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;AACrB;AACA;;;AAGA;AACA;AACA;;AAEe,qEAAM,EAAC;AACtB;;;;;;;;ACphFA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;ACpBA;AAAoC;;;;;;;;;;AAUpC,IAAM,MAAM,GAMV,eAAW,CAAC,MAAM,EAAE;EAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACvB,CAAC;;AAED;CACC;CACA;CACA;CACA;CACA;AACD,qBAAI,kBAAC,KAAK,EAAE,KAAc,EAAE,GAAG,EAAE,CAAhB;iCAAA,GAAG,MAAM;AAAQ;EAChC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE;IAC/B,QAAQ,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;MAC/C,OAAO,EAAE,IAAI;MACb,MAAM,EAAE;QACN,YAAK;QACL,EAAE,EAA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ACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,mBAAmB;AAClC,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;;AAEX;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,iDAAiD,gCAAgC;AACjF,iDAAiD,gCAAgC;;AAEjF;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;;AAEA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;;AAEA,qBAAqB,UAAU,WAAW;AAC1C;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA,0CAA0C,wBAAwB,oBAAoB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA,4CAA4C,2BAA2B;AACvE,4CAA4C;AAC5C,kEAAkE;;AAElE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,wGAAwG;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA,4FAA4F,0EAA0E;AACtK;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,oDAAoD,iBAAiB;AACrE,oDAAoD,iBAAiB;;AAErE;AACA;;AAEA;;AAEA,0BAA0B,UAAU,WAAW;;AAE/C,4BAA4B;AAC5B,4BAA4B;;AAE5B;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA,+EAA+E;AAC/E;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,kEAAkE;AAClE;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B,iBAAiB,OAAO;AACxB;;AAEA,KAAK;AACL;AACA;AACA;AACA,qEAAqE;AACrE;AACA;;AAEA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","file":"scripts/main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/wp-content/themes/dailysports/dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap fcf5652d4a1d57089aaa","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'desandro-matches-selector/matches-selector'\n    ], function( matchesSelector ) {\n      return factory( window, matchesSelector );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) {\n    return [];\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  elems.forEach( function( elem ) {\n    // check that elem is an actual element\n    if ( !( elem instanceof HTMLElement ) ) {\n      return;\n    }\n    // add elem if no selector\n    if ( !selector ) {\n      ffElems.push( elem );\n      return;\n    }\n    // filter & find items if we have a selector\n    // filter\n    if ( matchesSelector( elem, selector ) ) {\n      ffElems.push( elem );\n    }\n    // find children\n    var childElems = elem.querySelectorAll( selector );\n    // concat childElems to filterFound array\n    for ( var i=0; i < childElems.length; i++ ) {\n      ffElems.push( childElems[i] );\n    }\n  });\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    clearTimeout( timeout );\n\n    var args = arguments;\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n  var readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( callback );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', callback );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var dataAttr = 'data-' + dashedNamespace;\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var elems = utils.makeArray( dataAttrElems )\n      .concat( utils.makeArray( jsDashElems ) );\n    var dataOptionsAttr = dataAttr + '-options';\n    var jQuery = window.jQuery;\n\n    elems.forEach( function( elem ) {\n      var attr = elem.getAttribute( dataAttr ) ||\n        elem.getAttribute( dataOptionsAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n          ': ' + error );\n        }\n        return;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    });\n\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/fizzy-ui-utils/utils.js\n// module id = 1\n// module chunks = 0","// Flickity main\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter',\n      'get-size/get-size',\n      'fizzy-ui-utils/utils',\n      './cell',\n      './slide',\n      './animate'\n    ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n      return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter'),\n      require('get-size'),\n      require('fizzy-ui-utils'),\n      require('./cell'),\n      require('./slide'),\n      require('./animate')\n    );\n  } else {\n    // browser global\n    var _Flickity = window.Flickity;\n\n    window.Flickity = factory(\n      window,\n      window.EvEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      _Flickity.Cell,\n      _Flickity.Slide,\n      _Flickity.animatePrototype\n    );\n  }\n\n}( window, function factory( window, EvEmitter, getSize,\n  utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n  elems = utils.makeArray( elems );\n  while ( elems.length ) {\n    toElem.appendChild( elems.shift() );\n  }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // do not initialize twice on same element\n  if ( this.element.flickityGUID ) {\n    var instance = instances[ this.element.flickityGUID ];\n    instance.option( options );\n    return instance;\n  }\n\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // kick things off\n  this._create();\n}\n\nFlickity.defaults = {\n  accessibility: true,\n  // adaptiveHeight: false,\n  cellAlign: 'center',\n  // cellSelector: undefined,\n  // contain: false,\n  freeScrollFriction: 0.075, // friction when free-scrolling\n  friction: 0.28, // friction when selecting\n  namespaceJQueryEvents: true,\n  // initialIndex: 0,\n  percentPosition: true,\n  resize: true,\n  selectedAttraction: 0.025,\n  setGallerySize: true\n  // watchCSS: false,\n  // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n  // add id for Flickity.data\n  var id = this.guid = ++GUID;\n  this.element.flickityGUID = id; // expando\n  instances[ id ] = this; // associate via id\n  // initial properties\n  this.selectedIndex = 0;\n  // how many frames slider has been in same position\n  this.restingFrames = 0;\n  // initial physics properties\n  this.x = 0;\n  this.velocity = 0;\n  this.originSide = this.options.rightToLeft ? 'right' : 'left';\n  // create viewport & slider\n  this.viewport = document.createElement('div');\n  this.viewport.className = 'flickity-viewport';\n  this._createSlider();\n\n  if ( this.options.resize || this.options.watchCSS ) {\n    window.addEventListener( 'resize', this );\n  }\n\n  // add listeners from on option\n  for ( var eventName in this.options.on ) {\n    var listener = this.options.on[ eventName ];\n    this.on( eventName, listener );\n  }\n\n  Flickity.createMethods.forEach( function( method ) {\n    this[ method ]();\n  }, this );\n\n  if ( this.options.watchCSS ) {\n    this.watchCSS();\n  } else {\n    this.activate();\n  }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n  if ( this.isActive ) {\n    return;\n  }\n  this.isActive = true;\n  this.element.classList.add('flickity-enabled');\n  if ( this.options.rightToLeft ) {\n    this.element.classList.add('flickity-rtl');\n  }\n\n  this.getSize();\n  // move initial cell elements so they can be loaded as cells\n  var cellElems = this._filterFindCellElements( this.element.children );\n  moveElements( cellElems, this.slider );\n  this.viewport.appendChild( this.slider );\n  this.element.appendChild( this.viewport );\n  // get cells from children\n  this.reloadCells();\n\n  if ( this.options.accessibility ) {\n    // allow element to focusable\n    this.element.tabIndex = 0;\n    // listen for key presses\n    this.element.addEventListener( 'keydown', this );\n  }\n\n  this.emitEvent('activate');\n  this.selectInitialIndex();\n  // flag for initial activation, for using initialIndex\n  this.isInitActivated = true;\n  // ready event. #493\n  this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n  // slider element does all the positioning\n  var slider = document.createElement('div');\n  slider.className = 'flickity-slider';\n  slider.style[ this.originSide ] = 0;\n  this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n  // collection of item elements\n  this.cells = this._makeCells( this.slider.children );\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n  var cellElems = this._filterFindCellElements( elems );\n\n  // create new Flickity for collection\n  var cells = cellElems.map( function( cellElem ) {\n    return new Cell( cellElem, this );\n  }, this );\n\n  return cells;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n  return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n  // size all cells\n  this._sizeCells( this.cells );\n  // position all cells\n  this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n  index = index || 0;\n  // also measure maxCellHeight\n  // start 0 if positioning all cells\n  this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n  var cellX = 0;\n  // get cellX\n  if ( index > 0 ) {\n    var startCell = this.cells[ index - 1 ];\n    cellX = startCell.x + startCell.size.outerWidth;\n  }\n  var len = this.cells.length;\n  for ( var i=index; i < len; i++ ) {\n    var cell = this.cells[i];\n    cell.setPosition( cellX );\n    cellX += cell.size.outerWidth;\n    this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n  }\n  // keep track of cellX for wrap-around\n  this.slideableWidth = cellX;\n  // slides\n  this.updateSlides();\n  // contain slides target\n  this._containSlides();\n  // update slidesWidth\n  this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n  cells.forEach( function( cell ) {\n    cell.getSize();\n  });\n};\n\n// --------------------------  -------------------------- //\n\nproto.updateSlides = function() {\n  this.slides = [];\n  if ( !this.cells.length ) {\n    return;\n  }\n\n  var slide = new Slide( this );\n  this.slides.push( slide );\n  var isOriginLeft = this.originSide == 'left';\n  var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n  var canCellFit = this._getCanCellFit();\n\n  this.cells.forEach( function( cell, i ) {\n    // just add cell if first cell in slide\n    if ( !slide.cells.length ) {\n      slide.addCell( cell );\n      return;\n    }\n\n    var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n      ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n    if ( canCellFit.call( this, i, slideWidth ) ) {\n      slide.addCell( cell );\n    } else {\n      // doesn't fit, new slide\n      slide.updateTarget();\n\n      slide = new Slide( this );\n      this.slides.push( slide );\n      slide.addCell( cell );\n    }\n  }, this );\n  // last slide\n  slide.updateTarget();\n  // update .selectedSlide\n  this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n  var groupCells = this.options.groupCells;\n  if ( !groupCells ) {\n    return function() {\n      return false;\n    };\n  } else if ( typeof groupCells == 'number' ) {\n    // group by number. 3 -> [0,1,2], [3,4,5], ...\n    var number = parseInt( groupCells, 10 );\n    return function( i ) {\n      return ( i % number ) !== 0;\n    };\n  }\n  // default, group by width of slide\n  // parse '75%\n  var percentMatch = typeof groupCells == 'string' &&\n    groupCells.match(/^(\\d+)%$/);\n  var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n  return function( i, slideWidth ) {\n    return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n  };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n  this.positionCells();\n  this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n  this.setCellAlign();\n  this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n  // cell align, then based on origin side\n  center: {\n    left: 0.5,\n    right: 0.5\n  },\n  left: {\n    left: 0,\n    right: 1\n  },\n  right: {\n    right: 0,\n    left: 1\n  }\n};\n\nproto.setCellAlign = function() {\n  var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n  this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n  if ( this.options.setGallerySize ) {\n    var height = this.options.adaptiveHeight && this.selectedSlide ?\n      this.selectedSlide.height : this.maxCellHeight;\n    this.viewport.style.height = height + 'px';\n  }\n};\n\nproto._getWrapShiftCells = function() {\n  // only for wrap-around\n  if ( !this.options.wrapAround ) {\n    return;\n  }\n  // unshift previous cells\n  this._unshiftCells( this.beforeShiftCells );\n  this._unshiftCells( this.afterShiftCells );\n  // get before cells\n  // initial gap\n  var gapX = this.cursorPosition;\n  var cellIndex = this.cells.length - 1;\n  this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n  // get after cells\n  // ending gap between last cell and end of gallery viewport\n  gapX = this.size.innerWidth - this.cursorPosition;\n  // start cloning at first cell, working forwards\n  this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n  // keep adding cells until the cover the initial gap\n  var cells = [];\n  while ( gapX > 0 ) {\n    var cell = this.cells[ cellIndex ];\n    if ( !cell ) {\n      break;\n    }\n    cells.push( cell );\n    cellIndex += increment;\n    gapX -= cell.size.outerWidth;\n  }\n  return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n  if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n    return;\n  }\n  var isRightToLeft = this.options.rightToLeft;\n  var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n  var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n  var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n  // content is less than gallery size\n  var isContentSmaller = contentWidth < this.size.innerWidth;\n  // bounds\n  var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n  var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n  // contain each cell target\n  this.slides.forEach( function( slide ) {\n    if ( isContentSmaller ) {\n      // all cells fit inside gallery\n      slide.target = contentWidth * this.cellAlign;\n    } else {\n      // contain to bounds\n      slide.target = Math.max( slide.target, beginBound );\n      slide.target = Math.min( slide.target, endBound );\n    }\n  }, this );\n};\n\n// -----  ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery && this.$element ) {\n    // default trigger with type if no event\n    type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n    var $event = type;\n    if ( event ) {\n      // create jQuery event\n      var jQEvent = jQuery.Event( event );\n      jQEvent.type = type;\n      $event = jQEvent;\n    }\n    this.$element.trigger( $event, args );\n  }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n  if ( !this.isActive ) {\n    return;\n  }\n  index = parseInt( index, 10 );\n  this._wrapSelect( index );\n\n  if ( this.options.wrapAround || isWrap ) {\n    index = utils.modulo( index, this.slides.length );\n  }\n  // bail if invalid index\n  if ( !this.slides[ index ] ) {\n    return;\n  }\n  var prevIndex = this.selectedIndex;\n  this.selectedIndex = index;\n  this.updateSelectedSlide();\n  if ( isInstant ) {\n    this.positionSliderAtSelected();\n  } else {\n    this.startAnimation();\n  }\n  if ( this.options.adaptiveHeight ) {\n    this.setGallerySize();\n  }\n  // events\n  this.dispatchEvent( 'select', null, [ index ] );\n  // change event if new index\n  if ( index != prevIndex ) {\n    this.dispatchEvent( 'change', null, [ index ] );\n  }\n  // old v1 event name, remove in v3\n  this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n  var len = this.slides.length;\n  var isWrapping = this.options.wrapAround && len > 1;\n  if ( !isWrapping ) {\n    return index;\n  }\n  var wrapIndex = utils.modulo( index, len );\n  // go to shortest\n  var delta = Math.abs( wrapIndex - this.selectedIndex );\n  var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n  var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n  if ( !this.isDragSelect && backWrapDelta < delta ) {\n    index += len;\n  } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n    index -= len;\n  }\n  // wrap position so slider is within normal area\n  if ( index < 0 ) {\n    this.x -= this.slideableWidth;\n  } else if ( index >= len ) {\n    this.x += this.slideableWidth;\n  }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n  var slide = this.slides[ this.selectedIndex ];\n  // selectedIndex could be outside of slides, if triggered before resize()\n  if ( !slide ) {\n    return;\n  }\n  // unselect previous selected slide\n  this.unselectSelectedSlide();\n  // update new selected slide\n  this.selectedSlide = slide;\n  slide.select();\n  this.selectedCells = slide.cells;\n  this.selectedElements = slide.getCellElements();\n  // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n  // Remove in v3?\n  this.selectedCell = slide.cells[0];\n  this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n  if ( this.selectedSlide ) {\n    this.selectedSlide.unselect();\n  }\n};\n\nproto.selectInitialIndex = function() {\n  var initialIndex = this.options.initialIndex;\n  // already activated, select previous selectedIndex\n  if ( this.isInitActivated ) {\n    this.select( this.selectedIndex, false, true );\n    return;\n  }\n  // select with selector string\n  if ( initialIndex && typeof initialIndex == 'string' ) {\n    var cell = this.queryCell( initialIndex );\n    if ( cell ) {\n      this.selectCell( initialIndex, false, true );\n      return;\n    }\n  }\n\n  var index = 0;\n  // select with number\n  if ( initialIndex && this.slides[ initialIndex ] ) {\n    index = initialIndex;\n  }\n  // select instantly\n  this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n  // get cell\n  var cell = this.queryCell( value );\n  if ( !cell ) {\n    return;\n  }\n\n  var index = this.getCellSlideIndex( cell );\n  this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n  // get index of slides that has cell\n  for ( var i=0; i < this.slides.length; i++ ) {\n    var slide = this.slides[i];\n    var index = slide.cells.indexOf( cell );\n    if ( index != -1 ) {\n      return i;\n    }\n  }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n  // loop through cells to get the one that matches\n  for ( var i=0; i < this.cells.length; i++ ) {\n    var cell = this.cells[i];\n    if ( cell.element == elem ) {\n      return cell;\n    }\n  }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n  elems = utils.makeArray( elems );\n  var cells = [];\n  elems.forEach( function( elem ) {\n    var cell = this.getCell( elem );\n    if ( cell ) {\n      cells.push( cell );\n    }\n  }, this );\n  return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n  // first check if elem is cell\n  var cell = this.getCell( elem );\n  if ( cell ) {\n    return cell;\n  }\n  // try to get parent cell elem\n  elem = utils.getParent( elem, '.flickity-slider > *' );\n  return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n  if ( !adjCount ) {\n    return this.selectedSlide.getCellElements();\n  }\n  index = index === undefined ? this.selectedIndex : index;\n\n  var len = this.slides.length;\n  if ( 1 + ( adjCount * 2 ) >= len ) {\n    return this.getCellElements();\n  }\n\n  var cellElems = [];\n  for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n    var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n    var slide = this.slides[ slideIndex ];\n    if ( slide ) {\n      cellElems = cellElems.concat( slide.getCellElements() );\n    }\n  }\n  return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n  if ( typeof selector == 'number' ) {\n    // use number as index\n    return this.cells[ selector ];\n  }\n  if ( typeof selector == 'string' ) {\n    // do not select invalid selectors from hash: #123, #/. #791\n    if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n      return;\n    }\n    // use string as selector, get element\n    selector = this.element.querySelector( selector );\n  }\n  // get cell from element\n  return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n  this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n  // HACK iOS does not allow touch events to bubble up?!\n  if ( event.type != 'touchstart' ) {\n    event.preventDefault();\n  }\n  this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n  this.watchCSS();\n  this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.getSize();\n  // wrap values\n  if ( this.options.wrapAround ) {\n    this.x = utils.modulo( this.x, this.slideableWidth );\n  }\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  this.emitEvent('resize');\n  // update selected index for group slides, instant\n  // TODO: position can be lost between groups of various numbers\n  var selectedElement = this.selectedElements && this.selectedElements[0];\n  this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n  var watchOption = this.options.watchCSS;\n  if ( !watchOption ) {\n    return;\n  }\n\n  var afterContent = getComputedStyle( this.element, ':after' ).content;\n  // activate if :after { content: 'flickity' }\n  if ( afterContent.indexOf('flickity') != -1 ) {\n    this.activate();\n  } else {\n    this.deactivate();\n  }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n  // only work if element is in focus\n  var isNotFocused = document.activeElement && document.activeElement != this.element;\n  if ( !this.options.accessibility ||isNotFocused ) {\n    return;\n  }\n\n  var handler = Flickity.keyboardHandlers[ event.keyCode ];\n  if ( handler ) {\n    handler.call( this );\n  }\n};\n\nFlickity.keyboardHandlers = {\n  // left arrow\n  37: function() {\n    var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n    this.uiChange();\n    this[ leftMethod ]();\n  },\n  // right arrow\n  39: function() {\n    var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n    this.uiChange();\n    this[ rightMethod ]();\n  },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n  // TODO remove scrollTo once focus options gets more support\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n  var prevScrollY = window.pageYOffset;\n  this.element.focus({ preventScroll: true });\n  // hack to fix scroll jump after focus, #76\n  if ( window.pageYOffset != prevScrollY ) {\n    window.scrollTo( window.pageXOffset, prevScrollY );\n  }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.element.classList.remove('flickity-enabled');\n  this.element.classList.remove('flickity-rtl');\n  this.unselectSelectedSlide();\n  // destroy cells\n  this.cells.forEach( function( cell ) {\n    cell.destroy();\n  });\n  this.element.removeChild( this.viewport );\n  // move child elements back into element\n  moveElements( this.slider.children, this.element );\n  if ( this.options.accessibility ) {\n    this.element.removeAttribute('tabIndex');\n    this.element.removeEventListener( 'keydown', this );\n  }\n  // set flags\n  this.isActive = false;\n  this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n  this.deactivate();\n  window.removeEventListener( 'resize', this );\n  this.allOff();\n  this.emitEvent('destroy');\n  if ( jQuery && this.$element ) {\n    jQuery.removeData( this.element, 'flickity' );\n  }\n  delete this.element.flickityGUID;\n  delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.flickityGUID;\n  return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n  jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n  jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/flickity.js\n// module id = 2\n// module chunks = 0","// Create Element.remove() function if not exist // BECAUSE IE 11\r\nif (!('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\r\n// var stokpress = {};\r\n\r\nexport const stokpress = {\r\n  init() {\r\n    return true\r\n  },\r\n\r\n  strToBool(str) {\r\n    console.log(typeof str);\r\n    if(typeof str == 'boolean') {\r\n      return str;\r\n    }\r\n    switch(str.toLowerCase().trim()){\r\n      case 'true': case 'yes': case '1': return true;\r\n      case 'false': case 'no': case '0': case null: return false;\r\n      default: return Boolean(str);\r\n    }\r\n  },\r\n\r\n  findAncestor(el, cls) {\r\n    while ((el = el.parentElement) && !el.classList.contains(cls));\r\n    return el;\r\n  },\r\n\r\n  isMobile() {\r\n      let result = false;\r\n      ( function ( a ) {\r\n        result = /Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test( a );\r\n      } )( navigator.userAgent || navigator.vendor || window.opera );\r\n\r\n      return result;\r\n  },\r\n\r\n  isInView(el, view) {\r\n    var rect = el.getBoundingClientRect();\r\n    var html = document.documentElement;\r\n\r\n    if(view == 'completely') {\r\n      // to check if completely visible\r\n      return (\r\n        rect.top >= 0 &&\r\n        rect.bottom <= (window.innerHeight || html.clientHeight)\r\n      );\r\n    } else if(view == 'partially') {\r\n      // to check if partially visible\r\n      return (\r\n        rect.bottom >= 0 &&\r\n        rect.top < (window.innerHeight || html.clientHeight)\r\n      );\r\n    } else {\r\n      // if partially visible or above current fold,\r\n      return (\r\n        rect.top < (window.innerHeight || html.clientHeight)\r\n      );\r\n    }\r\n  },\r\n\r\n  getScript(source, callback) {\r\n      var script = document.createElement( 'script' );\r\n      var prior = document.getElementsByTagName( 'script' )[0];\r\n      script.async = 1;\r\n\r\n      script.onload = script.onreadystatechange = function ( _, isAbort ) {\r\n        if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\r\n          script.onload = script.onreadystatechange = null;\r\n          script = undefined;\r\n\r\n          if ( !isAbort ) {\r\n            if ( callback ) {\r\n              callback();\r\n            }\r\n          }\r\n        }\r\n      };\r\n\r\n      script.src = source;\r\n      prior.parentNode.insertBefore( script, prior );\r\n  },\r\n\r\n  setCookie(cname, cvalue, exdays) {\r\n    var d = new Date();\r\n    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n    var expires = 'expires=' + d.toUTCString();\r\n    document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n  },\r\n\r\n  getCookie(cname) {\r\n    var name = cname + '=';\r\n    var decodedCookie = decodeURIComponent(document.cookie);\r\n    var ca = decodedCookie.split(';');\r\n    for(var i = 0; i <ca.length; i++) {\r\n        var c = ca[i];\r\n        while (c.charAt(0) == ' ') {\r\n            c = c.substring(1);\r\n        }\r\n        if (c.indexOf(name) == 0) {\r\n            return c.substring(name.length, c.length);\r\n        }\r\n    }\r\n    return '';\r\n  },\r\n\r\n  debounce(func, wait, immediate) {\r\n    var timeout;\r\n\r\n    return function() {\r\n      var context = this, args = arguments;\r\n      var later = function() {\r\n        timeout = null;\r\n        if (!immediate) func.apply(context, args);\r\n      };\r\n      var callNow = immediate && !timeout;\r\n      clearTimeout(timeout);\r\n      timeout = setTimeout(later, wait);\r\n      if (callNow) func.apply(context, args);\r\n    };\r\n  },\r\n}\r\n\r\nexport const stokpressViewPort = {\r\n  init() {\r\n    return true\r\n  },\r\n\r\n  documentWidth() {\r\n    let e = window, a = 'inner';\r\n\r\n    if( !( 'innerWidth' in window ) ) {\r\n      a = 'client';\r\n      e = document.documentElement || document.body;\r\n    }\r\n\r\n    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };\r\n  },\r\n}\r\n\r\n// stokpress.cartItems;\r\n\r\n// stokpress.cartHeight = function() {\r\n//   var e = window, a = 'inner';\r\n\r\n//   if( !( 'innerHeight' in window ) ) {\r\n//     a = 'client';\r\n//     e = document.documentElement || document.body;\r\n//   }\r\n\r\n//   (function () {\r\n//       if ( typeof NodeList.prototype.forEach === 'function' ) return false;\r\n//       NodeList.prototype.forEach = Array.prototype.forEach;\r\n//   })();\r\n\r\n//   stokpress.cartItems.forEach(function(element) {\r\n//     element.style.setProperty('--cartheight', e[ a+'Height' ]+'px');\r\n//   });\r\n// }\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/helper.js","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i]\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/ev-emitter/ev-emitter.js\n// module id = 4\n// module chunks = 0","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*global define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.Unipointer = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n  // default to mouse events\n  var startEvent = 'mousedown';\n  if ( window.PointerEvent ) {\n    // Pointer Events\n    startEvent = 'pointerdown';\n  } else if ( 'ontouchstart' in window ) {\n    // Touch Events. iOS Safari\n    startEvent = 'touchstart';\n  }\n  elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n  for ( var i=0; i < touches.length; i++ ) {\n    var touch = touches[i];\n    if ( touch.identifier == this.pointerIdentifier ) {\n      return touch;\n    }\n  }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n  // dismiss clicks from right or middle buttons\n  var button = event.button;\n  if ( button && ( button !== 0 && button !== 1 ) ) {\n    return;\n  }\n  this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n  this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n  this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n  // dismiss right click and other pointers\n  // button = 0 is okay, 1-4 not\n  if ( event.button || this.isPointerDown ) {\n    return;\n  }\n\n  this.isPointerDown = true;\n  // save pointer identifier to match up touch events\n  this.pointerIdentifier = pointer.pointerId !== undefined ?\n    // pointerId for pointer events, touch.indentifier for touch events\n    pointer.pointerId : pointer.identifier;\n\n  this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n  mousedown: [ 'mousemove', 'mouseup' ],\n  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n  if ( !event ) {\n    return;\n  }\n  // get proper events to match start event\n  var events = postStartEvents[ event.type ];\n  // bind events to node\n  events.forEach( function( eventName ) {\n    window.addEventListener( eventName, this );\n  }, this );\n  // save these arguments\n  this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n  // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n  if ( !this._boundPointerEvents ) {\n    return;\n  }\n  this._boundPointerEvents.forEach( function( eventName ) {\n    window.removeEventListener( eventName, this );\n  }, this );\n\n  delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n  this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerMove( event, event );\n  }\n};\n\nproto.ontouchmove = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerMove( event, touch );\n  }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n  this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n  this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n  this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerUp( event, event );\n  }\n};\n\nproto.ontouchend = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerUp( event, touch );\n  }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n  this._pointerReset();\n  this._unbindPostStartEvents();\n  this.pointerDone();\n};\n\nproto._pointerReset = function() {\n  // reset properties\n  this.isPointerDown = false;\n  delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerCancel( event, event );\n  }\n};\n\nproto.ontouchcancel = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerCancel( event, touch );\n  }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n  this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// -----  ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n  return {\n    x: pointer.pageX,\n    y: pointer.pageY\n  };\n};\n\n// -----  ----- //\n\nreturn Unipointer;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unipointer/unipointer.js\n// module id = 5\n// module chunks = 0","var Alert = {};\r\n\r\n(function ( $ ) {\r\n    var target = $( '#js-alert' ),\r\n        image = target.find( '#js-alert-image' ),\r\n        title = target.find( '#js-alert-title' ),\r\n        text = target.find( '#js-alert-text' ),\r\n        button = target.find( '#js-alert-button' ),\r\n        messageContainer = target.find( '#js-alert-message-container' );\r\n\r\n    Alert.show = function ( type, header, message ) {\r\n        if ( target.length === 0 ) {\r\n            return;\r\n        }\r\n\r\n        var buttonClass = button.data( 'classDefault' ),\r\n            imageSource = '',\r\n            messageContainerClass = '';\r\n\r\n        switch ( type ) {\r\n            case 'success':\r\n                buttonClass = button.data( 'classSpecial' );\r\n                imageSource = image.data( 'iconSuccess' );\r\n                messageContainerClass = messageContainer.data( 'classSuccess' );\r\n                break;\r\n            case 'warning':\r\n                imageSource = image.data( 'iconWarning' );\r\n                messageContainerClass = messageContainer.data( 'classWarning' );\r\n                break;\r\n            case 'danger':\r\n                imageSource = image.data( 'iconDanger' );\r\n                messageContainerClass = messageContainer.data( 'classDanger' );\r\n                break;\r\n            default:\r\n                return;\r\n        }\r\n\r\n        image.attr( 'src', imageSource );\r\n\r\n        title.html( header );\r\n        title.attr( 'class', title.data('class-'+ type) );\r\n\r\n        text.html( message );\r\n        text.attr( 'class', text.data('class-'+ type) );\r\n\r\n        button.attr( 'class', buttonClass );\r\n\r\n        messageContainer.attr( 'class', 'modal-body p-0 ' + messageContainerClass );\r\n\r\n        target.modal( 'show' );\r\n    };\r\n\r\n    $( function () {\r\n        if ( target.length === 0 ) {\r\n            return;\r\n        }\r\n\r\n        button.click( function () {\r\n            target.modal( 'hide' );\r\n        } );\r\n    } )\r\n\r\n})( jQuery );\r\n\r\nwindow.Alert = Alert;\r\n\r\nmodule.exports = Alert;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/alert.js","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n  /* jshint strict: false */ /* globals define, module */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    logError( 'Style returned ' + style +\n      '. Are you running this code in a hidden iframe on Firefox? ' +\n      'See https://bit.ly/getsizebug1' );\n  }\n  return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  // -------------------------- box sizing -------------------------- //\n\n  /**\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\n   * IE11 & Firefox<29 measures the inner-width\n   */\n  var div = document.createElement('div');\n  div.style.width = '200px';\n  div.style.padding = '1px 2px 3px 4px';\n  div.style.borderStyle = 'solid';\n  div.style.borderWidth = '1px 2px 3px 4px';\n  div.style.boxSizing = 'border-box';\n\n  var body = document.body || document.documentElement;\n  body.appendChild( div );\n  var style = getStyle( div );\n  // round value for browser zoom. desandro/masonry#928\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n  body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/get-size/get-size.js\n// module id = 7\n// module chunks = 0","/**\n * Swiper 7.0.9\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2021 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: October 18, 2021\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory());\n}(this, (function () { 'use strict';\n\n    /**\n     * SSR Window 4.0.0\n     * Better handling for window object in SSR environment\n     * https://github.com/nolimits4web/ssr-window\n     *\n     * Copyright 2021, Vladimir Kharlampidi\n     *\n     * Licensed under MIT\n     *\n     * Released on: August 25, 2021\n     */\n\n    /* eslint-disable no-param-reassign */\n    function isObject$1(obj) {\n      return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n    }\n\n    function extend$1(target = {}, src = {}) {\n      Object.keys(src).forEach(key => {\n        if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {\n          extend$1(target[key], src[key]);\n        }\n      });\n    }\n\n    const ssrDocument = {\n      body: {},\n\n      addEventListener() {},\n\n      removeEventListener() {},\n\n      activeElement: {\n        blur() {},\n\n        nodeName: ''\n      },\n\n      querySelector() {\n        return null;\n      },\n\n      querySelectorAll() {\n        return [];\n      },\n\n      getElementById() {\n        return null;\n      },\n\n      createEvent() {\n        return {\n          initEvent() {}\n\n        };\n      },\n\n      createElement() {\n        return {\n          children: [],\n          childNodes: [],\n          style: {},\n\n          setAttribute() {},\n\n          getElementsByTagName() {\n            return [];\n          }\n\n        };\n      },\n\n      createElementNS() {\n        return {};\n      },\n\n      importNode() {\n        return null;\n      },\n\n      location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: ''\n      }\n    };\n\n    function getDocument() {\n      const doc = typeof document !== 'undefined' ? document : {};\n      extend$1(doc, ssrDocument);\n      return doc;\n    }\n\n    const ssrWindow = {\n      document: ssrDocument,\n      navigator: {\n        userAgent: ''\n      },\n      location: {\n        hash: '',\n        host: '',\n        hostname: '',\n        href: '',\n        origin: '',\n        pathname: '',\n        protocol: '',\n        search: ''\n      },\n      history: {\n        replaceState() {},\n\n        pushState() {},\n\n        go() {},\n\n        back() {}\n\n      },\n      CustomEvent: function CustomEvent() {\n        return this;\n      },\n\n      addEventListener() {},\n\n      removeEventListener() {},\n\n      getComputedStyle() {\n        return {\n          getPropertyValue() {\n            return '';\n          }\n\n        };\n      },\n\n      Image() {},\n\n      Date() {},\n\n      screen: {},\n\n      setTimeout() {},\n\n      clearTimeout() {},\n\n      matchMedia() {\n        return {};\n      },\n\n      requestAnimationFrame(callback) {\n        if (typeof setTimeout === 'undefined') {\n          callback();\n          return null;\n        }\n\n        return setTimeout(callback, 0);\n      },\n\n      cancelAnimationFrame(id) {\n        if (typeof setTimeout === 'undefined') {\n          return;\n        }\n\n        clearTimeout(id);\n      }\n\n    };\n\n    function getWindow() {\n      const win = typeof window !== 'undefined' ? window : {};\n      extend$1(win, ssrWindow);\n      return win;\n    }\n\n    /**\n     * Dom7 4.0.0\n     * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n     * https://framework7.io/docs/dom7.html\n     *\n     * Copyright 2021, Vladimir Kharlampidi\n     *\n     * Licensed under MIT\n     *\n     * Released on: August 25, 2021\n     */\n    /* eslint-disable no-proto */\n\n    function makeReactive(obj) {\n      const proto = obj.__proto__;\n      Object.defineProperty(obj, '__proto__', {\n        get() {\n          return proto;\n        },\n\n        set(value) {\n          proto.__proto__ = value;\n        }\n\n      });\n    }\n\n    class Dom7 extends Array {\n      constructor(items) {\n        super(...(items || []));\n        makeReactive(this);\n      }\n\n    }\n\n    function arrayFlat(arr = []) {\n      const res = [];\n      arr.forEach(el => {\n        if (Array.isArray(el)) {\n          res.push(...arrayFlat(el));\n        } else {\n          res.push(el);\n        }\n      });\n      return res;\n    }\n\n    function arrayFilter(arr, callback) {\n      return Array.prototype.filter.call(arr, callback);\n    }\n\n    function arrayUnique(arr) {\n      const uniqueArray = [];\n\n      for (let i = 0; i < arr.length; i += 1) {\n        if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n      }\n\n      return uniqueArray;\n    }\n\n\n    function qsa(selector, context) {\n      if (typeof selector !== 'string') {\n        return [selector];\n      }\n\n      const a = [];\n      const res = context.querySelectorAll(selector);\n\n      for (let i = 0; i < res.length; i += 1) {\n        a.push(res[i]);\n      }\n\n      return a;\n    }\n\n    function $(selector, context) {\n      const window = getWindow();\n      const document = getDocument();\n      let arr = [];\n\n      if (!context && selector instanceof Dom7) {\n        return selector;\n      }\n\n      if (!selector) {\n        return new Dom7(arr);\n      }\n\n      if (typeof selector === 'string') {\n        const html = selector.trim();\n\n        if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n          let toCreate = 'div';\n          if (html.indexOf('<li') === 0) toCreate = 'ul';\n          if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n          if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n          if (html.indexOf('<tbody') === 0) toCreate = 'table';\n          if (html.indexOf('<option') === 0) toCreate = 'select';\n          const tempParent = document.createElement(toCreate);\n          tempParent.innerHTML = html;\n\n          for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n            arr.push(tempParent.childNodes[i]);\n          }\n        } else {\n          arr = qsa(selector.trim(), context || document);\n        } // arr = qsa(selector, document);\n\n      } else if (selector.nodeType || selector === window || selector === document) {\n        arr.push(selector);\n      } else if (Array.isArray(selector)) {\n        if (selector instanceof Dom7) return selector;\n        arr = selector;\n      }\n\n      return new Dom7(arrayUnique(arr));\n    }\n\n    $.fn = Dom7.prototype; // eslint-disable-next-line\n\n    function addClass(...classes) {\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      this.forEach(el => {\n        el.classList.add(...classNames);\n      });\n      return this;\n    }\n\n    function removeClass(...classes) {\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      this.forEach(el => {\n        el.classList.remove(...classNames);\n      });\n      return this;\n    }\n\n    function toggleClass(...classes) {\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      this.forEach(el => {\n        classNames.forEach(className => {\n          el.classList.toggle(className);\n        });\n      });\n    }\n\n    function hasClass(...classes) {\n      const classNames = arrayFlat(classes.map(c => c.split(' ')));\n      return arrayFilter(this, el => {\n        return classNames.filter(className => el.classList.contains(className)).length > 0;\n      }).length > 0;\n    }\n\n    function attr(attrs, value) {\n      if (arguments.length === 1 && typeof attrs === 'string') {\n        // Get attr\n        if (this[0]) return this[0].getAttribute(attrs);\n        return undefined;\n      } // Set attrs\n\n\n      for (let i = 0; i < this.length; i += 1) {\n        if (arguments.length === 2) {\n          // String\n          this[i].setAttribute(attrs, value);\n        } else {\n          // Object\n          for (const attrName in attrs) {\n            this[i][attrName] = attrs[attrName];\n            this[i].setAttribute(attrName, attrs[attrName]);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    function removeAttr(attr) {\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].removeAttribute(attr);\n      }\n\n      return this;\n    }\n\n    function transform(transform) {\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].style.transform = transform;\n      }\n\n      return this;\n    }\n\n    function transition$1(duration) {\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n      }\n\n      return this;\n    }\n\n    function on(...args) {\n      let [eventType, targetSelector, listener, capture] = args;\n\n      if (typeof args[1] === 'function') {\n        [eventType, listener, capture] = args;\n        targetSelector = undefined;\n      }\n\n      if (!capture) capture = false;\n\n      function handleLiveEvent(e) {\n        const target = e.target;\n        if (!target) return;\n        const eventData = e.target.dom7EventData || [];\n\n        if (eventData.indexOf(e) < 0) {\n          eventData.unshift(e);\n        }\n\n        if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n          const parents = $(target).parents(); // eslint-disable-line\n\n          for (let k = 0; k < parents.length; k += 1) {\n            if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n          }\n        }\n      }\n\n      function handleEvent(e) {\n        const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n        if (eventData.indexOf(e) < 0) {\n          eventData.unshift(e);\n        }\n\n        listener.apply(this, eventData);\n      }\n\n      const events = eventType.split(' ');\n      let j;\n\n      for (let i = 0; i < this.length; i += 1) {\n        const el = this[i];\n\n        if (!targetSelector) {\n          for (j = 0; j < events.length; j += 1) {\n            const event = events[j];\n            if (!el.dom7Listeners) el.dom7Listeners = {};\n            if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n            el.dom7Listeners[event].push({\n              listener,\n              proxyListener: handleEvent\n            });\n            el.addEventListener(event, handleEvent, capture);\n          }\n        } else {\n          // Live events\n          for (j = 0; j < events.length; j += 1) {\n            const event = events[j];\n            if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n            if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n            el.dom7LiveListeners[event].push({\n              listener,\n              proxyListener: handleLiveEvent\n            });\n            el.addEventListener(event, handleLiveEvent, capture);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    function off(...args) {\n      let [eventType, targetSelector, listener, capture] = args;\n\n      if (typeof args[1] === 'function') {\n        [eventType, listener, capture] = args;\n        targetSelector = undefined;\n      }\n\n      if (!capture) capture = false;\n      const events = eventType.split(' ');\n\n      for (let i = 0; i < events.length; i += 1) {\n        const event = events[i];\n\n        for (let j = 0; j < this.length; j += 1) {\n          const el = this[j];\n          let handlers;\n\n          if (!targetSelector && el.dom7Listeners) {\n            handlers = el.dom7Listeners[event];\n          } else if (targetSelector && el.dom7LiveListeners) {\n            handlers = el.dom7LiveListeners[event];\n          }\n\n          if (handlers && handlers.length) {\n            for (let k = handlers.length - 1; k >= 0; k -= 1) {\n              const handler = handlers[k];\n\n              if (listener && handler.listener === listener) {\n                el.removeEventListener(event, handler.proxyListener, capture);\n                handlers.splice(k, 1);\n              } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n                el.removeEventListener(event, handler.proxyListener, capture);\n                handlers.splice(k, 1);\n              } else if (!listener) {\n                el.removeEventListener(event, handler.proxyListener, capture);\n                handlers.splice(k, 1);\n              }\n            }\n          }\n        }\n      }\n\n      return this;\n    }\n\n    function trigger(...args) {\n      const window = getWindow();\n      const events = args[0].split(' ');\n      const eventData = args[1];\n\n      for (let i = 0; i < events.length; i += 1) {\n        const event = events[i];\n\n        for (let j = 0; j < this.length; j += 1) {\n          const el = this[j];\n\n          if (window.CustomEvent) {\n            const evt = new window.CustomEvent(event, {\n              detail: eventData,\n              bubbles: true,\n              cancelable: true\n            });\n            el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n            el.dispatchEvent(evt);\n            el.dom7EventData = [];\n            delete el.dom7EventData;\n          }\n        }\n      }\n\n      return this;\n    }\n\n    function transitionEnd$1(callback) {\n      const dom = this;\n\n      function fireCallBack(e) {\n        if (e.target !== this) return;\n        callback.call(this, e);\n        dom.off('transitionend', fireCallBack);\n      }\n\n      if (callback) {\n        dom.on('transitionend', fireCallBack);\n      }\n\n      return this;\n    }\n\n    function outerWidth(includeMargins) {\n      if (this.length > 0) {\n        if (includeMargins) {\n          const styles = this.styles();\n          return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n        }\n\n        return this[0].offsetWidth;\n      }\n\n      return null;\n    }\n\n    function outerHeight(includeMargins) {\n      if (this.length > 0) {\n        if (includeMargins) {\n          const styles = this.styles();\n          return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n        }\n\n        return this[0].offsetHeight;\n      }\n\n      return null;\n    }\n\n    function offset() {\n      if (this.length > 0) {\n        const window = getWindow();\n        const document = getDocument();\n        const el = this[0];\n        const box = el.getBoundingClientRect();\n        const body = document.body;\n        const clientTop = el.clientTop || body.clientTop || 0;\n        const clientLeft = el.clientLeft || body.clientLeft || 0;\n        const scrollTop = el === window ? window.scrollY : el.scrollTop;\n        const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n        return {\n          top: box.top + scrollTop - clientTop,\n          left: box.left + scrollLeft - clientLeft\n        };\n      }\n\n      return null;\n    }\n\n    function styles() {\n      const window = getWindow();\n      if (this[0]) return window.getComputedStyle(this[0], null);\n      return {};\n    }\n\n    function css(props, value) {\n      const window = getWindow();\n      let i;\n\n      if (arguments.length === 1) {\n        if (typeof props === 'string') {\n          // .css('width')\n          if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n        } else {\n          // .css({ width: '100px' })\n          for (i = 0; i < this.length; i += 1) {\n            for (const prop in props) {\n              this[i].style[prop] = props[prop];\n            }\n          }\n\n          return this;\n        }\n      }\n\n      if (arguments.length === 2 && typeof props === 'string') {\n        // .css('width', '100px')\n        for (i = 0; i < this.length; i += 1) {\n          this[i].style[props] = value;\n        }\n\n        return this;\n      }\n\n      return this;\n    }\n\n    function each(callback) {\n      if (!callback) return this;\n      this.forEach((el, index) => {\n        callback.apply(el, [el, index]);\n      });\n      return this;\n    }\n\n    function filter(callback) {\n      const result = arrayFilter(this, callback);\n      return $(result);\n    }\n\n    function html(html) {\n      if (typeof html === 'undefined') {\n        return this[0] ? this[0].innerHTML : null;\n      }\n\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].innerHTML = html;\n      }\n\n      return this;\n    }\n\n    function text(text) {\n      if (typeof text === 'undefined') {\n        return this[0] ? this[0].textContent.trim() : null;\n      }\n\n      for (let i = 0; i < this.length; i += 1) {\n        this[i].textContent = text;\n      }\n\n      return this;\n    }\n\n    function is(selector) {\n      const window = getWindow();\n      const document = getDocument();\n      const el = this[0];\n      let compareWith;\n      let i;\n      if (!el || typeof selector === 'undefined') return false;\n\n      if (typeof selector === 'string') {\n        if (el.matches) return el.matches(selector);\n        if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n        if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n        compareWith = $(selector);\n\n        for (i = 0; i < compareWith.length; i += 1) {\n          if (compareWith[i] === el) return true;\n        }\n\n        return false;\n      }\n\n      if (selector === document) {\n        return el === document;\n      }\n\n      if (selector === window) {\n        return el === window;\n      }\n\n      if (selector.nodeType || selector instanceof Dom7) {\n        compareWith = selector.nodeType ? [selector] : selector;\n\n        for (i = 0; i < compareWith.length; i += 1) {\n          if (compareWith[i] === el) return true;\n        }\n\n        return false;\n      }\n\n      return false;\n    }\n\n    function index() {\n      let child = this[0];\n      let i;\n\n      if (child) {\n        i = 0; // eslint-disable-next-line\n\n        while ((child = child.previousSibling) !== null) {\n          if (child.nodeType === 1) i += 1;\n        }\n\n        return i;\n      }\n\n      return undefined;\n    }\n\n    function eq(index) {\n      if (typeof index === 'undefined') return this;\n      const length = this.length;\n\n      if (index > length - 1) {\n        return $([]);\n      }\n\n      if (index < 0) {\n        const returnIndex = length + index;\n        if (returnIndex < 0) return $([]);\n        return $([this[returnIndex]]);\n      }\n\n      return $([this[index]]);\n    }\n\n    function append(...els) {\n      let newChild;\n      const document = getDocument();\n\n      for (let k = 0; k < els.length; k += 1) {\n        newChild = els[k];\n\n        for (let i = 0; i < this.length; i += 1) {\n          if (typeof newChild === 'string') {\n            const tempDiv = document.createElement('div');\n            tempDiv.innerHTML = newChild;\n\n            while (tempDiv.firstChild) {\n              this[i].appendChild(tempDiv.firstChild);\n            }\n          } else if (newChild instanceof Dom7) {\n            for (let j = 0; j < newChild.length; j += 1) {\n              this[i].appendChild(newChild[j]);\n            }\n          } else {\n            this[i].appendChild(newChild);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    function prepend(newChild) {\n      const document = getDocument();\n      let i;\n      let j;\n\n      for (i = 0; i < this.length; i += 1) {\n        if (typeof newChild === 'string') {\n          const tempDiv = document.createElement('div');\n          tempDiv.innerHTML = newChild;\n\n          for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n            this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n          }\n        } else if (newChild instanceof Dom7) {\n          for (j = 0; j < newChild.length; j += 1) {\n            this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n          }\n        } else {\n          this[i].insertBefore(newChild, this[i].childNodes[0]);\n        }\n      }\n\n      return this;\n    }\n\n    function next(selector) {\n      if (this.length > 0) {\n        if (selector) {\n          if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n            return $([this[0].nextElementSibling]);\n          }\n\n          return $([]);\n        }\n\n        if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n        return $([]);\n      }\n\n      return $([]);\n    }\n\n    function nextAll(selector) {\n      const nextEls = [];\n      let el = this[0];\n      if (!el) return $([]);\n\n      while (el.nextElementSibling) {\n        const next = el.nextElementSibling; // eslint-disable-line\n\n        if (selector) {\n          if ($(next).is(selector)) nextEls.push(next);\n        } else nextEls.push(next);\n\n        el = next;\n      }\n\n      return $(nextEls);\n    }\n\n    function prev(selector) {\n      if (this.length > 0) {\n        const el = this[0];\n\n        if (selector) {\n          if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n            return $([el.previousElementSibling]);\n          }\n\n          return $([]);\n        }\n\n        if (el.previousElementSibling) return $([el.previousElementSibling]);\n        return $([]);\n      }\n\n      return $([]);\n    }\n\n    function prevAll(selector) {\n      const prevEls = [];\n      let el = this[0];\n      if (!el) return $([]);\n\n      while (el.previousElementSibling) {\n        const prev = el.previousElementSibling; // eslint-disable-line\n\n        if (selector) {\n          if ($(prev).is(selector)) prevEls.push(prev);\n        } else prevEls.push(prev);\n\n        el = prev;\n      }\n\n      return $(prevEls);\n    }\n\n    function parent(selector) {\n      const parents = []; // eslint-disable-line\n\n      for (let i = 0; i < this.length; i += 1) {\n        if (this[i].parentNode !== null) {\n          if (selector) {\n            if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n          } else {\n            parents.push(this[i].parentNode);\n          }\n        }\n      }\n\n      return $(parents);\n    }\n\n    function parents(selector) {\n      const parents = []; // eslint-disable-line\n\n      for (let i = 0; i < this.length; i += 1) {\n        let parent = this[i].parentNode; // eslint-disable-line\n\n        while (parent) {\n          if (selector) {\n            if ($(parent).is(selector)) parents.push(parent);\n          } else {\n            parents.push(parent);\n          }\n\n          parent = parent.parentNode;\n        }\n      }\n\n      return $(parents);\n    }\n\n    function closest(selector) {\n      let closest = this; // eslint-disable-line\n\n      if (typeof selector === 'undefined') {\n        return $([]);\n      }\n\n      if (!closest.is(selector)) {\n        closest = closest.parents(selector).eq(0);\n      }\n\n      return closest;\n    }\n\n    function find(selector) {\n      const foundElements = [];\n\n      for (let i = 0; i < this.length; i += 1) {\n        const found = this[i].querySelectorAll(selector);\n\n        for (let j = 0; j < found.length; j += 1) {\n          foundElements.push(found[j]);\n        }\n      }\n\n      return $(foundElements);\n    }\n\n    function children(selector) {\n      const children = []; // eslint-disable-line\n\n      for (let i = 0; i < this.length; i += 1) {\n        const childNodes = this[i].children;\n\n        for (let j = 0; j < childNodes.length; j += 1) {\n          if (!selector || $(childNodes[j]).is(selector)) {\n            children.push(childNodes[j]);\n          }\n        }\n      }\n\n      return $(children);\n    }\n\n    function remove() {\n      for (let i = 0; i < this.length; i += 1) {\n        if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n      }\n\n      return this;\n    }\n\n    const Methods = {\n      addClass,\n      removeClass,\n      hasClass,\n      toggleClass,\n      attr,\n      removeAttr,\n      transform,\n      transition: transition$1,\n      on,\n      off,\n      trigger,\n      transitionEnd: transitionEnd$1,\n      outerWidth,\n      outerHeight,\n      styles,\n      offset,\n      css,\n      each,\n      html,\n      text,\n      is,\n      index,\n      eq,\n      append,\n      prepend,\n      next,\n      nextAll,\n      prev,\n      prevAll,\n      parent,\n      parents,\n      closest,\n      find,\n      children,\n      filter,\n      remove\n    };\n    Object.keys(Methods).forEach(methodName => {\n      Object.defineProperty($.fn, methodName, {\n        value: Methods[methodName],\n        writable: true\n      });\n    });\n\n    function deleteProps(obj) {\n      const object = obj;\n      Object.keys(object).forEach(key => {\n        try {\n          object[key] = null;\n        } catch (e) {// no getter for object\n        }\n\n        try {\n          delete object[key];\n        } catch (e) {// something got wrong\n        }\n      });\n    }\n\n    function nextTick(callback, delay = 0) {\n      return setTimeout(callback, delay);\n    }\n\n    function now() {\n      return Date.now();\n    }\n\n    function getComputedStyle$1(el) {\n      const window = getWindow();\n      let style;\n\n      if (window.getComputedStyle) {\n        style = window.getComputedStyle(el, null);\n      }\n\n      if (!style && el.currentStyle) {\n        style = el.currentStyle;\n      }\n\n      if (!style) {\n        style = el.style;\n      }\n\n      return style;\n    }\n\n    function getTranslate(el, axis = 'x') {\n      const window = getWindow();\n      let matrix;\n      let curTransform;\n      let transformMatrix;\n      const curStyle = getComputedStyle$1(el);\n\n      if (window.WebKitCSSMatrix) {\n        curTransform = curStyle.transform || curStyle.webkitTransform;\n\n        if (curTransform.split(',').length > 6) {\n          curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n        } // Some old versions of Webkit choke when 'none' is passed; pass\n        // empty string instead in this case\n\n\n        transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n      } else {\n        transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n        matrix = transformMatrix.toString().split(',');\n      }\n\n      if (axis === 'x') {\n        // Latest Chrome and webkits Fix\n        if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n        else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n        else curTransform = parseFloat(matrix[4]);\n      }\n\n      if (axis === 'y') {\n        // Latest Chrome and webkits Fix\n        if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n        else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n        else curTransform = parseFloat(matrix[5]);\n      }\n\n      return curTransform || 0;\n    }\n\n    function isObject(o) {\n      return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n    }\n\n    function isNode(node) {\n      // eslint-disable-next-line\n      if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n        return node instanceof HTMLElement;\n      }\n\n      return node && (node.nodeType === 1 || node.nodeType === 11);\n    }\n\n    function extend(...args) {\n      const to = Object(args[0]);\n      const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n      for (let i = 1; i < args.length; i += 1) {\n        const nextSource = args[i];\n\n        if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n          const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n          for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n            const nextKey = keysArray[nextIndex];\n            const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n            if (desc !== undefined && desc.enumerable) {\n              if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n                if (nextSource[nextKey].__swiper__) {\n                  to[nextKey] = nextSource[nextKey];\n                } else {\n                  extend(to[nextKey], nextSource[nextKey]);\n                }\n              } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n                to[nextKey] = {};\n\n                if (nextSource[nextKey].__swiper__) {\n                  to[nextKey] = nextSource[nextKey];\n                } else {\n                  extend(to[nextKey], nextSource[nextKey]);\n                }\n              } else {\n                to[nextKey] = nextSource[nextKey];\n              }\n            }\n          }\n        }\n      }\n\n      return to;\n    }\n\n    function setCSSProperty(el, varName, varValue) {\n      el.style.setProperty(varName, varValue);\n    }\n\n    function animateCSSModeScroll({\n      swiper,\n      targetPosition,\n      side\n    }) {\n      const window = getWindow();\n      const startPosition = -swiper.translate;\n      let startTime = null;\n      let time;\n      const duration = swiper.params.speed;\n      swiper.wrapperEl.style.scrollSnapType = 'none';\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n      const isOutOfBound = (current, target) => {\n        return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n      };\n\n      const animate = () => {\n        time = new Date().getTime();\n\n        if (startTime === null) {\n          startTime = time;\n        }\n\n        const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n        const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n        let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n        if (isOutOfBound(currentPosition, targetPosition)) {\n          currentPosition = targetPosition;\n        }\n\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n\n        if (isOutOfBound(currentPosition, targetPosition)) {\n          swiper.wrapperEl.style.overflow = 'hidden';\n          swiper.wrapperEl.style.scrollSnapType = '';\n          setTimeout(() => {\n            swiper.wrapperEl.style.overflow = '';\n            swiper.wrapperEl.scrollTo({\n              [side]: currentPosition\n            });\n          });\n          window.cancelAnimationFrame(swiper.cssModeFrameID);\n          return;\n        }\n\n        swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n      };\n\n      animate();\n    }\n\n    let support;\n\n    function calcSupport() {\n      const window = getWindow();\n      const document = getDocument();\n      return {\n        smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n        touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n        passiveListener: function checkPassiveListener() {\n          let supportsPassive = false;\n\n          try {\n            const opts = Object.defineProperty({}, 'passive', {\n              // eslint-disable-next-line\n              get() {\n                supportsPassive = true;\n              }\n\n            });\n            window.addEventListener('testPassiveListener', null, opts);\n          } catch (e) {// No support\n          }\n\n          return supportsPassive;\n        }(),\n        gestures: function checkGestures() {\n          return 'ongesturestart' in window;\n        }()\n      };\n    }\n\n    function getSupport() {\n      if (!support) {\n        support = calcSupport();\n      }\n\n      return support;\n    }\n\n    let deviceCached;\n\n    function calcDevice({\n      userAgent\n    } = {}) {\n      const support = getSupport();\n      const window = getWindow();\n      const platform = window.navigator.platform;\n      const ua = userAgent || window.navigator.userAgent;\n      const device = {\n        ios: false,\n        android: false\n      };\n      const screenWidth = window.screen.width;\n      const screenHeight = window.screen.height;\n      const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n      let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n      const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n      const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n      const windows = platform === 'Win32';\n      let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n      const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n      if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n        ipad = ua.match(/(Version)\\/([\\d.]+)/);\n        if (!ipad) ipad = [0, 1, '13_0_0'];\n        macos = false;\n      } // Android\n\n\n      if (android && !windows) {\n        device.os = 'android';\n        device.android = true;\n      }\n\n      if (ipad || iphone || ipod) {\n        device.os = 'ios';\n        device.ios = true;\n      } // Export object\n\n\n      return device;\n    }\n\n    function getDevice(overrides = {}) {\n      if (!deviceCached) {\n        deviceCached = calcDevice(overrides);\n      }\n\n      return deviceCached;\n    }\n\n    let browser;\n\n    function calcBrowser() {\n      const window = getWindow();\n\n      function isSafari() {\n        const ua = window.navigator.userAgent.toLowerCase();\n        return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n      }\n\n      return {\n        isSafari: isSafari(),\n        isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n      };\n    }\n\n    function getBrowser() {\n      if (!browser) {\n        browser = calcBrowser();\n      }\n\n      return browser;\n    }\n\n    function Resize({\n      swiper,\n      on,\n      emit\n    }) {\n      const window = getWindow();\n      let observer = null;\n\n      const resizeHandler = () => {\n        if (!swiper || swiper.destroyed || !swiper.initialized) return;\n        emit('beforeResize');\n        emit('resize');\n      };\n\n      const createObserver = () => {\n        if (!swiper || swiper.destroyed || !swiper.initialized) return;\n        observer = new ResizeObserver(entries => {\n          const {\n            width,\n            height\n          } = swiper;\n          let newWidth = width;\n          let newHeight = height;\n          entries.forEach(({\n            contentBoxSize,\n            contentRect,\n            target\n          }) => {\n            if (target && target !== swiper.el) return;\n            newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n            newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n          });\n\n          if (newWidth !== width || newHeight !== height) {\n            resizeHandler();\n          }\n        });\n        observer.observe(swiper.el);\n      };\n\n      const removeObserver = () => {\n        if (observer && observer.unobserve && swiper.el) {\n          observer.unobserve(swiper.el);\n          observer = null;\n        }\n      };\n\n      const orientationChangeHandler = () => {\n        if (!swiper || swiper.destroyed || !swiper.initialized) return;\n        emit('orientationchange');\n      };\n\n      on('init', () => {\n        if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n          createObserver();\n          return;\n        }\n\n        window.addEventListener('resize', resizeHandler);\n        window.addEventListener('orientationchange', orientationChangeHandler);\n      });\n      on('destroy', () => {\n        removeObserver();\n        window.removeEventListener('resize', resizeHandler);\n        window.removeEventListener('orientationchange', orientationChangeHandler);\n      });\n    }\n\n    function Observer({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const observers = [];\n      const window = getWindow();\n\n      const attach = (target, options = {}) => {\n        const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n        const observer = new ObserverFunc(mutations => {\n          // The observerUpdate event should only be triggered\n          // once despite the number of mutations.  Additional\n          // triggers are redundant and are very costly\n          if (mutations.length === 1) {\n            emit('observerUpdate', mutations[0]);\n            return;\n          }\n\n          const observerUpdate = function observerUpdate() {\n            emit('observerUpdate', mutations[0]);\n          };\n\n          if (window.requestAnimationFrame) {\n            window.requestAnimationFrame(observerUpdate);\n          } else {\n            window.setTimeout(observerUpdate, 0);\n          }\n        });\n        observer.observe(target, {\n          attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n          childList: typeof options.childList === 'undefined' ? true : options.childList,\n          characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n        });\n        observers.push(observer);\n      };\n\n      const init = () => {\n        if (!swiper.params.observer) return;\n\n        if (swiper.params.observeParents) {\n          const containerParents = swiper.$el.parents();\n\n          for (let i = 0; i < containerParents.length; i += 1) {\n            attach(containerParents[i]);\n          }\n        } // Observe container\n\n\n        attach(swiper.$el[0], {\n          childList: swiper.params.observeSlideChildren\n        }); // Observe wrapper\n\n        attach(swiper.$wrapperEl[0], {\n          attributes: false\n        });\n      };\n\n      const destroy = () => {\n        observers.forEach(observer => {\n          observer.disconnect();\n        });\n        observers.splice(0, observers.length);\n      };\n\n      extendParams({\n        observer: false,\n        observeParents: false,\n        observeSlideChildren: false\n      });\n      on('init', init);\n      on('destroy', destroy);\n    }\n\n    /* eslint-disable no-underscore-dangle */\n    var eventsEmitter = {\n      on(events, handler, priority) {\n        const self = this;\n        if (typeof handler !== 'function') return self;\n        const method = priority ? 'unshift' : 'push';\n        events.split(' ').forEach(event => {\n          if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n          self.eventsListeners[event][method](handler);\n        });\n        return self;\n      },\n\n      once(events, handler, priority) {\n        const self = this;\n        if (typeof handler !== 'function') return self;\n\n        function onceHandler(...args) {\n          self.off(events, onceHandler);\n\n          if (onceHandler.__emitterProxy) {\n            delete onceHandler.__emitterProxy;\n          }\n\n          handler.apply(self, args);\n        }\n\n        onceHandler.__emitterProxy = handler;\n        return self.on(events, onceHandler, priority);\n      },\n\n      onAny(handler, priority) {\n        const self = this;\n        if (typeof handler !== 'function') return self;\n        const method = priority ? 'unshift' : 'push';\n\n        if (self.eventsAnyListeners.indexOf(handler) < 0) {\n          self.eventsAnyListeners[method](handler);\n        }\n\n        return self;\n      },\n\n      offAny(handler) {\n        const self = this;\n        if (!self.eventsAnyListeners) return self;\n        const index = self.eventsAnyListeners.indexOf(handler);\n\n        if (index >= 0) {\n          self.eventsAnyListeners.splice(index, 1);\n        }\n\n        return self;\n      },\n\n      off(events, handler) {\n        const self = this;\n        if (!self.eventsListeners) return self;\n        events.split(' ').forEach(event => {\n          if (typeof handler === 'undefined') {\n            self.eventsListeners[event] = [];\n          } else if (self.eventsListeners[event]) {\n            self.eventsListeners[event].forEach((eventHandler, index) => {\n              if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n                self.eventsListeners[event].splice(index, 1);\n              }\n            });\n          }\n        });\n        return self;\n      },\n\n      emit(...args) {\n        const self = this;\n        if (!self.eventsListeners) return self;\n        let events;\n        let data;\n        let context;\n\n        if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n          events = args[0];\n          data = args.slice(1, args.length);\n          context = self;\n        } else {\n          events = args[0].events;\n          data = args[0].data;\n          context = args[0].context || self;\n        }\n\n        data.unshift(context);\n        const eventsArray = Array.isArray(events) ? events : events.split(' ');\n        eventsArray.forEach(event => {\n          if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n            self.eventsAnyListeners.forEach(eventHandler => {\n              eventHandler.apply(context, [event, ...data]);\n            });\n          }\n\n          if (self.eventsListeners && self.eventsListeners[event]) {\n            self.eventsListeners[event].forEach(eventHandler => {\n              eventHandler.apply(context, data);\n            });\n          }\n        });\n        return self;\n      }\n\n    };\n\n    function updateSize() {\n      const swiper = this;\n      let width;\n      let height;\n      const $el = swiper.$el;\n\n      if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n        width = swiper.params.width;\n      } else {\n        width = $el[0].clientWidth;\n      }\n\n      if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n        height = swiper.params.height;\n      } else {\n        height = $el[0].clientHeight;\n      }\n\n      if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n        return;\n      } // Subtract paddings\n\n\n      width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n      height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n      if (Number.isNaN(width)) width = 0;\n      if (Number.isNaN(height)) height = 0;\n      Object.assign(swiper, {\n        width,\n        height,\n        size: swiper.isHorizontal() ? width : height\n      });\n    }\n\n    function updateSlides() {\n      const swiper = this;\n\n      function getDirectionLabel(property) {\n        if (swiper.isHorizontal()) {\n          return property;\n        } // prettier-ignore\n\n\n        return {\n          'width': 'height',\n          'margin-top': 'margin-left',\n          'margin-bottom ': 'margin-right',\n          'margin-left': 'margin-top',\n          'margin-right': 'margin-bottom',\n          'padding-left': 'padding-top',\n          'padding-right': 'padding-bottom',\n          'marginRight': 'marginBottom'\n        }[property];\n      }\n\n      function getDirectionPropertyValue(node, label) {\n        return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n      }\n\n      const params = swiper.params;\n      const {\n        $wrapperEl,\n        size: swiperSize,\n        rtlTranslate: rtl,\n        wrongRTL\n      } = swiper;\n      const isVirtual = swiper.virtual && params.virtual.enabled;\n      const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n      const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n      const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n      let snapGrid = [];\n      const slidesGrid = [];\n      const slidesSizesGrid = [];\n      let offsetBefore = params.slidesOffsetBefore;\n\n      if (typeof offsetBefore === 'function') {\n        offsetBefore = params.slidesOffsetBefore.call(swiper);\n      }\n\n      let offsetAfter = params.slidesOffsetAfter;\n\n      if (typeof offsetAfter === 'function') {\n        offsetAfter = params.slidesOffsetAfter.call(swiper);\n      }\n\n      const previousSnapGridLength = swiper.snapGrid.length;\n      const previousSlidesGridLength = swiper.slidesGrid.length;\n      let spaceBetween = params.spaceBetween;\n      let slidePosition = -offsetBefore;\n      let prevSlideSize = 0;\n      let index = 0;\n\n      if (typeof swiperSize === 'undefined') {\n        return;\n      }\n\n      if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n        spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n      }\n\n      swiper.virtualSize = -spaceBetween; // reset margins\n\n      if (rtl) slides.css({\n        marginLeft: '',\n        marginBottom: '',\n        marginTop: ''\n      });else slides.css({\n        marginRight: '',\n        marginBottom: '',\n        marginTop: ''\n      }); // reset cssMode offsets\n\n      if (params.centeredSlides && params.cssMode) {\n        setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n        setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n      }\n\n      const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n      if (gridEnabled) {\n        swiper.grid.initSlides(slidesLength);\n      } // Calc slides\n\n\n      let slideSize;\n      const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n        return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n      }).length > 0;\n\n      for (let i = 0; i < slidesLength; i += 1) {\n        slideSize = 0;\n        const slide = slides.eq(i);\n\n        if (gridEnabled) {\n          swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n        }\n\n        if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n        if (params.slidesPerView === 'auto') {\n          if (shouldResetSlideSize) {\n            slides[i].style[getDirectionLabel('width')] = ``;\n          }\n\n          const slideStyles = getComputedStyle(slide[0]);\n          const currentTransform = slide[0].style.transform;\n          const currentWebKitTransform = slide[0].style.webkitTransform;\n\n          if (currentTransform) {\n            slide[0].style.transform = 'none';\n          }\n\n          if (currentWebKitTransform) {\n            slide[0].style.webkitTransform = 'none';\n          }\n\n          if (params.roundLengths) {\n            slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n          } else {\n            // eslint-disable-next-line\n            const width = getDirectionPropertyValue(slideStyles, 'width');\n            const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n            const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n            const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n            const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n            const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n            if (boxSizing && boxSizing === 'border-box') {\n              slideSize = width + marginLeft + marginRight;\n            } else {\n              const {\n                clientWidth,\n                offsetWidth\n              } = slide[0];\n              slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n            }\n          }\n\n          if (currentTransform) {\n            slide[0].style.transform = currentTransform;\n          }\n\n          if (currentWebKitTransform) {\n            slide[0].style.webkitTransform = currentWebKitTransform;\n          }\n\n          if (params.roundLengths) slideSize = Math.floor(slideSize);\n        } else {\n          slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n          if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n          if (slides[i]) {\n            slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n          }\n        }\n\n        if (slides[i]) {\n          slides[i].swiperSlideSize = slideSize;\n        }\n\n        slidesSizesGrid.push(slideSize);\n\n        if (params.centeredSlides) {\n          slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n          if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n          if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n          if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n          if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n          if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n          slidesGrid.push(slidePosition);\n        } else {\n          if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n          if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n          slidesGrid.push(slidePosition);\n          slidePosition = slidePosition + slideSize + spaceBetween;\n        }\n\n        swiper.virtualSize += slideSize + spaceBetween;\n        prevSlideSize = slideSize;\n        index += 1;\n      }\n\n      swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n      if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n        $wrapperEl.css({\n          width: `${swiper.virtualSize + params.spaceBetween}px`\n        });\n      }\n\n      if (params.setWrapperSize) {\n        $wrapperEl.css({\n          [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n        });\n      }\n\n      if (gridEnabled) {\n        swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n      } // Remove last grid elements depending on width\n\n\n      if (!params.centeredSlides) {\n        const newSlidesGrid = [];\n\n        for (let i = 0; i < snapGrid.length; i += 1) {\n          let slidesGridItem = snapGrid[i];\n          if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n          if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n            newSlidesGrid.push(slidesGridItem);\n          }\n        }\n\n        snapGrid = newSlidesGrid;\n\n        if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n          snapGrid.push(swiper.virtualSize - swiperSize);\n        }\n      }\n\n      if (snapGrid.length === 0) snapGrid = [0];\n\n      if (params.spaceBetween !== 0) {\n        const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n        slides.filter((_, slideIndex) => {\n          if (!params.cssMode) return true;\n\n          if (slideIndex === slides.length - 1) {\n            return false;\n          }\n\n          return true;\n        }).css({\n          [key]: `${spaceBetween}px`\n        });\n      }\n\n      if (params.centeredSlides && params.centeredSlidesBounds) {\n        let allSlidesSize = 0;\n        slidesSizesGrid.forEach(slideSizeValue => {\n          allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n        });\n        allSlidesSize -= params.spaceBetween;\n        const maxSnap = allSlidesSize - swiperSize;\n        snapGrid = snapGrid.map(snap => {\n          if (snap < 0) return -offsetBefore;\n          if (snap > maxSnap) return maxSnap + offsetAfter;\n          return snap;\n        });\n      }\n\n      if (params.centerInsufficientSlides) {\n        let allSlidesSize = 0;\n        slidesSizesGrid.forEach(slideSizeValue => {\n          allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n        });\n        allSlidesSize -= params.spaceBetween;\n\n        if (allSlidesSize < swiperSize) {\n          const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n          snapGrid.forEach((snap, snapIndex) => {\n            snapGrid[snapIndex] = snap - allSlidesOffset;\n          });\n          slidesGrid.forEach((snap, snapIndex) => {\n            slidesGrid[snapIndex] = snap + allSlidesOffset;\n          });\n        }\n      }\n\n      Object.assign(swiper, {\n        slides,\n        snapGrid,\n        slidesGrid,\n        slidesSizesGrid\n      });\n\n      if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n        setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n        setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n        const addToSnapGrid = -swiper.snapGrid[0];\n        const addToSlidesGrid = -swiper.slidesGrid[0];\n        swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n        swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n      }\n\n      if (slidesLength !== previousSlidesLength) {\n        swiper.emit('slidesLengthChange');\n      }\n\n      if (snapGrid.length !== previousSnapGridLength) {\n        if (swiper.params.watchOverflow) swiper.checkOverflow();\n        swiper.emit('snapGridLengthChange');\n      }\n\n      if (slidesGrid.length !== previousSlidesGridLength) {\n        swiper.emit('slidesGridLengthChange');\n      }\n\n      if (params.watchSlidesProgress) {\n        swiper.updateSlidesOffset();\n      }\n    }\n\n    function updateAutoHeight(speed) {\n      const swiper = this;\n      const activeSlides = [];\n      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n      let newHeight = 0;\n      let i;\n\n      if (typeof speed === 'number') {\n        swiper.setTransition(speed);\n      } else if (speed === true) {\n        swiper.setTransition(swiper.params.speed);\n      }\n\n      const getSlideByIndex = index => {\n        if (isVirtual) {\n          return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n        }\n\n        return swiper.slides.eq(index)[0];\n      }; // Find slides currently in view\n\n\n      if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n        if (swiper.params.centeredSlides) {\n          swiper.visibleSlides.each(slide => {\n            activeSlides.push(slide);\n          });\n        } else {\n          for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n            const index = swiper.activeIndex + i;\n            if (index > swiper.slides.length && !isVirtual) break;\n            activeSlides.push(getSlideByIndex(index));\n          }\n        }\n      } else {\n        activeSlides.push(getSlideByIndex(swiper.activeIndex));\n      } // Find new height from highest slide in view\n\n\n      for (i = 0; i < activeSlides.length; i += 1) {\n        if (typeof activeSlides[i] !== 'undefined') {\n          const height = activeSlides[i].offsetHeight;\n          newHeight = height > newHeight ? height : newHeight;\n        }\n      } // Update Height\n\n\n      if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`);\n    }\n\n    function updateSlidesOffset() {\n      const swiper = this;\n      const slides = swiper.slides;\n\n      for (let i = 0; i < slides.length; i += 1) {\n        slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n      }\n    }\n\n    function updateSlidesProgress(translate = this && this.translate || 0) {\n      const swiper = this;\n      const params = swiper.params;\n      const {\n        slides,\n        rtlTranslate: rtl,\n        snapGrid\n      } = swiper;\n      if (slides.length === 0) return;\n      if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n      let offsetCenter = -translate;\n      if (rtl) offsetCenter = translate; // Visible Slides\n\n      slides.removeClass(params.slideVisibleClass);\n      swiper.visibleSlidesIndexes = [];\n      swiper.visibleSlides = [];\n\n      for (let i = 0; i < slides.length; i += 1) {\n        const slide = slides[i];\n        let slideOffset = slide.swiperSlideOffset;\n\n        if (params.cssMode && params.centeredSlides) {\n          slideOffset -= slides[0].swiperSlideOffset;\n        }\n\n        const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n        const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n        const slideBefore = -(offsetCenter - slideOffset);\n        const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n        const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n        if (isVisible) {\n          swiper.visibleSlides.push(slide);\n          swiper.visibleSlidesIndexes.push(i);\n          slides.eq(i).addClass(params.slideVisibleClass);\n        }\n\n        slide.progress = rtl ? -slideProgress : slideProgress;\n        slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n      }\n\n      swiper.visibleSlides = $(swiper.visibleSlides);\n    }\n\n    function updateProgress(translate) {\n      const swiper = this;\n\n      if (typeof translate === 'undefined') {\n        const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n        translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n      }\n\n      const params = swiper.params;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n      let {\n        progress,\n        isBeginning,\n        isEnd\n      } = swiper;\n      const wasBeginning = isBeginning;\n      const wasEnd = isEnd;\n\n      if (translatesDiff === 0) {\n        progress = 0;\n        isBeginning = true;\n        isEnd = true;\n      } else {\n        progress = (translate - swiper.minTranslate()) / translatesDiff;\n        isBeginning = progress <= 0;\n        isEnd = progress >= 1;\n      }\n\n      Object.assign(swiper, {\n        progress,\n        isBeginning,\n        isEnd\n      });\n      if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n      if (isBeginning && !wasBeginning) {\n        swiper.emit('reachBeginning toEdge');\n      }\n\n      if (isEnd && !wasEnd) {\n        swiper.emit('reachEnd toEdge');\n      }\n\n      if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n        swiper.emit('fromEdge');\n      }\n\n      swiper.emit('progress', progress);\n    }\n\n    function updateSlidesClasses() {\n      const swiper = this;\n      const {\n        slides,\n        params,\n        $wrapperEl,\n        activeIndex,\n        realIndex\n      } = swiper;\n      const isVirtual = swiper.virtual && params.virtual.enabled;\n      slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n      let activeSlide;\n\n      if (isVirtual) {\n        activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n      } else {\n        activeSlide = slides.eq(activeIndex);\n      } // Active classes\n\n\n      activeSlide.addClass(params.slideActiveClass);\n\n      if (params.loop) {\n        // Duplicate to all looped slides\n        if (activeSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n        }\n      } // Next Slide\n\n\n      let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n      if (params.loop && nextSlide.length === 0) {\n        nextSlide = slides.eq(0);\n        nextSlide.addClass(params.slideNextClass);\n      } // Prev Slide\n\n\n      let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n      if (params.loop && prevSlide.length === 0) {\n        prevSlide = slides.eq(-1);\n        prevSlide.addClass(params.slidePrevClass);\n      }\n\n      if (params.loop) {\n        // Duplicate to all looped slides\n        if (nextSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n        }\n\n        if (prevSlide.hasClass(params.slideDuplicateClass)) {\n          $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n        } else {\n          $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n        }\n      }\n\n      swiper.emitSlidesClasses();\n    }\n\n    function updateActiveIndex(newActiveIndex) {\n      const swiper = this;\n      const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n      const {\n        slidesGrid,\n        snapGrid,\n        params,\n        activeIndex: previousIndex,\n        realIndex: previousRealIndex,\n        snapIndex: previousSnapIndex\n      } = swiper;\n      let activeIndex = newActiveIndex;\n      let snapIndex;\n\n      if (typeof activeIndex === 'undefined') {\n        for (let i = 0; i < slidesGrid.length; i += 1) {\n          if (typeof slidesGrid[i + 1] !== 'undefined') {\n            if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n              activeIndex = i;\n            } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n              activeIndex = i + 1;\n            }\n          } else if (translate >= slidesGrid[i]) {\n            activeIndex = i;\n          }\n        } // Normalize slideIndex\n\n\n        if (params.normalizeSlideIndex) {\n          if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n        }\n      }\n\n      if (snapGrid.indexOf(translate) >= 0) {\n        snapIndex = snapGrid.indexOf(translate);\n      } else {\n        const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n        snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n      }\n\n      if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n      if (activeIndex === previousIndex) {\n        if (snapIndex !== previousSnapIndex) {\n          swiper.snapIndex = snapIndex;\n          swiper.emit('snapIndexChange');\n        }\n\n        return;\n      } // Get real index\n\n\n      const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n      Object.assign(swiper, {\n        snapIndex,\n        realIndex,\n        previousIndex,\n        activeIndex\n      });\n      swiper.emit('activeIndexChange');\n      swiper.emit('snapIndexChange');\n\n      if (previousRealIndex !== realIndex) {\n        swiper.emit('realIndexChange');\n      }\n\n      if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n        swiper.emit('slideChange');\n      }\n    }\n\n    function updateClickedSlide(e) {\n      const swiper = this;\n      const params = swiper.params;\n      const slide = $(e.target).closest(`.${params.slideClass}`)[0];\n      let slideFound = false;\n      let slideIndex;\n\n      if (slide) {\n        for (let i = 0; i < swiper.slides.length; i += 1) {\n          if (swiper.slides[i] === slide) {\n            slideFound = true;\n            slideIndex = i;\n            break;\n          }\n        }\n      }\n\n      if (slide && slideFound) {\n        swiper.clickedSlide = slide;\n\n        if (swiper.virtual && swiper.params.virtual.enabled) {\n          swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n        } else {\n          swiper.clickedIndex = slideIndex;\n        }\n      } else {\n        swiper.clickedSlide = undefined;\n        swiper.clickedIndex = undefined;\n        return;\n      }\n\n      if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n        swiper.slideToClickedSlide();\n      }\n    }\n\n    var update = {\n      updateSize,\n      updateSlides,\n      updateAutoHeight,\n      updateSlidesOffset,\n      updateSlidesProgress,\n      updateProgress,\n      updateSlidesClasses,\n      updateActiveIndex,\n      updateClickedSlide\n    };\n\n    function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n      const swiper = this;\n      const {\n        params,\n        rtlTranslate: rtl,\n        translate,\n        $wrapperEl\n      } = swiper;\n\n      if (params.virtualTranslate) {\n        return rtl ? -translate : translate;\n      }\n\n      if (params.cssMode) {\n        return translate;\n      }\n\n      let currentTranslate = getTranslate($wrapperEl[0], axis);\n      if (rtl) currentTranslate = -currentTranslate;\n      return currentTranslate || 0;\n    }\n\n    function setTranslate(translate, byController) {\n      const swiper = this;\n      const {\n        rtlTranslate: rtl,\n        params,\n        $wrapperEl,\n        wrapperEl,\n        progress\n      } = swiper;\n      let x = 0;\n      let y = 0;\n      const z = 0;\n\n      if (swiper.isHorizontal()) {\n        x = rtl ? -translate : translate;\n      } else {\n        y = translate;\n      }\n\n      if (params.roundLengths) {\n        x = Math.floor(x);\n        y = Math.floor(y);\n      }\n\n      if (params.cssMode) {\n        wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n      } else if (!params.virtualTranslate) {\n        $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n      }\n\n      swiper.previousTranslate = swiper.translate;\n      swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n      let newProgress;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n      if (translatesDiff === 0) {\n        newProgress = 0;\n      } else {\n        newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n      }\n\n      if (newProgress !== progress) {\n        swiper.updateProgress(translate);\n      }\n\n      swiper.emit('setTranslate', swiper.translate, byController);\n    }\n\n    function minTranslate() {\n      return -this.snapGrid[0];\n    }\n\n    function maxTranslate() {\n      return -this.snapGrid[this.snapGrid.length - 1];\n    }\n\n    function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n      const swiper = this;\n      const {\n        params,\n        wrapperEl\n      } = swiper;\n\n      if (swiper.animating && params.preventInteractionOnTransition) {\n        return false;\n      }\n\n      const minTranslate = swiper.minTranslate();\n      const maxTranslate = swiper.maxTranslate();\n      let newTranslate;\n      if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n      swiper.updateProgress(newTranslate);\n\n      if (params.cssMode) {\n        const isH = swiper.isHorizontal();\n\n        if (speed === 0) {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n        } else {\n          if (!swiper.support.smoothScroll) {\n            animateCSSModeScroll({\n              swiper,\n              targetPosition: -newTranslate,\n              side: isH ? 'left' : 'top'\n            });\n            return true;\n          }\n\n          wrapperEl.scrollTo({\n            [isH ? 'left' : 'top']: -newTranslate,\n            behavior: 'smooth'\n          });\n        }\n\n        return true;\n      }\n\n      if (speed === 0) {\n        swiper.setTransition(0);\n        swiper.setTranslate(newTranslate);\n\n        if (runCallbacks) {\n          swiper.emit('beforeTransitionStart', speed, internal);\n          swiper.emit('transitionEnd');\n        }\n      } else {\n        swiper.setTransition(speed);\n        swiper.setTranslate(newTranslate);\n\n        if (runCallbacks) {\n          swiper.emit('beforeTransitionStart', speed, internal);\n          swiper.emit('transitionStart');\n        }\n\n        if (!swiper.animating) {\n          swiper.animating = true;\n\n          if (!swiper.onTranslateToWrapperTransitionEnd) {\n            swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n              if (!swiper || swiper.destroyed) return;\n              if (e.target !== this) return;\n              swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n              swiper.onTranslateToWrapperTransitionEnd = null;\n              delete swiper.onTranslateToWrapperTransitionEnd;\n\n              if (runCallbacks) {\n                swiper.emit('transitionEnd');\n              }\n            };\n          }\n\n          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n        }\n      }\n\n      return true;\n    }\n\n    var translate = {\n      getTranslate: getSwiperTranslate,\n      setTranslate,\n      minTranslate,\n      maxTranslate,\n      translateTo\n    };\n\n    function setTransition(duration, byController) {\n      const swiper = this;\n\n      if (!swiper.params.cssMode) {\n        swiper.$wrapperEl.transition(duration);\n      }\n\n      swiper.emit('setTransition', duration, byController);\n    }\n\n    function transitionEmit({\n      swiper,\n      runCallbacks,\n      direction,\n      step\n    }) {\n      const {\n        activeIndex,\n        previousIndex\n      } = swiper;\n      let dir = direction;\n\n      if (!dir) {\n        if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n      }\n\n      swiper.emit(`transition${step}`);\n\n      if (runCallbacks && activeIndex !== previousIndex) {\n        if (dir === 'reset') {\n          swiper.emit(`slideResetTransition${step}`);\n          return;\n        }\n\n        swiper.emit(`slideChangeTransition${step}`);\n\n        if (dir === 'next') {\n          swiper.emit(`slideNextTransition${step}`);\n        } else {\n          swiper.emit(`slidePrevTransition${step}`);\n        }\n      }\n    }\n\n    function transitionStart(runCallbacks = true, direction) {\n      const swiper = this;\n      const {\n        params\n      } = swiper;\n      if (params.cssMode) return;\n\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n\n      transitionEmit({\n        swiper,\n        runCallbacks,\n        direction,\n        step: 'Start'\n      });\n    }\n\n    function transitionEnd(runCallbacks = true, direction) {\n      const swiper = this;\n      const {\n        params\n      } = swiper;\n      swiper.animating = false;\n      if (params.cssMode) return;\n      swiper.setTransition(0);\n      transitionEmit({\n        swiper,\n        runCallbacks,\n        direction,\n        step: 'End'\n      });\n    }\n\n    var transition = {\n      setTransition,\n      transitionStart,\n      transitionEnd\n    };\n\n    function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n      if (typeof index !== 'number' && typeof index !== 'string') {\n        throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n      }\n\n      if (typeof index === 'string') {\n        /**\n         * The `index` argument converted from `string` to `number`.\n         * @type {number}\n         */\n        const indexAsNumber = parseInt(index, 10);\n        /**\n         * Determines whether the `index` argument is a valid `number`\n         * after being converted from the `string` type.\n         * @type {boolean}\n         */\n\n        const isValidNumber = isFinite(indexAsNumber);\n\n        if (!isValidNumber) {\n          throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n        } // Knowing that the converted `index` is a valid number,\n        // we can update the original argument's value.\n\n\n        index = indexAsNumber;\n      }\n\n      const swiper = this;\n      let slideIndex = index;\n      if (slideIndex < 0) slideIndex = 0;\n      const {\n        params,\n        snapGrid,\n        slidesGrid,\n        previousIndex,\n        activeIndex,\n        rtlTranslate: rtl,\n        wrapperEl,\n        enabled\n      } = swiper;\n\n      if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n        return false;\n      }\n\n      const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n      let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n      if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n      if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n        swiper.emit('beforeSlideChangeStart');\n      }\n\n      const translate = -snapGrid[snapIndex]; // Update progress\n\n      swiper.updateProgress(translate); // Normalize slideIndex\n\n      if (params.normalizeSlideIndex) {\n        for (let i = 0; i < slidesGrid.length; i += 1) {\n          const normalizedTranslate = -Math.floor(translate * 100);\n          const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n          const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n          if (typeof slidesGrid[i + 1] !== 'undefined') {\n            if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n              slideIndex = i;\n            } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n              slideIndex = i + 1;\n            }\n          } else if (normalizedTranslate >= normalizedGrid) {\n            slideIndex = i;\n          }\n        }\n      } // Directions locks\n\n\n      if (swiper.initialized && slideIndex !== activeIndex) {\n        if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n          return false;\n        }\n\n        if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n          if ((activeIndex || 0) !== slideIndex) return false;\n        }\n      }\n\n      let direction;\n      if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n      if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n        swiper.updateActiveIndex(slideIndex); // Update Height\n\n        if (params.autoHeight) {\n          swiper.updateAutoHeight();\n        }\n\n        swiper.updateSlidesClasses();\n\n        if (params.effect !== 'slide') {\n          swiper.setTranslate(translate);\n        }\n\n        if (direction !== 'reset') {\n          swiper.transitionStart(runCallbacks, direction);\n          swiper.transitionEnd(runCallbacks, direction);\n        }\n\n        return false;\n      }\n\n      if (params.cssMode) {\n        const isH = swiper.isHorizontal();\n        const t = rtl ? translate : -translate;\n\n        if (speed === 0) {\n          const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n          if (isVirtual) {\n            swiper.wrapperEl.style.scrollSnapType = 'none';\n            swiper._immediateVirtual = true;\n          }\n\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n          if (isVirtual) {\n            requestAnimationFrame(() => {\n              swiper.wrapperEl.style.scrollSnapType = '';\n              swiper._swiperImmediateVirtual = false;\n            });\n          }\n        } else {\n          if (!swiper.support.smoothScroll) {\n            animateCSSModeScroll({\n              swiper,\n              targetPosition: t,\n              side: isH ? 'left' : 'top'\n            });\n            return true;\n          }\n\n          wrapperEl.scrollTo({\n            [isH ? 'left' : 'top']: t,\n            behavior: 'smooth'\n          });\n        }\n\n        return true;\n      }\n\n      if (speed === 0) {\n        swiper.setTransition(0);\n        swiper.setTranslate(translate);\n        swiper.updateActiveIndex(slideIndex);\n        swiper.updateSlidesClasses();\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.transitionStart(runCallbacks, direction);\n        swiper.transitionEnd(runCallbacks, direction);\n      } else {\n        swiper.setTransition(speed);\n        swiper.setTranslate(translate);\n        swiper.updateActiveIndex(slideIndex);\n        swiper.updateSlidesClasses();\n        swiper.emit('beforeTransitionStart', speed, internal);\n        swiper.transitionStart(runCallbacks, direction);\n\n        if (!swiper.animating) {\n          swiper.animating = true;\n\n          if (!swiper.onSlideToWrapperTransitionEnd) {\n            swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n              if (!swiper || swiper.destroyed) return;\n              if (e.target !== this) return;\n              swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n              swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n              swiper.onSlideToWrapperTransitionEnd = null;\n              delete swiper.onSlideToWrapperTransitionEnd;\n              swiper.transitionEnd(runCallbacks, direction);\n            };\n          }\n\n          swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n          swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n        }\n      }\n\n      return true;\n    }\n\n    function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n      const swiper = this;\n      let newIndex = index;\n\n      if (swiper.params.loop) {\n        newIndex += swiper.loopedSlides;\n      }\n\n      return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n      const swiper = this;\n      const {\n        animating,\n        enabled,\n        params\n      } = swiper;\n      if (!enabled) return swiper;\n      let perGroup = params.slidesPerGroup;\n\n      if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n        perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n      }\n\n      const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n      if (params.loop) {\n        if (animating && params.loopPreventsSlide) return false;\n        swiper.loopFix(); // eslint-disable-next-line\n\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n      }\n\n      return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n      const swiper = this;\n      const {\n        params,\n        animating,\n        snapGrid,\n        slidesGrid,\n        rtlTranslate,\n        enabled\n      } = swiper;\n      if (!enabled) return swiper;\n\n      if (params.loop) {\n        if (animating && params.loopPreventsSlide) return false;\n        swiper.loopFix(); // eslint-disable-next-line\n\n        swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n      }\n\n      const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n      function normalize(val) {\n        if (val < 0) return -Math.floor(Math.abs(val));\n        return Math.floor(val);\n      }\n\n      const normalizedTranslate = normalize(translate);\n      const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n      let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n      if (typeof prevSnap === 'undefined' && params.cssMode) {\n        let prevSnapIndex;\n        snapGrid.forEach((snap, snapIndex) => {\n          if (normalizedTranslate >= snap) {\n            // prevSnap = snap;\n            prevSnapIndex = snapIndex;\n          }\n        });\n\n        if (typeof prevSnapIndex !== 'undefined') {\n          prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n        }\n      }\n\n      let prevIndex = 0;\n\n      if (typeof prevSnap !== 'undefined') {\n        prevIndex = slidesGrid.indexOf(prevSnap);\n        if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n        if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n          prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n          prevIndex = Math.max(prevIndex, 0);\n        }\n      }\n\n      return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n      const swiper = this;\n      return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n    }\n\n    /* eslint no-unused-vars: \"off\" */\n    function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n      const swiper = this;\n      let index = swiper.activeIndex;\n      const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n      const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n      const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n      if (translate >= swiper.snapGrid[snapIndex]) {\n        // The current translate is on or after the current snap index, so the choice\n        // is between the current index and the one after it.\n        const currentSnap = swiper.snapGrid[snapIndex];\n        const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n        if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n          index += swiper.params.slidesPerGroup;\n        }\n      } else {\n        // The current translate is before the current snap index, so the choice\n        // is between the current index and the one before it.\n        const prevSnap = swiper.snapGrid[snapIndex - 1];\n        const currentSnap = swiper.snapGrid[snapIndex];\n\n        if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n          index -= swiper.params.slidesPerGroup;\n        }\n      }\n\n      index = Math.max(index, 0);\n      index = Math.min(index, swiper.slidesGrid.length - 1);\n      return swiper.slideTo(index, speed, runCallbacks, internal);\n    }\n\n    function slideToClickedSlide() {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl\n      } = swiper;\n      const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n      let slideToIndex = swiper.clickedIndex;\n      let realIndex;\n\n      if (params.loop) {\n        if (swiper.animating) return;\n        realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n        if (params.centeredSlides) {\n          if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n            swiper.loopFix();\n            slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n            nextTick(() => {\n              swiper.slideTo(slideToIndex);\n            });\n          } else {\n            swiper.slideTo(slideToIndex);\n          }\n        } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n          swiper.loopFix();\n          slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n          nextTick(() => {\n            swiper.slideTo(slideToIndex);\n          });\n        } else {\n          swiper.slideTo(slideToIndex);\n        }\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    }\n\n    var slide = {\n      slideTo,\n      slideToLoop,\n      slideNext,\n      slidePrev,\n      slideReset,\n      slideToClosest,\n      slideToClickedSlide\n    };\n\n    function loopCreate() {\n      const swiper = this;\n      const document = getDocument();\n      const {\n        params,\n        $wrapperEl\n      } = swiper; // Remove duplicated slides\n\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n      let slides = $wrapperEl.children(`.${params.slideClass}`);\n\n      if (params.loopFillGroupWithBlank) {\n        const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n        if (blankSlidesNum !== params.slidesPerGroup) {\n          for (let i = 0; i < blankSlidesNum; i += 1) {\n            const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n            $wrapperEl.append(blankNode);\n          }\n\n          slides = $wrapperEl.children(`.${params.slideClass}`);\n        }\n      }\n\n      if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n      swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n      swiper.loopedSlides += params.loopAdditionalSlides;\n\n      if (swiper.loopedSlides > slides.length) {\n        swiper.loopedSlides = slides.length;\n      }\n\n      const prependSlides = [];\n      const appendSlides = [];\n      slides.each((el, index) => {\n        const slide = $(el);\n\n        if (index < swiper.loopedSlides) {\n          appendSlides.push(el);\n        }\n\n        if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n          prependSlides.push(el);\n        }\n\n        slide.attr('data-swiper-slide-index', index);\n      });\n\n      for (let i = 0; i < appendSlides.length; i += 1) {\n        $wrapperEl.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n      }\n\n      for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n        $wrapperEl.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n      }\n    }\n\n    function loopFix() {\n      const swiper = this;\n      swiper.emit('beforeLoopFix');\n      const {\n        activeIndex,\n        slides,\n        loopedSlides,\n        allowSlidePrev,\n        allowSlideNext,\n        snapGrid,\n        rtlTranslate: rtl\n      } = swiper;\n      let newIndex;\n      swiper.allowSlidePrev = true;\n      swiper.allowSlideNext = true;\n      const snapTranslate = -snapGrid[activeIndex];\n      const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n      if (activeIndex < loopedSlides) {\n        newIndex = slides.length - loopedSlides * 3 + activeIndex;\n        newIndex += loopedSlides;\n        const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n        if (slideChanged && diff !== 0) {\n          swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n        }\n      } else if (activeIndex >= slides.length - loopedSlides) {\n        // Fix For Positive Oversliding\n        newIndex = -slides.length + activeIndex + loopedSlides;\n        newIndex += loopedSlides;\n        const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n        if (slideChanged && diff !== 0) {\n          swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n        }\n      }\n\n      swiper.allowSlidePrev = allowSlidePrev;\n      swiper.allowSlideNext = allowSlideNext;\n      swiper.emit('loopFix');\n    }\n\n    function loopDestroy() {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params,\n        slides\n      } = swiper;\n      $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n      slides.removeAttr('data-swiper-slide-index');\n    }\n\n    var loop = {\n      loopCreate,\n      loopFix,\n      loopDestroy\n    };\n\n    function setGrabCursor(moving) {\n      const swiper = this;\n      if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n      const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n      el.style.cursor = 'move';\n      el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n      el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n      el.style.cursor = moving ? 'grabbing' : 'grab';\n    }\n\n    function unsetGrabCursor() {\n      const swiper = this;\n\n      if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n        return;\n      }\n\n      swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n    }\n\n    var grabCursor = {\n      setGrabCursor,\n      unsetGrabCursor\n    };\n\n    function closestElement(selector, base = this) {\n      function __closestFrom(el) {\n        if (!el || el === getDocument() || el === getWindow()) return null;\n        if (el.assignedSlot) el = el.assignedSlot;\n        const found = el.closest(selector);\n        return found || __closestFrom(el.getRootNode().host);\n      }\n\n      return __closestFrom(base);\n    }\n\n    function onTouchStart(event) {\n      const swiper = this;\n      const document = getDocument();\n      const window = getWindow();\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n\n      if (swiper.animating && params.preventInteractionOnTransition) {\n        return;\n      }\n\n      if (!swiper.animating && params.cssMode && params.loop) {\n        swiper.loopFix();\n      }\n\n      let e = event;\n      if (e.originalEvent) e = e.originalEvent;\n      let $targetEl = $(e.target);\n\n      if (params.touchEventsTarget === 'wrapper') {\n        if (!$targetEl.closest(swiper.wrapperEl).length) return;\n      }\n\n      data.isTouchEvent = e.type === 'touchstart';\n      if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n      if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n      if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n      const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n\n      if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) {\n        $targetEl = $(event.path[0]);\n      }\n\n      const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n      const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n      if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) {\n        swiper.allowClick = true;\n        return;\n      }\n\n      if (params.swipeHandler) {\n        if (!$targetEl.closest(params.swipeHandler)[0]) return;\n      }\n\n      touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n      touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n      const startX = touches.currentX;\n      const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n      const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n      const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n      if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n        if (edgeSwipeDetection === 'prevent') {\n          event.preventDefault();\n        } else {\n          return;\n        }\n      }\n\n      Object.assign(data, {\n        isTouched: true,\n        isMoved: false,\n        allowTouchCallbacks: true,\n        isScrolling: undefined,\n        startMoving: undefined\n      });\n      touches.startX = startX;\n      touches.startY = startY;\n      data.touchStartTime = now();\n      swiper.allowClick = true;\n      swiper.updateSize();\n      swiper.swipeDirection = undefined;\n      if (params.threshold > 0) data.allowThresholdMove = false;\n\n      if (e.type !== 'touchstart') {\n        let preventDefault = true;\n        if ($targetEl.is(data.focusableElements)) preventDefault = false;\n\n        if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n          document.activeElement.blur();\n        }\n\n        const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n        if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n          e.preventDefault();\n        }\n      }\n\n      swiper.emit('touchStart', e);\n    }\n\n    function onTouchMove(event) {\n      const document = getDocument();\n      const swiper = this;\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        rtlTranslate: rtl,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      let e = event;\n      if (e.originalEvent) e = e.originalEvent;\n\n      if (!data.isTouched) {\n        if (data.startMoving && data.isScrolling) {\n          swiper.emit('touchMoveOpposite', e);\n        }\n\n        return;\n      }\n\n      if (data.isTouchEvent && e.type !== 'touchmove') return;\n      const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n      const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n      const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n      if (e.preventedByNestedSwiper) {\n        touches.startX = pageX;\n        touches.startY = pageY;\n        return;\n      }\n\n      if (!swiper.allowTouchMove) {\n        // isMoved = true;\n        swiper.allowClick = false;\n\n        if (data.isTouched) {\n          Object.assign(touches, {\n            startX: pageX,\n            startY: pageY,\n            currentX: pageX,\n            currentY: pageY\n          });\n          data.touchStartTime = now();\n        }\n\n        return;\n      }\n\n      if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n        if (swiper.isVertical()) {\n          // Vertical\n          if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n            data.isTouched = false;\n            data.isMoved = false;\n            return;\n          }\n        } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n          return;\n        }\n      }\n\n      if (data.isTouchEvent && document.activeElement) {\n        if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n          data.isMoved = true;\n          swiper.allowClick = false;\n          return;\n        }\n      }\n\n      if (data.allowTouchCallbacks) {\n        swiper.emit('touchMove', e);\n      }\n\n      if (e.targetTouches && e.targetTouches.length > 1) return;\n      touches.currentX = pageX;\n      touches.currentY = pageY;\n      const diffX = touches.currentX - touches.startX;\n      const diffY = touches.currentY - touches.startY;\n      if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n      if (typeof data.isScrolling === 'undefined') {\n        let touchAngle;\n\n        if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n          data.isScrolling = false;\n        } else {\n          // eslint-disable-next-line\n          if (diffX * diffX + diffY * diffY >= 25) {\n            touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n            data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n          }\n        }\n      }\n\n      if (data.isScrolling) {\n        swiper.emit('touchMoveOpposite', e);\n      }\n\n      if (typeof data.startMoving === 'undefined') {\n        if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n          data.startMoving = true;\n        }\n      }\n\n      if (data.isScrolling) {\n        data.isTouched = false;\n        return;\n      }\n\n      if (!data.startMoving) {\n        return;\n      }\n\n      swiper.allowClick = false;\n\n      if (!params.cssMode && e.cancelable) {\n        e.preventDefault();\n      }\n\n      if (params.touchMoveStopPropagation && !params.nested) {\n        e.stopPropagation();\n      }\n\n      if (!data.isMoved) {\n        if (params.loop && !params.cssMode) {\n          swiper.loopFix();\n        }\n\n        data.startTranslate = swiper.getTranslate();\n        swiper.setTransition(0);\n\n        if (swiper.animating) {\n          swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n        }\n\n        data.allowMomentumBounce = false; // Grab Cursor\n\n        if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n          swiper.setGrabCursor(true);\n        }\n\n        swiper.emit('sliderFirstMove', e);\n      }\n\n      swiper.emit('sliderMove', e);\n      data.isMoved = true;\n      let diff = swiper.isHorizontal() ? diffX : diffY;\n      touches.diff = diff;\n      diff *= params.touchRatio;\n      if (rtl) diff = -diff;\n      swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n      data.currentTranslate = diff + data.startTranslate;\n      let disableParentSwiper = true;\n      let resistanceRatio = params.resistanceRatio;\n\n      if (params.touchReleaseOnEdges) {\n        resistanceRatio = 0;\n      }\n\n      if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n        disableParentSwiper = false;\n        if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n        disableParentSwiper = false;\n        if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n\n      if (disableParentSwiper) {\n        e.preventedByNestedSwiper = true;\n      } // Directions locks\n\n\n      if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n        data.currentTranslate = data.startTranslate;\n      }\n\n      if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n        data.currentTranslate = data.startTranslate;\n      }\n\n      if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n        data.currentTranslate = data.startTranslate;\n      } // Threshold\n\n\n      if (params.threshold > 0) {\n        if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n          if (!data.allowThresholdMove) {\n            data.allowThresholdMove = true;\n            touches.startX = touches.currentX;\n            touches.startY = touches.currentY;\n            data.currentTranslate = data.startTranslate;\n            touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n            return;\n          }\n        } else {\n          data.currentTranslate = data.startTranslate;\n          return;\n        }\n      }\n\n      if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n      if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n        swiper.freeMode.onTouchMove();\n      } // Update progress\n\n\n      swiper.updateProgress(data.currentTranslate); // Update translate\n\n      swiper.setTranslate(data.currentTranslate);\n    }\n\n    function onTouchEnd(event) {\n      const swiper = this;\n      const data = swiper.touchEventsData;\n      const {\n        params,\n        touches,\n        rtlTranslate: rtl,\n        slidesGrid,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      let e = event;\n      if (e.originalEvent) e = e.originalEvent;\n\n      if (data.allowTouchCallbacks) {\n        swiper.emit('touchEnd', e);\n      }\n\n      data.allowTouchCallbacks = false;\n\n      if (!data.isTouched) {\n        if (data.isMoved && params.grabCursor) {\n          swiper.setGrabCursor(false);\n        }\n\n        data.isMoved = false;\n        data.startMoving = false;\n        return;\n      } // Return Grab Cursor\n\n\n      if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n        swiper.setGrabCursor(false);\n      } // Time diff\n\n\n      const touchEndTime = now();\n      const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n      if (swiper.allowClick) {\n        swiper.updateClickedSlide(e);\n        swiper.emit('tap click', e);\n\n        if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n          swiper.emit('doubleTap doubleClick', e);\n        }\n      }\n\n      data.lastClickTime = now();\n      nextTick(() => {\n        if (!swiper.destroyed) swiper.allowClick = true;\n      });\n\n      if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n        data.isTouched = false;\n        data.isMoved = false;\n        data.startMoving = false;\n        return;\n      }\n\n      data.isTouched = false;\n      data.isMoved = false;\n      data.startMoving = false;\n      let currentPos;\n\n      if (params.followFinger) {\n        currentPos = rtl ? swiper.translate : -swiper.translate;\n      } else {\n        currentPos = -data.currentTranslate;\n      }\n\n      if (params.cssMode) {\n        return;\n      }\n\n      if (swiper.params.freeMode && params.freeMode.enabled) {\n        swiper.freeMode.onTouchEnd({\n          currentPos\n        });\n        return;\n      } // Find current slide\n\n\n      let stopIndex = 0;\n      let groupSize = swiper.slidesSizesGrid[0];\n\n      for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n        const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n        if (typeof slidesGrid[i + increment] !== 'undefined') {\n          if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n            stopIndex = i;\n            groupSize = slidesGrid[i + increment] - slidesGrid[i];\n          }\n        } else if (currentPos >= slidesGrid[i]) {\n          stopIndex = i;\n          groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n        }\n      } // Find current slide size\n\n\n      const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n      const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n      if (timeDiff > params.longSwipesMs) {\n        // Long touches\n        if (!params.longSwipes) {\n          swiper.slideTo(swiper.activeIndex);\n          return;\n        }\n\n        if (swiper.swipeDirection === 'next') {\n          if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n        }\n\n        if (swiper.swipeDirection === 'prev') {\n          if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n        }\n      } else {\n        // Short swipes\n        if (!params.shortSwipes) {\n          swiper.slideTo(swiper.activeIndex);\n          return;\n        }\n\n        const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n        if (!isNavButtonTarget) {\n          if (swiper.swipeDirection === 'next') {\n            swiper.slideTo(stopIndex + increment);\n          }\n\n          if (swiper.swipeDirection === 'prev') {\n            swiper.slideTo(stopIndex);\n          }\n        } else if (e.target === swiper.navigation.nextEl) {\n          swiper.slideTo(stopIndex + increment);\n        } else {\n          swiper.slideTo(stopIndex);\n        }\n      }\n    }\n\n    function onResize() {\n      const swiper = this;\n      const {\n        params,\n        el\n      } = swiper;\n      if (el && el.offsetWidth === 0) return; // Breakpoints\n\n      if (params.breakpoints) {\n        swiper.setBreakpoint();\n      } // Save locks\n\n\n      const {\n        allowSlideNext,\n        allowSlidePrev,\n        snapGrid\n      } = swiper; // Disable locks on resize\n\n      swiper.allowSlideNext = true;\n      swiper.allowSlidePrev = true;\n      swiper.updateSize();\n      swiper.updateSlides();\n      swiper.updateSlidesClasses();\n\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n        swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n      } else {\n        swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.run();\n      } // Return locks after resize\n\n\n      swiper.allowSlidePrev = allowSlidePrev;\n      swiper.allowSlideNext = allowSlideNext;\n\n      if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n        swiper.checkOverflow();\n      }\n    }\n\n    function onClick(e) {\n      const swiper = this;\n      if (!swiper.enabled) return;\n\n      if (!swiper.allowClick) {\n        if (swiper.params.preventClicks) e.preventDefault();\n\n        if (swiper.params.preventClicksPropagation && swiper.animating) {\n          e.stopPropagation();\n          e.stopImmediatePropagation();\n        }\n      }\n    }\n\n    function onScroll() {\n      const swiper = this;\n      const {\n        wrapperEl,\n        rtlTranslate,\n        enabled\n      } = swiper;\n      if (!enabled) return;\n      swiper.previousTranslate = swiper.translate;\n\n      if (swiper.isHorizontal()) {\n        swiper.translate = -wrapperEl.scrollLeft;\n      } else {\n        swiper.translate = -wrapperEl.scrollTop;\n      } // eslint-disable-next-line\n\n\n      if (swiper.translate === -0) swiper.translate = 0;\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n      let newProgress;\n      const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n      if (translatesDiff === 0) {\n        newProgress = 0;\n      } else {\n        newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n      }\n\n      if (newProgress !== swiper.progress) {\n        swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n      }\n\n      swiper.emit('setTranslate', swiper.translate, false);\n    }\n\n    let dummyEventAttached = false;\n\n    function dummyEventListener() {}\n\n    const events = (swiper, method) => {\n      const document = getDocument();\n      const {\n        params,\n        touchEvents,\n        el,\n        wrapperEl,\n        device,\n        support\n      } = swiper;\n      const capture = !!params.nested;\n      const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n      const swiperMethod = method; // Touch Events\n\n      if (!support.touch) {\n        el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n        document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n        document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n      } else {\n        const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n        el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n          passive: false,\n          capture\n        } : capture);\n        el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n        if (touchEvents.cancel) {\n          el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n        }\n      } // Prevent Links Clicks\n\n\n      if (params.preventClicks || params.preventClicksPropagation) {\n        el[domMethod]('click', swiper.onClick, true);\n      }\n\n      if (params.cssMode) {\n        wrapperEl[domMethod]('scroll', swiper.onScroll);\n      } // Resize handler\n\n\n      if (params.updateOnWindowResize) {\n        swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n      } else {\n        swiper[swiperMethod]('observerUpdate', onResize, true);\n      }\n    };\n\n    function attachEvents() {\n      const swiper = this;\n      const document = getDocument();\n      const {\n        params,\n        support\n      } = swiper;\n      swiper.onTouchStart = onTouchStart.bind(swiper);\n      swiper.onTouchMove = onTouchMove.bind(swiper);\n      swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n      if (params.cssMode) {\n        swiper.onScroll = onScroll.bind(swiper);\n      }\n\n      swiper.onClick = onClick.bind(swiper);\n\n      if (support.touch && !dummyEventAttached) {\n        document.addEventListener('touchstart', dummyEventListener);\n        dummyEventAttached = true;\n      }\n\n      events(swiper, 'on');\n    }\n\n    function detachEvents() {\n      const swiper = this;\n      events(swiper, 'off');\n    }\n\n    var events$1 = {\n      attachEvents,\n      detachEvents\n    };\n\n    const isGridEnabled = (swiper, params) => {\n      return swiper.grid && params.grid && params.grid.rows > 1;\n    };\n\n    function setBreakpoint() {\n      const swiper = this;\n      const {\n        activeIndex,\n        initialized,\n        loopedSlides = 0,\n        params,\n        $el\n      } = swiper;\n      const breakpoints = params.breakpoints;\n      if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n      const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n      if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n      const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n      const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n      const wasMultiRow = isGridEnabled(swiper, params);\n      const isMultiRow = isGridEnabled(swiper, breakpointParams);\n      const wasEnabled = params.enabled;\n\n      if (wasMultiRow && !isMultiRow) {\n        $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n        swiper.emitContainerClasses();\n      } else if (!wasMultiRow && isMultiRow) {\n        $el.addClass(`${params.containerModifierClass}grid`);\n\n        if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n          $el.addClass(`${params.containerModifierClass}grid-column`);\n        }\n\n        swiper.emitContainerClasses();\n      }\n\n      const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n      const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n      if (directionChanged && initialized) {\n        swiper.changeDirection();\n      }\n\n      extend(swiper.params, breakpointParams);\n      const isEnabled = swiper.params.enabled;\n      Object.assign(swiper, {\n        allowTouchMove: swiper.params.allowTouchMove,\n        allowSlideNext: swiper.params.allowSlideNext,\n        allowSlidePrev: swiper.params.allowSlidePrev\n      });\n\n      if (wasEnabled && !isEnabled) {\n        swiper.disable();\n      } else if (!wasEnabled && isEnabled) {\n        swiper.enable();\n      }\n\n      swiper.currentBreakpoint = breakpoint;\n      swiper.emit('_beforeBreakpoint', breakpointParams);\n\n      if (needsReLoop && initialized) {\n        swiper.loopDestroy();\n        swiper.loopCreate();\n        swiper.updateSlides();\n        swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n      }\n\n      swiper.emit('breakpoint', breakpointParams);\n    }\n\n    function getBreakpoint(breakpoints, base = 'window', containerEl) {\n      if (!breakpoints || base === 'container' && !containerEl) return undefined;\n      let breakpoint = false;\n      const window = getWindow();\n      const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n      const points = Object.keys(breakpoints).map(point => {\n        if (typeof point === 'string' && point.indexOf('@') === 0) {\n          const minRatio = parseFloat(point.substr(1));\n          const value = currentHeight * minRatio;\n          return {\n            value,\n            point\n          };\n        }\n\n        return {\n          value: point,\n          point\n        };\n      });\n      points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n      for (let i = 0; i < points.length; i += 1) {\n        const {\n          point,\n          value\n        } = points[i];\n\n        if (base === 'window') {\n          if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n            breakpoint = point;\n          }\n        } else if (value <= containerEl.clientWidth) {\n          breakpoint = point;\n        }\n      }\n\n      return breakpoint || 'max';\n    }\n\n    var breakpoints = {\n      setBreakpoint,\n      getBreakpoint\n    };\n\n    function prepareClasses(entries, prefix) {\n      const resultClasses = [];\n      entries.forEach(item => {\n        if (typeof item === 'object') {\n          Object.keys(item).forEach(classNames => {\n            if (item[classNames]) {\n              resultClasses.push(prefix + classNames);\n            }\n          });\n        } else if (typeof item === 'string') {\n          resultClasses.push(prefix + item);\n        }\n      });\n      return resultClasses;\n    }\n\n    function addClasses() {\n      const swiper = this;\n      const {\n        classNames,\n        params,\n        rtl,\n        $el,\n        device,\n        support\n      } = swiper; // prettier-ignore\n\n      const suffixes = prepareClasses(['initialized', params.direction, {\n        'pointer-events': !support.touch\n      }, {\n        'free-mode': swiper.params.freeMode && params.freeMode.enabled\n      }, {\n        'autoheight': params.autoHeight\n      }, {\n        'rtl': rtl\n      }, {\n        'grid': params.grid && params.grid.rows > 1\n      }, {\n        'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n      }, {\n        'android': device.android\n      }, {\n        'ios': device.ios\n      }, {\n        'css-mode': params.cssMode\n      }, {\n        'centered': params.cssMode && params.centeredSlides\n      }], params.containerModifierClass);\n      classNames.push(...suffixes);\n      $el.addClass([...classNames].join(' '));\n      swiper.emitContainerClasses();\n    }\n\n    function removeClasses() {\n      const swiper = this;\n      const {\n        $el,\n        classNames\n      } = swiper;\n      $el.removeClass(classNames.join(' '));\n      swiper.emitContainerClasses();\n    }\n\n    var classes = {\n      addClasses,\n      removeClasses\n    };\n\n    function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n      const window = getWindow();\n      let image;\n\n      function onReady() {\n        if (callback) callback();\n      }\n\n      const isPicture = $(imageEl).parent('picture')[0];\n\n      if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n        if (src) {\n          image = new window.Image();\n          image.onload = onReady;\n          image.onerror = onReady;\n\n          if (sizes) {\n            image.sizes = sizes;\n          }\n\n          if (srcset) {\n            image.srcset = srcset;\n          }\n\n          if (src) {\n            image.src = src;\n          }\n        } else {\n          onReady();\n        }\n      } else {\n        // image already loaded...\n        onReady();\n      }\n    }\n\n    function preloadImages() {\n      const swiper = this;\n      swiper.imagesToLoad = swiper.$el.find('img');\n\n      function onReady() {\n        if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n        if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n        if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n          if (swiper.params.updateOnImagesReady) swiper.update();\n          swiper.emit('imagesReady');\n        }\n      }\n\n      for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n        const imageEl = swiper.imagesToLoad[i];\n        swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n      }\n    }\n\n    var images = {\n      loadImage,\n      preloadImages\n    };\n\n    function checkOverflow() {\n      const swiper = this;\n      const {\n        isLocked: wasLocked,\n        params\n      } = swiper;\n      const {\n        slidesOffsetBefore\n      } = params;\n\n      if (slidesOffsetBefore) {\n        const lastSlideIndex = swiper.slides.length - 1;\n        const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n        swiper.isLocked = swiper.size > lastSlideRightEdge;\n      } else {\n        swiper.isLocked = swiper.snapGrid.length === 1;\n      }\n\n      if (params.allowSlideNext === true) {\n        swiper.allowSlideNext = !swiper.isLocked;\n      }\n\n      if (params.allowSlidePrev === true) {\n        swiper.allowSlidePrev = !swiper.isLocked;\n      }\n\n      if (wasLocked && wasLocked !== swiper.isLocked) {\n        swiper.isEnd = false;\n      }\n\n      if (wasLocked !== swiper.isLocked) {\n        swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n      }\n    }\n\n    var checkOverflow$1 = {\n      checkOverflow\n    };\n\n    var defaults = {\n      init: true,\n      direction: 'horizontal',\n      touchEventsTarget: 'wrapper',\n      initialSlide: 0,\n      speed: 300,\n      cssMode: false,\n      updateOnWindowResize: true,\n      resizeObserver: true,\n      nested: false,\n      createElements: false,\n      enabled: true,\n      focusableElements: 'input, select, option, textarea, button, video, label',\n      // Overrides\n      width: null,\n      height: null,\n      //\n      preventInteractionOnTransition: false,\n      // ssr\n      userAgent: null,\n      url: null,\n      // To support iOS's swipe-to-go-back gesture (when being used in-app).\n      edgeSwipeDetection: false,\n      edgeSwipeThreshold: 20,\n      // Autoheight\n      autoHeight: false,\n      // Set wrapper width\n      setWrapperSize: false,\n      // Virtual Translate\n      virtualTranslate: false,\n      // Effects\n      effect: 'slide',\n      // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n      // Breakpoints\n      breakpoints: undefined,\n      breakpointsBase: 'window',\n      // Slides grid\n      spaceBetween: 0,\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      slidesPerGroupSkip: 0,\n      slidesPerGroupAuto: false,\n      centeredSlides: false,\n      centeredSlidesBounds: false,\n      slidesOffsetBefore: 0,\n      // in px\n      slidesOffsetAfter: 0,\n      // in px\n      normalizeSlideIndex: true,\n      centerInsufficientSlides: false,\n      // Disable swiper and hide navigation when container not overflow\n      watchOverflow: true,\n      // Round length\n      roundLengths: false,\n      // Touches\n      touchRatio: 1,\n      touchAngle: 45,\n      simulateTouch: true,\n      shortSwipes: true,\n      longSwipes: true,\n      longSwipesRatio: 0.5,\n      longSwipesMs: 300,\n      followFinger: true,\n      allowTouchMove: true,\n      threshold: 0,\n      touchMoveStopPropagation: false,\n      touchStartPreventDefault: true,\n      touchStartForcePreventDefault: false,\n      touchReleaseOnEdges: false,\n      // Unique Navigation Elements\n      uniqueNavElements: true,\n      // Resistance\n      resistance: true,\n      resistanceRatio: 0.85,\n      // Progress\n      watchSlidesProgress: false,\n      // Cursor\n      grabCursor: false,\n      // Clicks\n      preventClicks: true,\n      preventClicksPropagation: true,\n      slideToClickedSlide: false,\n      // Images\n      preloadImages: true,\n      updateOnImagesReady: true,\n      // loop\n      loop: false,\n      loopAdditionalSlides: 0,\n      loopedSlides: null,\n      loopFillGroupWithBlank: false,\n      loopPreventsSlide: true,\n      // Swiping/no swiping\n      allowSlidePrev: true,\n      allowSlideNext: true,\n      swipeHandler: null,\n      // '.swipe-handler',\n      noSwiping: true,\n      noSwipingClass: 'swiper-no-swiping',\n      noSwipingSelector: null,\n      // Passive Listeners\n      passiveListeners: true,\n      // NS\n      containerModifierClass: 'swiper-',\n      // NEW\n      slideClass: 'swiper-slide',\n      slideBlankClass: 'swiper-slide-invisible-blank',\n      slideActiveClass: 'swiper-slide-active',\n      slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n      slideVisibleClass: 'swiper-slide-visible',\n      slideDuplicateClass: 'swiper-slide-duplicate',\n      slideNextClass: 'swiper-slide-next',\n      slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n      slidePrevClass: 'swiper-slide-prev',\n      slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n      wrapperClass: 'swiper-wrapper',\n      // Callbacks\n      runCallbacksOnInit: true,\n      // Internals\n      _emitClasses: false\n    };\n\n    function moduleExtendParams(params, allModulesParams) {\n      return function extendParams(obj = {}) {\n        const moduleParamName = Object.keys(obj)[0];\n        const moduleParams = obj[moduleParamName];\n\n        if (typeof moduleParams !== 'object' || moduleParams === null) {\n          extend(allModulesParams, obj);\n          return;\n        }\n\n        if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            auto: true\n          };\n        }\n\n        if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n          extend(allModulesParams, obj);\n          return;\n        }\n\n        if (params[moduleParamName] === true) {\n          params[moduleParamName] = {\n            enabled: true\n          };\n        }\n\n        if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n          params[moduleParamName].enabled = true;\n        }\n\n        if (!params[moduleParamName]) params[moduleParamName] = {\n          enabled: false\n        };\n        extend(allModulesParams, obj);\n      };\n    }\n\n    /* eslint no-param-reassign: \"off\" */\n    const prototypes = {\n      eventsEmitter,\n      update,\n      translate,\n      transition,\n      slide,\n      loop,\n      grabCursor,\n      events: events$1,\n      breakpoints,\n      checkOverflow: checkOverflow$1,\n      classes,\n      images\n    };\n    const extendedDefaults = {};\n\n    class Swiper {\n      constructor(...args) {\n        let el;\n        let params;\n\n        if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n          params = args[0];\n        } else {\n          [el, params] = args;\n        }\n\n        if (!params) params = {};\n        params = extend({}, params);\n        if (el && !params.el) params.el = el;\n\n        if (params.el && $(params.el).length > 1) {\n          const swipers = [];\n          $(params.el).each(containerEl => {\n            const newParams = extend({}, params, {\n              el: containerEl\n            });\n            swipers.push(new Swiper(newParams));\n          });\n          return swipers;\n        } // Swiper Instance\n\n\n        const swiper = this;\n        swiper.__swiper__ = true;\n        swiper.support = getSupport();\n        swiper.device = getDevice({\n          userAgent: params.userAgent\n        });\n        swiper.browser = getBrowser();\n        swiper.eventsListeners = {};\n        swiper.eventsAnyListeners = [];\n        swiper.modules = [...swiper.__modules__];\n\n        if (params.modules && Array.isArray(params.modules)) {\n          swiper.modules.push(...params.modules);\n        }\n\n        const allModulesParams = {};\n        swiper.modules.forEach(mod => {\n          mod({\n            swiper,\n            extendParams: moduleExtendParams(params, allModulesParams),\n            on: swiper.on.bind(swiper),\n            once: swiper.once.bind(swiper),\n            off: swiper.off.bind(swiper),\n            emit: swiper.emit.bind(swiper)\n          });\n        }); // Extend defaults with modules params\n\n        const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n        swiper.params = extend({}, swiperParams, extendedDefaults, params);\n        swiper.originalParams = extend({}, swiper.params);\n        swiper.passedParams = extend({}, params); // add event listeners\n\n        if (swiper.params && swiper.params.on) {\n          Object.keys(swiper.params.on).forEach(eventName => {\n            swiper.on(eventName, swiper.params.on[eventName]);\n          });\n        }\n\n        if (swiper.params && swiper.params.onAny) {\n          swiper.onAny(swiper.params.onAny);\n        } // Save Dom lib\n\n\n        swiper.$ = $; // Extend Swiper\n\n        Object.assign(swiper, {\n          enabled: swiper.params.enabled,\n          el,\n          // Classes\n          classNames: [],\n          // Slides\n          slides: $(),\n          slidesGrid: [],\n          snapGrid: [],\n          slidesSizesGrid: [],\n\n          // isDirection\n          isHorizontal() {\n            return swiper.params.direction === 'horizontal';\n          },\n\n          isVertical() {\n            return swiper.params.direction === 'vertical';\n          },\n\n          // Indexes\n          activeIndex: 0,\n          realIndex: 0,\n          //\n          isBeginning: true,\n          isEnd: false,\n          // Props\n          translate: 0,\n          previousTranslate: 0,\n          progress: 0,\n          velocity: 0,\n          animating: false,\n          // Locks\n          allowSlideNext: swiper.params.allowSlideNext,\n          allowSlidePrev: swiper.params.allowSlidePrev,\n          // Touch Events\n          touchEvents: function touchEvents() {\n            const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n            const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n            swiper.touchEventsTouch = {\n              start: touch[0],\n              move: touch[1],\n              end: touch[2],\n              cancel: touch[3]\n            };\n            swiper.touchEventsDesktop = {\n              start: desktop[0],\n              move: desktop[1],\n              end: desktop[2]\n            };\n            return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n          }(),\n          touchEventsData: {\n            isTouched: undefined,\n            isMoved: undefined,\n            allowTouchCallbacks: undefined,\n            touchStartTime: undefined,\n            isScrolling: undefined,\n            currentTranslate: undefined,\n            startTranslate: undefined,\n            allowThresholdMove: undefined,\n            // Form elements to match\n            focusableElements: swiper.params.focusableElements,\n            // Last click time\n            lastClickTime: now(),\n            clickTimeout: undefined,\n            // Velocities\n            velocities: [],\n            allowMomentumBounce: undefined,\n            isTouchEvent: undefined,\n            startMoving: undefined\n          },\n          // Clicks\n          allowClick: true,\n          // Touches\n          allowTouchMove: swiper.params.allowTouchMove,\n          touches: {\n            startX: 0,\n            startY: 0,\n            currentX: 0,\n            currentY: 0,\n            diff: 0\n          },\n          // Images\n          imagesToLoad: [],\n          imagesLoaded: 0\n        });\n        swiper.emit('_swiper'); // Init\n\n        if (swiper.params.init) {\n          swiper.init();\n        } // Return app instance\n\n\n        return swiper;\n      }\n\n      enable() {\n        const swiper = this;\n        if (swiper.enabled) return;\n        swiper.enabled = true;\n\n        if (swiper.params.grabCursor) {\n          swiper.setGrabCursor();\n        }\n\n        swiper.emit('enable');\n      }\n\n      disable() {\n        const swiper = this;\n        if (!swiper.enabled) return;\n        swiper.enabled = false;\n\n        if (swiper.params.grabCursor) {\n          swiper.unsetGrabCursor();\n        }\n\n        swiper.emit('disable');\n      }\n\n      setProgress(progress, speed) {\n        const swiper = this;\n        progress = Math.min(Math.max(progress, 0), 1);\n        const min = swiper.minTranslate();\n        const max = swiper.maxTranslate();\n        const current = (max - min) * progress + min;\n        swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      emitContainerClasses() {\n        const swiper = this;\n        if (!swiper.params._emitClasses || !swiper.el) return;\n        const cls = swiper.el.className.split(' ').filter(className => {\n          return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n        });\n        swiper.emit('_containerClasses', cls.join(' '));\n      }\n\n      getSlideClasses(slideEl) {\n        const swiper = this;\n        return slideEl.className.split(' ').filter(className => {\n          return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n        }).join(' ');\n      }\n\n      emitSlidesClasses() {\n        const swiper = this;\n        if (!swiper.params._emitClasses || !swiper.el) return;\n        const updates = [];\n        swiper.slides.each(slideEl => {\n          const classNames = swiper.getSlideClasses(slideEl);\n          updates.push({\n            slideEl,\n            classNames\n          });\n          swiper.emit('_slideClass', slideEl, classNames);\n        });\n        swiper.emit('_slideClasses', updates);\n      }\n\n      slidesPerViewDynamic(view = 'current', exact = false) {\n        const swiper = this;\n        const {\n          params,\n          slides,\n          slidesGrid,\n          slidesSizesGrid,\n          size: swiperSize,\n          activeIndex\n        } = swiper;\n        let spv = 1;\n\n        if (params.centeredSlides) {\n          let slideSize = slides[activeIndex].swiperSlideSize;\n          let breakLoop;\n\n          for (let i = activeIndex + 1; i < slides.length; i += 1) {\n            if (slides[i] && !breakLoop) {\n              slideSize += slides[i].swiperSlideSize;\n              spv += 1;\n              if (slideSize > swiperSize) breakLoop = true;\n            }\n          }\n\n          for (let i = activeIndex - 1; i >= 0; i -= 1) {\n            if (slides[i] && !breakLoop) {\n              slideSize += slides[i].swiperSlideSize;\n              spv += 1;\n              if (slideSize > swiperSize) breakLoop = true;\n            }\n          }\n        } else {\n          // eslint-disable-next-line\n          if (view === 'current') {\n            for (let i = activeIndex + 1; i < slides.length; i += 1) {\n              const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n              if (slideInView) {\n                spv += 1;\n              }\n            }\n          } else {\n            // previous\n            for (let i = activeIndex - 1; i >= 0; i -= 1) {\n              const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n              if (slideInView) {\n                spv += 1;\n              }\n            }\n          }\n        }\n\n        return spv;\n      }\n\n      update() {\n        const swiper = this;\n        if (!swiper || swiper.destroyed) return;\n        const {\n          snapGrid,\n          params\n        } = swiper; // Breakpoints\n\n        if (params.breakpoints) {\n          swiper.setBreakpoint();\n        }\n\n        swiper.updateSize();\n        swiper.updateSlides();\n        swiper.updateProgress();\n        swiper.updateSlidesClasses();\n\n        function setTranslate() {\n          const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n          const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n          swiper.setTranslate(newTranslate);\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n        }\n\n        let translated;\n\n        if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n          setTranslate();\n\n          if (swiper.params.autoHeight) {\n            swiper.updateAutoHeight();\n          }\n        } else {\n          if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n            translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n          } else {\n            translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n          }\n\n          if (!translated) {\n            setTranslate();\n          }\n        }\n\n        if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n          swiper.checkOverflow();\n        }\n\n        swiper.emit('update');\n      }\n\n      changeDirection(newDirection, needUpdate = true) {\n        const swiper = this;\n        const currentDirection = swiper.params.direction;\n\n        if (!newDirection) {\n          // eslint-disable-next-line\n          newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n        }\n\n        if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n          return swiper;\n        }\n\n        swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n        swiper.emitContainerClasses();\n        swiper.params.direction = newDirection;\n        swiper.slides.each(slideEl => {\n          if (newDirection === 'vertical') {\n            slideEl.style.width = '';\n          } else {\n            slideEl.style.height = '';\n          }\n        });\n        swiper.emit('changeDirection');\n        if (needUpdate) swiper.update();\n        return swiper;\n      }\n\n      mount(el) {\n        const swiper = this;\n        if (swiper.mounted) return true; // Find el\n\n        const $el = $(el || swiper.params.el);\n        el = $el[0];\n\n        if (!el) {\n          return false;\n        }\n\n        el.swiper = swiper;\n\n        const getWrapperSelector = () => {\n          return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n        };\n\n        const getWrapper = () => {\n          if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n            const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n            res.children = options => $el.children(options);\n\n            return res;\n          }\n\n          return $el.children(getWrapperSelector());\n        }; // Find Wrapper\n\n\n        let $wrapperEl = getWrapper();\n\n        if ($wrapperEl.length === 0 && swiper.params.createElements) {\n          const document = getDocument();\n          const wrapper = document.createElement('div');\n          $wrapperEl = $(wrapper);\n          wrapper.className = swiper.params.wrapperClass;\n          $el.append(wrapper);\n          $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n            $wrapperEl.append(slideEl);\n          });\n        }\n\n        Object.assign(swiper, {\n          $el,\n          el,\n          $wrapperEl,\n          wrapperEl: $wrapperEl[0],\n          mounted: true,\n          // RTL\n          rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n          rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n          wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n        });\n        return true;\n      }\n\n      init(el) {\n        const swiper = this;\n        if (swiper.initialized) return swiper;\n        const mounted = swiper.mount(el);\n        if (mounted === false) return swiper;\n        swiper.emit('beforeInit'); // Set breakpoint\n\n        if (swiper.params.breakpoints) {\n          swiper.setBreakpoint();\n        } // Add Classes\n\n\n        swiper.addClasses(); // Create loop\n\n        if (swiper.params.loop) {\n          swiper.loopCreate();\n        } // Update size\n\n\n        swiper.updateSize(); // Update slides\n\n        swiper.updateSlides();\n\n        if (swiper.params.watchOverflow) {\n          swiper.checkOverflow();\n        } // Set Grab Cursor\n\n\n        if (swiper.params.grabCursor && swiper.enabled) {\n          swiper.setGrabCursor();\n        }\n\n        if (swiper.params.preloadImages) {\n          swiper.preloadImages();\n        } // Slide To Initial Slide\n\n\n        if (swiper.params.loop) {\n          swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n        } else {\n          swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n        } // Attach events\n\n\n        swiper.attachEvents(); // Init Flag\n\n        swiper.initialized = true; // Emit\n\n        swiper.emit('init');\n        swiper.emit('afterInit');\n        return swiper;\n      }\n\n      destroy(deleteInstance = true, cleanStyles = true) {\n        const swiper = this;\n        const {\n          params,\n          $el,\n          $wrapperEl,\n          slides\n        } = swiper;\n\n        if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n          return null;\n        }\n\n        swiper.emit('beforeDestroy'); // Init Flag\n\n        swiper.initialized = false; // Detach events\n\n        swiper.detachEvents(); // Destroy loop\n\n        if (params.loop) {\n          swiper.loopDestroy();\n        } // Cleanup styles\n\n\n        if (cleanStyles) {\n          swiper.removeClasses();\n          $el.removeAttr('style');\n          $wrapperEl.removeAttr('style');\n\n          if (slides && slides.length) {\n            slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n          }\n        }\n\n        swiper.emit('destroy'); // Detach emitter events\n\n        Object.keys(swiper.eventsListeners).forEach(eventName => {\n          swiper.off(eventName);\n        });\n\n        if (deleteInstance !== false) {\n          swiper.$el[0].swiper = null;\n          deleteProps(swiper);\n        }\n\n        swiper.destroyed = true;\n        return null;\n      }\n\n      static extendDefaults(newDefaults) {\n        extend(extendedDefaults, newDefaults);\n      }\n\n      static get extendedDefaults() {\n        return extendedDefaults;\n      }\n\n      static get defaults() {\n        return defaults;\n      }\n\n      static installModule(mod) {\n        if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n        const modules = Swiper.prototype.__modules__;\n\n        if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n          modules.push(mod);\n        }\n      }\n\n      static use(module) {\n        if (Array.isArray(module)) {\n          module.forEach(m => Swiper.installModule(m));\n          return Swiper;\n        }\n\n        Swiper.installModule(module);\n        return Swiper;\n      }\n\n    }\n\n    Object.keys(prototypes).forEach(prototypeGroup => {\n      Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n        Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n      });\n    });\n    Swiper.use([Resize, Observer]);\n\n    function Virtual({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        virtual: {\n          enabled: false,\n          slides: [],\n          cache: true,\n          renderSlide: null,\n          renderExternal: null,\n          renderExternalUpdate: true,\n          addSlidesBefore: 0,\n          addSlidesAfter: 0\n        }\n      });\n      let cssModeTimeout;\n      swiper.virtual = {\n        cache: {},\n        from: undefined,\n        to: undefined,\n        slides: [],\n        offset: 0,\n        slidesGrid: []\n      };\n\n      function renderSlide(slide, index) {\n        const params = swiper.params.virtual;\n\n        if (params.cache && swiper.virtual.cache[index]) {\n          return swiper.virtual.cache[index];\n        }\n\n        const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n        if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n        if (params.cache) swiper.virtual.cache[index] = $slideEl;\n        return $slideEl;\n      }\n\n      function update(force) {\n        const {\n          slidesPerView,\n          slidesPerGroup,\n          centeredSlides\n        } = swiper.params;\n        const {\n          addSlidesBefore,\n          addSlidesAfter\n        } = swiper.params.virtual;\n        const {\n          from: previousFrom,\n          to: previousTo,\n          slides,\n          slidesGrid: previousSlidesGrid,\n          offset: previousOffset\n        } = swiper.virtual;\n\n        if (!swiper.params.cssMode) {\n          swiper.updateActiveIndex();\n        }\n\n        const activeIndex = swiper.activeIndex || 0;\n        let offsetProp;\n        if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n        let slidesAfter;\n        let slidesBefore;\n\n        if (centeredSlides) {\n          slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n          slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n        } else {\n          slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n          slidesBefore = slidesPerGroup + addSlidesBefore;\n        }\n\n        const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n        const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n        const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n        Object.assign(swiper.virtual, {\n          from,\n          to,\n          offset,\n          slidesGrid: swiper.slidesGrid\n        });\n\n        function onRendered() {\n          swiper.updateSlides();\n          swiper.updateProgress();\n          swiper.updateSlidesClasses();\n\n          if (swiper.lazy && swiper.params.lazy.enabled) {\n            swiper.lazy.load();\n          }\n        }\n\n        if (previousFrom === from && previousTo === to && !force) {\n          if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n            swiper.slides.css(offsetProp, `${offset}px`);\n          }\n\n          swiper.updateProgress();\n          return;\n        }\n\n        if (swiper.params.virtual.renderExternal) {\n          swiper.params.virtual.renderExternal.call(swiper, {\n            offset,\n            from,\n            to,\n            slides: function getSlides() {\n              const slidesToRender = [];\n\n              for (let i = from; i <= to; i += 1) {\n                slidesToRender.push(slides[i]);\n              }\n\n              return slidesToRender;\n            }()\n          });\n\n          if (swiper.params.virtual.renderExternalUpdate) {\n            onRendered();\n          }\n\n          return;\n        }\n\n        const prependIndexes = [];\n        const appendIndexes = [];\n\n        if (force) {\n          swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n        } else {\n          for (let i = previousFrom; i <= previousTo; i += 1) {\n            if (i < from || i > to) {\n              swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n            }\n          }\n        }\n\n        for (let i = 0; i < slides.length; i += 1) {\n          if (i >= from && i <= to) {\n            if (typeof previousTo === 'undefined' || force) {\n              appendIndexes.push(i);\n            } else {\n              if (i > previousTo) appendIndexes.push(i);\n              if (i < previousFrom) prependIndexes.push(i);\n            }\n          }\n        }\n\n        appendIndexes.forEach(index => {\n          swiper.$wrapperEl.append(renderSlide(slides[index], index));\n        });\n        prependIndexes.sort((a, b) => b - a).forEach(index => {\n          swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n        });\n        swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n        onRendered();\n      }\n\n      function appendSlide(slides) {\n        if (typeof slides === 'object' && 'length' in slides) {\n          for (let i = 0; i < slides.length; i += 1) {\n            if (slides[i]) swiper.virtual.slides.push(slides[i]);\n          }\n        } else {\n          swiper.virtual.slides.push(slides);\n        }\n\n        update(true);\n      }\n\n      function prependSlide(slides) {\n        const activeIndex = swiper.activeIndex;\n        let newActiveIndex = activeIndex + 1;\n        let numberOfNewSlides = 1;\n\n        if (Array.isArray(slides)) {\n          for (let i = 0; i < slides.length; i += 1) {\n            if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n          }\n\n          newActiveIndex = activeIndex + slides.length;\n          numberOfNewSlides = slides.length;\n        } else {\n          swiper.virtual.slides.unshift(slides);\n        }\n\n        if (swiper.params.virtual.cache) {\n          const cache = swiper.virtual.cache;\n          const newCache = {};\n          Object.keys(cache).forEach(cachedIndex => {\n            const $cachedEl = cache[cachedIndex];\n            const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n\n            if (cachedElIndex) {\n              $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n            }\n\n            newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n          });\n          swiper.virtual.cache = newCache;\n        }\n\n        update(true);\n        swiper.slideTo(newActiveIndex, 0);\n      }\n\n      function removeSlide(slidesIndexes) {\n        if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n        let activeIndex = swiper.activeIndex;\n\n        if (Array.isArray(slidesIndexes)) {\n          for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n            swiper.virtual.slides.splice(slidesIndexes[i], 1);\n\n            if (swiper.params.virtual.cache) {\n              delete swiper.virtual.cache[slidesIndexes[i]];\n            }\n\n            if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n            activeIndex = Math.max(activeIndex, 0);\n          }\n        } else {\n          swiper.virtual.slides.splice(slidesIndexes, 1);\n\n          if (swiper.params.virtual.cache) {\n            delete swiper.virtual.cache[slidesIndexes];\n          }\n\n          if (slidesIndexes < activeIndex) activeIndex -= 1;\n          activeIndex = Math.max(activeIndex, 0);\n        }\n\n        update(true);\n        swiper.slideTo(activeIndex, 0);\n      }\n\n      function removeAllSlides() {\n        swiper.virtual.slides = [];\n\n        if (swiper.params.virtual.cache) {\n          swiper.virtual.cache = {};\n        }\n\n        update(true);\n        swiper.slideTo(0, 0);\n      }\n\n      on('beforeInit', () => {\n        if (!swiper.params.virtual.enabled) return;\n        swiper.virtual.slides = swiper.params.virtual.slides;\n        swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n\n        if (!swiper.params.initialSlide) {\n          update();\n        }\n      });\n      on('setTranslate', () => {\n        if (!swiper.params.virtual.enabled) return;\n\n        if (swiper.params.cssMode && !swiper._immediateVirtual) {\n          clearTimeout(cssModeTimeout);\n          cssModeTimeout = setTimeout(() => {\n            update();\n          }, 100);\n        } else {\n          update();\n        }\n      });\n      on('init update resize', () => {\n        if (!swiper.params.virtual.enabled) return;\n\n        if (swiper.params.cssMode) {\n          setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n        }\n      });\n      Object.assign(swiper.virtual, {\n        appendSlide,\n        prependSlide,\n        removeSlide,\n        removeAllSlides,\n        update\n      });\n    }\n\n    /* eslint-disable consistent-return */\n    function Keyboard({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const document = getDocument();\n      const window = getWindow();\n      swiper.keyboard = {\n        enabled: false\n      };\n      extendParams({\n        keyboard: {\n          enabled: false,\n          onlyInViewport: true,\n          pageUpDown: true\n        }\n      });\n\n      function handle(event) {\n        if (!swiper.enabled) return;\n        const {\n          rtlTranslate: rtl\n        } = swiper;\n        let e = event;\n        if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n        const kc = e.keyCode || e.charCode;\n        const pageUpDown = swiper.params.keyboard.pageUpDown;\n        const isPageUp = pageUpDown && kc === 33;\n        const isPageDown = pageUpDown && kc === 34;\n        const isArrowLeft = kc === 37;\n        const isArrowRight = kc === 39;\n        const isArrowUp = kc === 38;\n        const isArrowDown = kc === 40; // Directions locks\n\n        if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n          return false;\n        }\n\n        if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n          return false;\n        }\n\n        if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n          return undefined;\n        }\n\n        if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n          return undefined;\n        }\n\n        if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n          let inView = false; // Check that swiper should be inside of visible area of window\n\n          if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n            return undefined;\n          }\n\n          const $el = swiper.$el;\n          const swiperWidth = $el[0].clientWidth;\n          const swiperHeight = $el[0].clientHeight;\n          const windowWidth = window.innerWidth;\n          const windowHeight = window.innerHeight;\n          const swiperOffset = swiper.$el.offset();\n          if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n          const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n\n          for (let i = 0; i < swiperCoord.length; i += 1) {\n            const point = swiperCoord[i];\n\n            if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n              if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n              inView = true;\n            }\n          }\n\n          if (!inView) return undefined;\n        }\n\n        if (swiper.isHorizontal()) {\n          if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n            if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n          }\n\n          if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n          if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n        } else {\n          if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n            if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n          }\n\n          if (isPageDown || isArrowDown) swiper.slideNext();\n          if (isPageUp || isArrowUp) swiper.slidePrev();\n        }\n\n        emit('keyPress', kc);\n        return undefined;\n      }\n\n      function enable() {\n        if (swiper.keyboard.enabled) return;\n        $(document).on('keydown', handle);\n        swiper.keyboard.enabled = true;\n      }\n\n      function disable() {\n        if (!swiper.keyboard.enabled) return;\n        $(document).off('keydown', handle);\n        swiper.keyboard.enabled = false;\n      }\n\n      on('init', () => {\n        if (swiper.params.keyboard.enabled) {\n          enable();\n        }\n      });\n      on('destroy', () => {\n        if (swiper.keyboard.enabled) {\n          disable();\n        }\n      });\n      Object.assign(swiper.keyboard, {\n        enable,\n        disable\n      });\n    }\n\n    /* eslint-disable consistent-return */\n    function Mousewheel({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const window = getWindow();\n      extendParams({\n        mousewheel: {\n          enabled: false,\n          releaseOnEdges: false,\n          invert: false,\n          forceToAxis: false,\n          sensitivity: 1,\n          eventsTarget: 'container',\n          thresholdDelta: null,\n          thresholdTime: null\n        }\n      });\n      swiper.mousewheel = {\n        enabled: false\n      };\n      let timeout;\n      let lastScrollTime = now();\n      let lastEventBeforeSnap;\n      const recentWheelEvents = [];\n\n      function normalize(e) {\n        // Reasonable defaults\n        const PIXEL_STEP = 10;\n        const LINE_HEIGHT = 40;\n        const PAGE_HEIGHT = 800;\n        let sX = 0;\n        let sY = 0; // spinX, spinY\n\n        let pX = 0;\n        let pY = 0; // pixelX, pixelY\n        // Legacy\n\n        if ('detail' in e) {\n          sY = e.detail;\n        }\n\n        if ('wheelDelta' in e) {\n          sY = -e.wheelDelta / 120;\n        }\n\n        if ('wheelDeltaY' in e) {\n          sY = -e.wheelDeltaY / 120;\n        }\n\n        if ('wheelDeltaX' in e) {\n          sX = -e.wheelDeltaX / 120;\n        } // side scrolling on FF with DOMMouseScroll\n\n\n        if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n          sX = sY;\n          sY = 0;\n        }\n\n        pX = sX * PIXEL_STEP;\n        pY = sY * PIXEL_STEP;\n\n        if ('deltaY' in e) {\n          pY = e.deltaY;\n        }\n\n        if ('deltaX' in e) {\n          pX = e.deltaX;\n        }\n\n        if (e.shiftKey && !pX) {\n          // if user scrolls with shift he wants horizontal scroll\n          pX = pY;\n          pY = 0;\n        }\n\n        if ((pX || pY) && e.deltaMode) {\n          if (e.deltaMode === 1) {\n            // delta in LINE units\n            pX *= LINE_HEIGHT;\n            pY *= LINE_HEIGHT;\n          } else {\n            // delta in PAGE units\n            pX *= PAGE_HEIGHT;\n            pY *= PAGE_HEIGHT;\n          }\n        } // Fall-back if spin cannot be determined\n\n\n        if (pX && !sX) {\n          sX = pX < 1 ? -1 : 1;\n        }\n\n        if (pY && !sY) {\n          sY = pY < 1 ? -1 : 1;\n        }\n\n        return {\n          spinX: sX,\n          spinY: sY,\n          pixelX: pX,\n          pixelY: pY\n        };\n      }\n\n      function handleMouseEnter() {\n        if (!swiper.enabled) return;\n        swiper.mouseEntered = true;\n      }\n\n      function handleMouseLeave() {\n        if (!swiper.enabled) return;\n        swiper.mouseEntered = false;\n      }\n\n      function animateSlider(newEvent) {\n        if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n          // Prevent if delta of wheel scroll delta is below configured threshold\n          return false;\n        }\n\n        if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n          // Prevent if time between scrolls is below configured threshold\n          return false;\n        } // If the movement is NOT big enough and\n        // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n        //   Don't go any further (avoid insignificant scroll movement).\n\n\n        if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n          // Return false as a default\n          return true;\n        } // If user is scrolling towards the end:\n        //   If the slider hasn't hit the latest slide or\n        //   if the slider is a loop and\n        //   if the slider isn't moving right now:\n        //     Go to next slide and\n        //     emit a scroll event.\n        // Else (the user is scrolling towards the beginning) and\n        // if the slider hasn't hit the first slide or\n        // if the slider is a loop and\n        // if the slider isn't moving right now:\n        //   Go to prev slide and\n        //   emit a scroll event.\n\n\n        if (newEvent.direction < 0) {\n          if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n            swiper.slideNext();\n            emit('scroll', newEvent.raw);\n          }\n        } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n          swiper.slidePrev();\n          emit('scroll', newEvent.raw);\n        } // If you got here is because an animation has been triggered so store the current time\n\n\n        lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n        return false;\n      }\n\n      function releaseScroll(newEvent) {\n        const params = swiper.params.mousewheel;\n\n        if (newEvent.direction < 0) {\n          if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n            // Return true to animate scroll on edges\n            return true;\n          }\n        } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n          // Return true to animate scroll on edges\n          return true;\n        }\n\n        return false;\n      }\n\n      function handle(event) {\n        let e = event;\n        let disableParentSwiper = true;\n        if (!swiper.enabled) return;\n        const params = swiper.params.mousewheel;\n\n        if (swiper.params.cssMode) {\n          e.preventDefault();\n        }\n\n        let target = swiper.$el;\n\n        if (swiper.params.mousewheel.eventsTarget !== 'container') {\n          target = $(swiper.params.mousewheel.eventsTarget);\n        }\n\n        if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n        if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n        let delta = 0;\n        const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n        const data = normalize(e);\n\n        if (params.forceToAxis) {\n          if (swiper.isHorizontal()) {\n            if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n          } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n        } else {\n          delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n        }\n\n        if (delta === 0) return true;\n        if (params.invert) delta = -delta; // Get the scroll positions\n\n        let positions = swiper.getTranslate() + delta * params.sensitivity;\n        if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n        if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true:\n        //     the disableParentSwiper will be true.\n        // When loop is false:\n        //     if the scroll positions is not on edge,\n        //     then the disableParentSwiper will be true.\n        //     if the scroll on edge positions,\n        //     then the disableParentSwiper will be false.\n\n        disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n        if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n        if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n          // Register the new event in a variable which stores the relevant data\n          const newEvent = {\n            time: now(),\n            delta: Math.abs(delta),\n            direction: Math.sign(delta),\n            raw: event\n          }; // Keep the most recent events\n\n          if (recentWheelEvents.length >= 2) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          recentWheelEvents.push(newEvent); // If there is at least one previous recorded event:\n          //   If direction has changed or\n          //   if the scroll is quicker than the previous one:\n          //     Animate the slider.\n          // Else (this is the first time the wheel is moved):\n          //     Animate the slider.\n\n          if (prevEvent) {\n            if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n              animateSlider(newEvent);\n            }\n          } else {\n            animateSlider(newEvent);\n          } // If it's time to release the scroll:\n          //   Return now so you don't hit the preventDefault.\n\n\n          if (releaseScroll(newEvent)) {\n            return true;\n          }\n        } else {\n          // Freemode or scrollContainer:\n          // If we recently snapped after a momentum scroll, then ignore wheel events\n          // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n          // or if it's a new scroll (larger delta or inverse sign as last event before\n          // an end-of-momentum snap).\n          const newEvent = {\n            time: now(),\n            delta: Math.abs(delta),\n            direction: Math.sign(delta)\n          };\n          const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n\n          if (!ignoreWheelEvents) {\n            lastEventBeforeSnap = undefined;\n\n            if (swiper.params.loop) {\n              swiper.loopFix();\n            }\n\n            let position = swiper.getTranslate() + delta * params.sensitivity;\n            const wasBeginning = swiper.isBeginning;\n            const wasEnd = swiper.isEnd;\n            if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n            if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n            swiper.setTransition(0);\n            swiper.setTranslate(position);\n            swiper.updateProgress();\n            swiper.updateActiveIndex();\n            swiper.updateSlidesClasses();\n\n            if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n              swiper.updateSlidesClasses();\n            }\n\n            if (swiper.params.freeMode.sticky) {\n              // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n              // the end of a momentum scroll by storing recent (N=15?) wheel events.\n              // 1. do all N events have decreasing or same (absolute value) delta?\n              // 2. did all N events arrive in the last M (M=500?) msecs?\n              // 3. does the earliest event have an (absolute value) delta that's\n              //    at least P (P=1?) larger than the most recent event's delta?\n              // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n              // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n              // Snap immediately and ignore remaining wheel events in this scroll.\n              // See comment above for \"remaining wheel events in this scroll\" determination.\n              // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n              clearTimeout(timeout);\n              timeout = undefined;\n\n              if (recentWheelEvents.length >= 15) {\n                recentWheelEvents.shift(); // only store the last N events\n              }\n\n              const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n              const firstEvent = recentWheelEvents[0];\n              recentWheelEvents.push(newEvent);\n\n              if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n                // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n                recentWheelEvents.splice(0);\n              } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n                // We're at the end of the deceleration of a momentum scroll, so there's no need\n                // to wait for more events. Snap ASAP on the next tick.\n                // Also, because there's some remaining momentum we'll bias the snap in the\n                // direction of the ongoing scroll because it's better UX for the scroll to snap\n                // in the same direction as the scroll instead of reversing to snap.  Therefore,\n                // if it's already scrolled more than 20% in the current direction, keep going.\n                const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n                lastEventBeforeSnap = newEvent;\n                recentWheelEvents.splice(0);\n                timeout = nextTick(() => {\n                  swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n                }, 0); // no delay; move on next tick\n              }\n\n              if (!timeout) {\n                // if we get here, then we haven't detected the end of a momentum scroll, so\n                // we'll consider a scroll \"complete\" when there haven't been any wheel events\n                // for 500ms.\n                timeout = nextTick(() => {\n                  const snapToThreshold = 0.5;\n                  lastEventBeforeSnap = newEvent;\n                  recentWheelEvents.splice(0);\n                  swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n                }, 500);\n              }\n            } // Emit event\n\n\n            if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n            if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n            if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n          }\n        }\n\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n        return false;\n      }\n\n      function events(method) {\n        let target = swiper.$el;\n\n        if (swiper.params.mousewheel.eventsTarget !== 'container') {\n          target = $(swiper.params.mousewheel.eventsTarget);\n        }\n\n        target[method]('mouseenter', handleMouseEnter);\n        target[method]('mouseleave', handleMouseLeave);\n        target[method]('wheel', handle);\n      }\n\n      function enable() {\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.removeEventListener('wheel', handle);\n          return true;\n        }\n\n        if (swiper.mousewheel.enabled) return false;\n        events('on');\n        swiper.mousewheel.enabled = true;\n        return true;\n      }\n\n      function disable() {\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.addEventListener(event, handle);\n          return true;\n        }\n\n        if (!swiper.mousewheel.enabled) return false;\n        events('off');\n        swiper.mousewheel.enabled = false;\n        return true;\n      }\n\n      on('init', () => {\n        if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n          disable();\n        }\n\n        if (swiper.params.mousewheel.enabled) enable();\n      });\n      on('destroy', () => {\n        if (swiper.params.cssMode) {\n          enable();\n        }\n\n        if (swiper.mousewheel.enabled) disable();\n      });\n      Object.assign(swiper.mousewheel, {\n        enable,\n        disable\n      });\n    }\n\n    function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n      const document = getDocument();\n\n      if (swiper.params.createElements) {\n        Object.keys(checkProps).forEach(key => {\n          if (!params[key] && params.auto === true) {\n            let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n            if (!element) {\n              element = document.createElement('div');\n              element.className = checkProps[key];\n              swiper.$el.append(element);\n            }\n\n            params[key] = element;\n            originalParams[key] = element;\n          }\n        });\n      }\n\n      return params;\n    }\n\n    function Navigation({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      extendParams({\n        navigation: {\n          nextEl: null,\n          prevEl: null,\n          hideOnClick: false,\n          disabledClass: 'swiper-button-disabled',\n          hiddenClass: 'swiper-button-hidden',\n          lockClass: 'swiper-button-lock'\n        }\n      });\n      swiper.navigation = {\n        nextEl: null,\n        $nextEl: null,\n        prevEl: null,\n        $prevEl: null\n      };\n\n      function getEl(el) {\n        let $el;\n\n        if (el) {\n          $el = $(el);\n\n          if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n            $el = swiper.$el.find(el);\n          }\n        }\n\n        return $el;\n      }\n\n      function toggleEl($el, disabled) {\n        const params = swiper.params.navigation;\n\n        if ($el && $el.length > 0) {\n          $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n          if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n          if (swiper.params.watchOverflow && swiper.enabled) {\n            $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n          }\n        }\n      }\n\n      function update() {\n        // Update Navigation Buttons\n        if (swiper.params.loop) return;\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n        toggleEl($prevEl, swiper.isBeginning);\n        toggleEl($nextEl, swiper.isEnd);\n      }\n\n      function onPrevClick(e) {\n        e.preventDefault();\n        if (swiper.isBeginning && !swiper.params.loop) return;\n        swiper.slidePrev();\n      }\n\n      function onNextClick(e) {\n        e.preventDefault();\n        if (swiper.isEnd && !swiper.params.loop) return;\n        swiper.slideNext();\n      }\n\n      function init() {\n        const params = swiper.params.navigation;\n        swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n          nextEl: 'swiper-button-next',\n          prevEl: 'swiper-button-prev'\n        });\n        if (!(params.nextEl || params.prevEl)) return;\n        const $nextEl = getEl(params.nextEl);\n        const $prevEl = getEl(params.prevEl);\n\n        if ($nextEl && $nextEl.length > 0) {\n          $nextEl.on('click', onNextClick);\n        }\n\n        if ($prevEl && $prevEl.length > 0) {\n          $prevEl.on('click', onPrevClick);\n        }\n\n        Object.assign(swiper.navigation, {\n          $nextEl,\n          nextEl: $nextEl && $nextEl[0],\n          $prevEl,\n          prevEl: $prevEl && $prevEl[0]\n        });\n\n        if (!swiper.enabled) {\n          if ($nextEl) $nextEl.addClass(params.lockClass);\n          if ($prevEl) $prevEl.addClass(params.lockClass);\n        }\n      }\n\n      function destroy() {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n\n        if ($nextEl && $nextEl.length) {\n          $nextEl.off('click', onNextClick);\n          $nextEl.removeClass(swiper.params.navigation.disabledClass);\n        }\n\n        if ($prevEl && $prevEl.length) {\n          $prevEl.off('click', onPrevClick);\n          $prevEl.removeClass(swiper.params.navigation.disabledClass);\n        }\n      }\n\n      on('init', () => {\n        init();\n        update();\n      });\n      on('toEdge fromEdge lock unlock', () => {\n        update();\n      });\n      on('destroy', () => {\n        destroy();\n      });\n      on('enable disable', () => {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n\n        if ($nextEl) {\n          $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n        }\n\n        if ($prevEl) {\n          $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n        }\n      });\n      on('click', (_s, e) => {\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n        const targetEl = e.target;\n\n        if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n          if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n          let isHidden;\n\n          if ($nextEl) {\n            isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n          } else if ($prevEl) {\n            isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n          }\n\n          if (isHidden === true) {\n            emit('navigationShow');\n          } else {\n            emit('navigationHide');\n          }\n\n          if ($nextEl) {\n            $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n\n          if ($prevEl) {\n            $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n          }\n        }\n      });\n      Object.assign(swiper.navigation, {\n        update,\n        init,\n        destroy\n      });\n    }\n\n    function classesToSelector(classes = '') {\n      return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n    }\n\n    function Pagination({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const pfx = 'swiper-pagination';\n      extendParams({\n        pagination: {\n          el: null,\n          bulletElement: 'span',\n          clickable: false,\n          hideOnClick: false,\n          renderBullet: null,\n          renderProgressbar: null,\n          renderFraction: null,\n          renderCustom: null,\n          progressbarOpposite: false,\n          type: 'bullets',\n          // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n          dynamicBullets: false,\n          dynamicMainBullets: 1,\n          formatFractionCurrent: number => number,\n          formatFractionTotal: number => number,\n          bulletClass: `${pfx}-bullet`,\n          bulletActiveClass: `${pfx}-bullet-active`,\n          modifierClass: `${pfx}-`,\n          currentClass: `${pfx}-current`,\n          totalClass: `${pfx}-total`,\n          hiddenClass: `${pfx}-hidden`,\n          progressbarFillClass: `${pfx}-progressbar-fill`,\n          progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n          clickableClass: `${pfx}-clickable`,\n          lockClass: `${pfx}-lock`,\n          horizontalClass: `${pfx}-horizontal`,\n          verticalClass: `${pfx}-vertical`\n        }\n      });\n      swiper.pagination = {\n        el: null,\n        $el: null,\n        bullets: []\n      };\n      let bulletSize;\n      let dynamicBulletIndex = 0;\n\n      function isPaginationDisabled() {\n        return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n      }\n\n      function setSideBullets($bulletEl, position) {\n        const {\n          bulletActiveClass\n        } = swiper.params.pagination;\n        $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n      }\n\n      function update() {\n        // Render || Update Pagination bullets/items\n        const rtl = swiper.rtl;\n        const params = swiper.params.pagination;\n        if (isPaginationDisabled()) return;\n        const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n        const $el = swiper.pagination.$el; // Current/Total\n\n        let current;\n        const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n        if (swiper.params.loop) {\n          current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n          if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n            current -= slidesLength - swiper.loopedSlides * 2;\n          }\n\n          if (current > total - 1) current -= total;\n          if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n        } else if (typeof swiper.snapIndex !== 'undefined') {\n          current = swiper.snapIndex;\n        } else {\n          current = swiper.activeIndex || 0;\n        } // Types\n\n\n        if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n          const bullets = swiper.pagination.bullets;\n          let firstIndex;\n          let lastIndex;\n          let midIndex;\n\n          if (params.dynamicBullets) {\n            bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n            $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n            if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n              dynamicBulletIndex += current - swiper.previousIndex;\n\n              if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n                dynamicBulletIndex = params.dynamicMainBullets - 1;\n              } else if (dynamicBulletIndex < 0) {\n                dynamicBulletIndex = 0;\n              }\n            }\n\n            firstIndex = current - dynamicBulletIndex;\n            lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n            midIndex = (lastIndex + firstIndex) / 2;\n          }\n\n          bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n          if ($el.length > 1) {\n            bullets.each(bullet => {\n              const $bullet = $(bullet);\n              const bulletIndex = $bullet.index();\n\n              if (bulletIndex === current) {\n                $bullet.addClass(params.bulletActiveClass);\n              }\n\n              if (params.dynamicBullets) {\n                if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n                  $bullet.addClass(`${params.bulletActiveClass}-main`);\n                }\n\n                if (bulletIndex === firstIndex) {\n                  setSideBullets($bullet, 'prev');\n                }\n\n                if (bulletIndex === lastIndex) {\n                  setSideBullets($bullet, 'next');\n                }\n              }\n            });\n          } else {\n            const $bullet = bullets.eq(current);\n            const bulletIndex = $bullet.index();\n            $bullet.addClass(params.bulletActiveClass);\n\n            if (params.dynamicBullets) {\n              const $firstDisplayedBullet = bullets.eq(firstIndex);\n              const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n              for (let i = firstIndex; i <= lastIndex; i += 1) {\n                bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n              }\n\n              if (swiper.params.loop) {\n                if (bulletIndex >= bullets.length - params.dynamicMainBullets) {\n                  for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n                    bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n                  }\n\n                  bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n                } else {\n                  setSideBullets($firstDisplayedBullet, 'prev');\n                  setSideBullets($lastDisplayedBullet, 'next');\n                }\n              } else {\n                setSideBullets($firstDisplayedBullet, 'prev');\n                setSideBullets($lastDisplayedBullet, 'next');\n              }\n            }\n          }\n\n          if (params.dynamicBullets) {\n            const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n            const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n            const offsetProp = rtl ? 'right' : 'left';\n            bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n          }\n        }\n\n        if (params.type === 'fraction') {\n          $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n          $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n        }\n\n        if (params.type === 'progressbar') {\n          let progressbarDirection;\n\n          if (params.progressbarOpposite) {\n            progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n          } else {\n            progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n          }\n\n          const scale = (current + 1) / total;\n          let scaleX = 1;\n          let scaleY = 1;\n\n          if (progressbarDirection === 'horizontal') {\n            scaleX = scale;\n          } else {\n            scaleY = scale;\n          }\n\n          $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n        }\n\n        if (params.type === 'custom' && params.renderCustom) {\n          $el.html(params.renderCustom(swiper, current + 1, total));\n          emit('paginationRender', $el[0]);\n        } else {\n          emit('paginationUpdate', $el[0]);\n        }\n\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n        }\n      }\n\n      function render() {\n        // Render Container\n        const params = swiper.params.pagination;\n        if (isPaginationDisabled()) return;\n        const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n        const $el = swiper.pagination.$el;\n        let paginationHTML = '';\n\n        if (params.type === 'bullets') {\n          let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n          if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n            numberOfBullets = slidesLength;\n          }\n\n          for (let i = 0; i < numberOfBullets; i += 1) {\n            if (params.renderBullet) {\n              paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n            } else {\n              paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n            }\n          }\n\n          $el.html(paginationHTML);\n          swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n        }\n\n        if (params.type === 'fraction') {\n          if (params.renderFraction) {\n            paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n          } else {\n            paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n          }\n\n          $el.html(paginationHTML);\n        }\n\n        if (params.type === 'progressbar') {\n          if (params.renderProgressbar) {\n            paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n          } else {\n            paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n          }\n\n          $el.html(paginationHTML);\n        }\n\n        if (params.type !== 'custom') {\n          emit('paginationRender', swiper.pagination.$el[0]);\n        }\n      }\n\n      function init() {\n        swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n          el: 'swiper-pagination'\n        });\n        const params = swiper.params.pagination;\n        if (!params.el) return;\n        let $el = $(params.el);\n        if ($el.length === 0) return;\n\n        if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n          $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n          if ($el.length > 1) {\n            $el = $el.filter(el => {\n              if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n              return true;\n            });\n          }\n        }\n\n        if (params.type === 'bullets' && params.clickable) {\n          $el.addClass(params.clickableClass);\n        }\n\n        $el.addClass(params.modifierClass + params.type);\n        $el.addClass(params.modifierClass + swiper.params.direction);\n\n        if (params.type === 'bullets' && params.dynamicBullets) {\n          $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n          dynamicBulletIndex = 0;\n\n          if (params.dynamicMainBullets < 1) {\n            params.dynamicMainBullets = 1;\n          }\n        }\n\n        if (params.type === 'progressbar' && params.progressbarOpposite) {\n          $el.addClass(params.progressbarOppositeClass);\n        }\n\n        if (params.clickable) {\n          $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n            e.preventDefault();\n            let index = $(this).index() * swiper.params.slidesPerGroup;\n            if (swiper.params.loop) index += swiper.loopedSlides;\n            swiper.slideTo(index);\n          });\n        }\n\n        Object.assign(swiper.pagination, {\n          $el,\n          el: $el[0]\n        });\n\n        if (!swiper.enabled) {\n          $el.addClass(params.lockClass);\n        }\n      }\n\n      function destroy() {\n        const params = swiper.params.pagination;\n        if (isPaginationDisabled()) return;\n        const $el = swiper.pagination.$el;\n        $el.removeClass(params.hiddenClass);\n        $el.removeClass(params.modifierClass + params.type);\n        $el.removeClass(params.modifierClass + swiper.params.direction);\n        if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n        if (params.clickable) {\n          $el.off('click', classesToSelector(params.bulletClass));\n        }\n      }\n\n      on('init', () => {\n        init();\n        render();\n        update();\n      });\n      on('activeIndexChange', () => {\n        if (swiper.params.loop) {\n          update();\n        } else if (typeof swiper.snapIndex === 'undefined') {\n          update();\n        }\n      });\n      on('snapIndexChange', () => {\n        if (!swiper.params.loop) {\n          update();\n        }\n      });\n      on('slidesLengthChange', () => {\n        if (swiper.params.loop) {\n          render();\n          update();\n        }\n      });\n      on('snapGridLengthChange', () => {\n        if (!swiper.params.loop) {\n          render();\n          update();\n        }\n      });\n      on('destroy', () => {\n        destroy();\n      });\n      on('enable disable', () => {\n        const {\n          $el\n        } = swiper.pagination;\n\n        if ($el) {\n          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n        }\n      });\n      on('lock unlock', () => {\n        update();\n      });\n      on('click', (_s, e) => {\n        const targetEl = e.target;\n        const {\n          $el\n        } = swiper.pagination;\n\n        if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n          if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n          const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n          if (isHidden === true) {\n            emit('paginationShow');\n          } else {\n            emit('paginationHide');\n          }\n\n          $el.toggleClass(swiper.params.pagination.hiddenClass);\n        }\n      });\n      Object.assign(swiper.pagination, {\n        render,\n        update,\n        init,\n        destroy\n      });\n    }\n\n    function Scrollbar({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const document = getDocument();\n      let isTouched = false;\n      let timeout = null;\n      let dragTimeout = null;\n      let dragStartPos;\n      let dragSize;\n      let trackSize;\n      let divider;\n      extendParams({\n        scrollbar: {\n          el: null,\n          dragSize: 'auto',\n          hide: false,\n          draggable: false,\n          snapOnRelease: true,\n          lockClass: 'swiper-scrollbar-lock',\n          dragClass: 'swiper-scrollbar-drag'\n        }\n      });\n      swiper.scrollbar = {\n        el: null,\n        dragEl: null,\n        $el: null,\n        $dragEl: null\n      };\n\n      function setTranslate() {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        const {\n          scrollbar,\n          rtlTranslate: rtl,\n          progress\n        } = swiper;\n        const {\n          $dragEl,\n          $el\n        } = scrollbar;\n        const params = swiper.params.scrollbar;\n        let newSize = dragSize;\n        let newPos = (trackSize - dragSize) * progress;\n\n        if (rtl) {\n          newPos = -newPos;\n\n          if (newPos > 0) {\n            newSize = dragSize - newPos;\n            newPos = 0;\n          } else if (-newPos + dragSize > trackSize) {\n            newSize = trackSize + newPos;\n          }\n        } else if (newPos < 0) {\n          newSize = dragSize + newPos;\n          newPos = 0;\n        } else if (newPos + dragSize > trackSize) {\n          newSize = trackSize - newPos;\n        }\n\n        if (swiper.isHorizontal()) {\n          $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n          $dragEl[0].style.width = `${newSize}px`;\n        } else {\n          $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n          $dragEl[0].style.height = `${newSize}px`;\n        }\n\n        if (params.hide) {\n          clearTimeout(timeout);\n          $el[0].style.opacity = 1;\n          timeout = setTimeout(() => {\n            $el[0].style.opacity = 0;\n            $el.transition(400);\n          }, 1000);\n        }\n      }\n\n      function setTransition(duration) {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        swiper.scrollbar.$dragEl.transition(duration);\n      }\n\n      function updateSize() {\n        if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n        const {\n          scrollbar\n        } = swiper;\n        const {\n          $dragEl,\n          $el\n        } = scrollbar;\n        $dragEl[0].style.width = '';\n        $dragEl[0].style.height = '';\n        trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n        divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n        if (swiper.params.scrollbar.dragSize === 'auto') {\n          dragSize = trackSize * divider;\n        } else {\n          dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n        }\n\n        if (swiper.isHorizontal()) {\n          $dragEl[0].style.width = `${dragSize}px`;\n        } else {\n          $dragEl[0].style.height = `${dragSize}px`;\n        }\n\n        if (divider >= 1) {\n          $el[0].style.display = 'none';\n        } else {\n          $el[0].style.display = '';\n        }\n\n        if (swiper.params.scrollbar.hide) {\n          $el[0].style.opacity = 0;\n        }\n\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n        }\n      }\n\n      function getPointerPosition(e) {\n        if (swiper.isHorizontal()) {\n          return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n        }\n\n        return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n      }\n\n      function setDragPosition(e) {\n        const {\n          scrollbar,\n          rtlTranslate: rtl\n        } = swiper;\n        const {\n          $el\n        } = scrollbar;\n        let positionRatio;\n        positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n        positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n        if (rtl) {\n          positionRatio = 1 - positionRatio;\n        }\n\n        const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n        swiper.updateProgress(position);\n        swiper.setTranslate(position);\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n      }\n\n      function onDragStart(e) {\n        const params = swiper.params.scrollbar;\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el,\n          $dragEl\n        } = scrollbar;\n        isTouched = true;\n        dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n        e.preventDefault();\n        e.stopPropagation();\n        $wrapperEl.transition(100);\n        $dragEl.transition(100);\n        setDragPosition(e);\n        clearTimeout(dragTimeout);\n        $el.transition(0);\n\n        if (params.hide) {\n          $el.css('opacity', 1);\n        }\n\n        if (swiper.params.cssMode) {\n          swiper.$wrapperEl.css('scroll-snap-type', 'none');\n        }\n\n        emit('scrollbarDragStart', e);\n      }\n\n      function onDragMove(e) {\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el,\n          $dragEl\n        } = scrollbar;\n        if (!isTouched) return;\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n        setDragPosition(e);\n        $wrapperEl.transition(0);\n        $el.transition(0);\n        $dragEl.transition(0);\n        emit('scrollbarDragMove', e);\n      }\n\n      function onDragEnd(e) {\n        const params = swiper.params.scrollbar;\n        const {\n          scrollbar,\n          $wrapperEl\n        } = swiper;\n        const {\n          $el\n        } = scrollbar;\n        if (!isTouched) return;\n        isTouched = false;\n\n        if (swiper.params.cssMode) {\n          swiper.$wrapperEl.css('scroll-snap-type', '');\n          $wrapperEl.transition('');\n        }\n\n        if (params.hide) {\n          clearTimeout(dragTimeout);\n          dragTimeout = nextTick(() => {\n            $el.css('opacity', 0);\n            $el.transition(400);\n          }, 1000);\n        }\n\n        emit('scrollbarDragEnd', e);\n\n        if (params.snapOnRelease) {\n          swiper.slideToClosest();\n        }\n      }\n\n      function events(method) {\n        const {\n          scrollbar,\n          touchEventsTouch,\n          touchEventsDesktop,\n          params,\n          support\n        } = swiper;\n        const $el = scrollbar.$el;\n        const target = $el[0];\n        const activeListener = support.passiveListener && params.passiveListeners ? {\n          passive: false,\n          capture: false\n        } : false;\n        const passiveListener = support.passiveListener && params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        if (!target) return;\n        const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n        if (!support.touch) {\n          target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n          document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n          document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n        } else {\n          target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n          target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n          target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n        }\n      }\n\n      function enableDraggable() {\n        if (!swiper.params.scrollbar.el) return;\n        events('on');\n      }\n\n      function disableDraggable() {\n        if (!swiper.params.scrollbar.el) return;\n        events('off');\n      }\n\n      function init() {\n        const {\n          scrollbar,\n          $el: $swiperEl\n        } = swiper;\n        swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n          el: 'swiper-scrollbar'\n        });\n        const params = swiper.params.scrollbar;\n        if (!params.el) return;\n        let $el = $(params.el);\n\n        if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n          $el = $swiperEl.find(params.el);\n        }\n\n        let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n        if ($dragEl.length === 0) {\n          $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n          $el.append($dragEl);\n        }\n\n        Object.assign(scrollbar, {\n          $el,\n          el: $el[0],\n          $dragEl,\n          dragEl: $dragEl[0]\n        });\n\n        if (params.draggable) {\n          enableDraggable();\n        }\n\n        if ($el) {\n          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n        }\n      }\n\n      function destroy() {\n        disableDraggable();\n      }\n\n      on('init', () => {\n        init();\n        updateSize();\n        setTranslate();\n      });\n      on('update resize observerUpdate lock unlock', () => {\n        updateSize();\n      });\n      on('setTranslate', () => {\n        setTranslate();\n      });\n      on('setTransition', (_s, duration) => {\n        setTransition(duration);\n      });\n      on('enable disable', () => {\n        const {\n          $el\n        } = swiper.scrollbar;\n\n        if ($el) {\n          $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n        }\n      });\n      on('destroy', () => {\n        destroy();\n      });\n      Object.assign(swiper.scrollbar, {\n        updateSize,\n        setTranslate,\n        init,\n        destroy\n      });\n    }\n\n    function Parallax({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        parallax: {\n          enabled: false\n        }\n      });\n\n      const setTransform = (el, progress) => {\n        const {\n          rtl\n        } = swiper;\n        const $el = $(el);\n        const rtlFactor = rtl ? -1 : 1;\n        const p = $el.attr('data-swiper-parallax') || '0';\n        let x = $el.attr('data-swiper-parallax-x');\n        let y = $el.attr('data-swiper-parallax-y');\n        const scale = $el.attr('data-swiper-parallax-scale');\n        const opacity = $el.attr('data-swiper-parallax-opacity');\n\n        if (x || y) {\n          x = x || '0';\n          y = y || '0';\n        } else if (swiper.isHorizontal()) {\n          x = p;\n          y = '0';\n        } else {\n          y = p;\n          x = '0';\n        }\n\n        if (x.indexOf('%') >= 0) {\n          x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n        } else {\n          x = `${x * progress * rtlFactor}px`;\n        }\n\n        if (y.indexOf('%') >= 0) {\n          y = `${parseInt(y, 10) * progress}%`;\n        } else {\n          y = `${y * progress}px`;\n        }\n\n        if (typeof opacity !== 'undefined' && opacity !== null) {\n          const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n          $el[0].style.opacity = currentOpacity;\n        }\n\n        if (typeof scale === 'undefined' || scale === null) {\n          $el.transform(`translate3d(${x}, ${y}, 0px)`);\n        } else {\n          const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n          $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n        }\n      };\n\n      const setTranslate = () => {\n        const {\n          $el,\n          slides,\n          progress,\n          snapGrid\n        } = swiper;\n        $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n          setTransform(el, progress);\n        });\n        slides.each((slideEl, slideIndex) => {\n          let slideProgress = slideEl.progress;\n\n          if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n            slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n          }\n\n          slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n          $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n            setTransform(el, slideProgress);\n          });\n        });\n      };\n\n      const setTransition = (duration = swiper.params.speed) => {\n        const {\n          $el\n        } = swiper;\n        $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n          const $parallaxEl = $(parallaxEl);\n          let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n          if (duration === 0) parallaxDuration = 0;\n          $parallaxEl.transition(parallaxDuration);\n        });\n      };\n\n      on('beforeInit', () => {\n        if (!swiper.params.parallax.enabled) return;\n        swiper.params.watchSlidesProgress = true;\n        swiper.originalParams.watchSlidesProgress = true;\n      });\n      on('init', () => {\n        if (!swiper.params.parallax.enabled) return;\n        setTranslate();\n      });\n      on('setTranslate', () => {\n        if (!swiper.params.parallax.enabled) return;\n        setTranslate();\n      });\n      on('setTransition', (_swiper, duration) => {\n        if (!swiper.params.parallax.enabled) return;\n        setTransition(duration);\n      });\n    }\n\n    function Zoom({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      const window = getWindow();\n      extendParams({\n        zoom: {\n          enabled: false,\n          maxRatio: 3,\n          minRatio: 1,\n          toggle: true,\n          containerClass: 'swiper-zoom-container',\n          zoomedSlideClass: 'swiper-slide-zoomed'\n        }\n      });\n      swiper.zoom = {\n        enabled: false\n      };\n      let currentScale = 1;\n      let isScaling = false;\n      let gesturesEnabled;\n      let fakeGestureTouched;\n      let fakeGestureMoved;\n      const gesture = {\n        $slideEl: undefined,\n        slideWidth: undefined,\n        slideHeight: undefined,\n        $imageEl: undefined,\n        $imageWrapEl: undefined,\n        maxRatio: 3\n      };\n      const image = {\n        isTouched: undefined,\n        isMoved: undefined,\n        currentX: undefined,\n        currentY: undefined,\n        minX: undefined,\n        minY: undefined,\n        maxX: undefined,\n        maxY: undefined,\n        width: undefined,\n        height: undefined,\n        startX: undefined,\n        startY: undefined,\n        touchesStart: {},\n        touchesCurrent: {}\n      };\n      const velocity = {\n        x: undefined,\n        y: undefined,\n        prevPositionX: undefined,\n        prevPositionY: undefined,\n        prevTime: undefined\n      };\n      let scale = 1;\n      Object.defineProperty(swiper.zoom, 'scale', {\n        get() {\n          return scale;\n        },\n\n        set(value) {\n          if (scale !== value) {\n            const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n            const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n            emit('zoomChange', value, imageEl, slideEl);\n          }\n\n          scale = value;\n        }\n\n      });\n\n      function getDistanceBetweenTouches(e) {\n        if (e.targetTouches.length < 2) return 1;\n        const x1 = e.targetTouches[0].pageX;\n        const y1 = e.targetTouches[0].pageY;\n        const x2 = e.targetTouches[1].pageX;\n        const y2 = e.targetTouches[1].pageY;\n        const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n        return distance;\n      } // Events\n\n\n      function onGestureStart(e) {\n        const support = swiper.support;\n        const params = swiper.params.zoom;\n        fakeGestureTouched = false;\n        fakeGestureMoved = false;\n\n        if (!support.gestures) {\n          if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n            return;\n          }\n\n          fakeGestureTouched = true;\n          gesture.scaleStart = getDistanceBetweenTouches(e);\n        }\n\n        if (!gesture.$slideEl || !gesture.$slideEl.length) {\n          gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n          if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n          gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n          gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n          if (gesture.$imageWrapEl.length === 0) {\n            gesture.$imageEl = undefined;\n            return;\n          }\n        }\n\n        if (gesture.$imageEl) {\n          gesture.$imageEl.transition(0);\n        }\n\n        isScaling = true;\n      }\n\n      function onGestureChange(e) {\n        const support = swiper.support;\n        const params = swiper.params.zoom;\n        const zoom = swiper.zoom;\n\n        if (!support.gestures) {\n          if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n            return;\n          }\n\n          fakeGestureMoved = true;\n          gesture.scaleMove = getDistanceBetweenTouches(e);\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n          if (e.type === 'gesturechange') onGestureStart(e);\n          return;\n        }\n\n        if (support.gestures) {\n          zoom.scale = e.scale * currentScale;\n        } else {\n          zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n        }\n\n        if (zoom.scale > gesture.maxRatio) {\n          zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n        }\n\n        if (zoom.scale < params.minRatio) {\n          zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n        }\n\n        gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n      }\n\n      function onGestureEnd(e) {\n        const device = swiper.device;\n        const support = swiper.support;\n        const params = swiper.params.zoom;\n        const zoom = swiper.zoom;\n\n        if (!support.gestures) {\n          if (!fakeGestureTouched || !fakeGestureMoved) {\n            return;\n          }\n\n          if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n            return;\n          }\n\n          fakeGestureTouched = false;\n          fakeGestureMoved = false;\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n        zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n        gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n        currentScale = zoom.scale;\n        isScaling = false;\n        if (zoom.scale === 1) gesture.$slideEl = undefined;\n      }\n\n      function onTouchStart(e) {\n        const device = swiper.device;\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n        if (image.isTouched) return;\n        if (device.android && e.cancelable) e.preventDefault();\n        image.isTouched = true;\n        image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n        image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n      }\n\n      function onTouchMove(e) {\n        const zoom = swiper.zoom;\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n        swiper.allowClick = false;\n        if (!image.isTouched || !gesture.$slideEl) return;\n\n        if (!image.isMoved) {\n          image.width = gesture.$imageEl[0].offsetWidth;\n          image.height = gesture.$imageEl[0].offsetHeight;\n          image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n          image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n          gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n          gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n          gesture.$imageWrapEl.transition(0);\n        } // Define if we need image drag\n\n\n        const scaledWidth = image.width * zoom.scale;\n        const scaledHeight = image.height * zoom.scale;\n        if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n        image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n        image.maxX = -image.minX;\n        image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n        image.maxY = -image.minY;\n        image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n        image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n        if (!image.isMoved && !isScaling) {\n          if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n            image.isTouched = false;\n            return;\n          }\n\n          if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n            image.isTouched = false;\n            return;\n          }\n        }\n\n        if (e.cancelable) {\n          e.preventDefault();\n        }\n\n        e.stopPropagation();\n        image.isMoved = true;\n        image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n        image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n        if (image.currentX < image.minX) {\n          image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n        }\n\n        if (image.currentX > image.maxX) {\n          image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n        }\n\n        if (image.currentY < image.minY) {\n          image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n        }\n\n        if (image.currentY > image.maxY) {\n          image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n        } // Velocity\n\n\n        if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n        if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n        if (!velocity.prevTime) velocity.prevTime = Date.now();\n        velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n        velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n        if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n        if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n        velocity.prevPositionX = image.touchesCurrent.x;\n        velocity.prevPositionY = image.touchesCurrent.y;\n        velocity.prevTime = Date.now();\n        gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n      }\n\n      function onTouchEnd() {\n        const zoom = swiper.zoom;\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n        if (!image.isTouched || !image.isMoved) {\n          image.isTouched = false;\n          image.isMoved = false;\n          return;\n        }\n\n        image.isTouched = false;\n        image.isMoved = false;\n        let momentumDurationX = 300;\n        let momentumDurationY = 300;\n        const momentumDistanceX = velocity.x * momentumDurationX;\n        const newPositionX = image.currentX + momentumDistanceX;\n        const momentumDistanceY = velocity.y * momentumDurationY;\n        const newPositionY = image.currentY + momentumDistanceY; // Fix duration\n\n        if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n        if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n        const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n        image.currentX = newPositionX;\n        image.currentY = newPositionY; // Define if we need image drag\n\n        const scaledWidth = image.width * zoom.scale;\n        const scaledHeight = image.height * zoom.scale;\n        image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n        image.maxX = -image.minX;\n        image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n        image.maxY = -image.minY;\n        image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n        image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n        gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n      }\n\n      function onTransitionEnd() {\n        const zoom = swiper.zoom;\n\n        if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n          if (gesture.$imageEl) {\n            gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n          }\n\n          if (gesture.$imageWrapEl) {\n            gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n          }\n\n          zoom.scale = 1;\n          currentScale = 1;\n          gesture.$slideEl = undefined;\n          gesture.$imageEl = undefined;\n          gesture.$imageWrapEl = undefined;\n        }\n      }\n\n      function zoomIn(e) {\n        const zoom = swiper.zoom;\n        const params = swiper.params.zoom;\n\n        if (!gesture.$slideEl) {\n          if (e && e.target) {\n            gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n          }\n\n          if (!gesture.$slideEl) {\n            if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n              gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n            } else {\n              gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n            }\n          }\n\n          gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.style.overflow = 'hidden';\n          swiper.wrapperEl.style.touchAction = 'none';\n        }\n\n        gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n        let touchX;\n        let touchY;\n        let offsetX;\n        let offsetY;\n        let diffX;\n        let diffY;\n        let translateX;\n        let translateY;\n        let imageWidth;\n        let imageHeight;\n        let scaledWidth;\n        let scaledHeight;\n        let translateMinX;\n        let translateMinY;\n        let translateMaxX;\n        let translateMaxY;\n        let slideWidth;\n        let slideHeight;\n\n        if (typeof image.touchesStart.x === 'undefined' && e) {\n          touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n          touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n        } else {\n          touchX = image.touchesStart.x;\n          touchY = image.touchesStart.y;\n        }\n\n        zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n        currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n        if (e) {\n          slideWidth = gesture.$slideEl[0].offsetWidth;\n          slideHeight = gesture.$slideEl[0].offsetHeight;\n          offsetX = gesture.$slideEl.offset().left + window.scrollX;\n          offsetY = gesture.$slideEl.offset().top + window.scrollY;\n          diffX = offsetX + slideWidth / 2 - touchX;\n          diffY = offsetY + slideHeight / 2 - touchY;\n          imageWidth = gesture.$imageEl[0].offsetWidth;\n          imageHeight = gesture.$imageEl[0].offsetHeight;\n          scaledWidth = imageWidth * zoom.scale;\n          scaledHeight = imageHeight * zoom.scale;\n          translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n          translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n          translateMaxX = -translateMinX;\n          translateMaxY = -translateMinY;\n          translateX = diffX * zoom.scale;\n          translateY = diffY * zoom.scale;\n\n          if (translateX < translateMinX) {\n            translateX = translateMinX;\n          }\n\n          if (translateX > translateMaxX) {\n            translateX = translateMaxX;\n          }\n\n          if (translateY < translateMinY) {\n            translateY = translateMinY;\n          }\n\n          if (translateY > translateMaxY) {\n            translateY = translateMaxY;\n          }\n        } else {\n          translateX = 0;\n          translateY = 0;\n        }\n\n        gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n        gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n      }\n\n      function zoomOut() {\n        const zoom = swiper.zoom;\n        const params = swiper.params.zoom;\n\n        if (!gesture.$slideEl) {\n          if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n            gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n          } else {\n            gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n          }\n\n          gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('img, svg, canvas, picture, .swiper-zoom-target');\n          gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n        }\n\n        if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n        if (swiper.params.cssMode) {\n          swiper.wrapperEl.style.overflow = '';\n          swiper.wrapperEl.style.touchAction = '';\n        }\n\n        zoom.scale = 1;\n        currentScale = 1;\n        gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n        gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n        gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n        gesture.$slideEl = undefined;\n      } // Toggle Zoom\n\n\n      function zoomToggle(e) {\n        const zoom = swiper.zoom;\n\n        if (zoom.scale && zoom.scale !== 1) {\n          // Zoom Out\n          zoomOut();\n        } else {\n          // Zoom In\n          zoomIn(e);\n        }\n      }\n\n      function getListeners() {\n        const support = swiper.support;\n        const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n        const activeListenerWithCapture = support.passiveListener ? {\n          passive: false,\n          capture: true\n        } : true;\n        return {\n          passiveListener,\n          activeListenerWithCapture\n        };\n      }\n\n      function getSlideSelector() {\n        return `.${swiper.params.slideClass}`;\n      }\n\n      function toggleGestures(method) {\n        const {\n          passiveListener\n        } = getListeners();\n        const slideSelector = getSlideSelector();\n        swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n        swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n        swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n      }\n\n      function enableGestures() {\n        if (gesturesEnabled) return;\n        gesturesEnabled = true;\n        toggleGestures('on');\n      }\n\n      function disableGestures() {\n        if (!gesturesEnabled) return;\n        gesturesEnabled = false;\n        toggleGestures('off');\n      } // Attach/Detach Events\n\n\n      function enable() {\n        const zoom = swiper.zoom;\n        if (zoom.enabled) return;\n        zoom.enabled = true;\n        const support = swiper.support;\n        const {\n          passiveListener,\n          activeListenerWithCapture\n        } = getListeners();\n        const slideSelector = getSlideSelector(); // Scale image\n\n        if (support.gestures) {\n          swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n          swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n        } else if (swiper.touchEvents.start === 'touchstart') {\n          swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n          swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n          swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n          if (swiper.touchEvents.cancel) {\n            swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n          }\n        } // Move image\n\n\n        swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n      }\n\n      function disable() {\n        const zoom = swiper.zoom;\n        if (!zoom.enabled) return;\n        const support = swiper.support;\n        zoom.enabled = false;\n        const {\n          passiveListener,\n          activeListenerWithCapture\n        } = getListeners();\n        const slideSelector = getSlideSelector(); // Scale image\n\n        if (support.gestures) {\n          swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n          swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n        } else if (swiper.touchEvents.start === 'touchstart') {\n          swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n          swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n          swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n          if (swiper.touchEvents.cancel) {\n            swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n          }\n        } // Move image\n\n\n        swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n      }\n\n      on('init', () => {\n        if (swiper.params.zoom.enabled) {\n          enable();\n        }\n      });\n      on('destroy', () => {\n        disable();\n      });\n      on('touchStart', (_s, e) => {\n        if (!swiper.zoom.enabled) return;\n        onTouchStart(e);\n      });\n      on('touchEnd', (_s, e) => {\n        if (!swiper.zoom.enabled) return;\n        onTouchEnd();\n      });\n      on('doubleTap', (_s, e) => {\n        if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n          zoomToggle(e);\n        }\n      });\n      on('transitionEnd', () => {\n        if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n          onTransitionEnd();\n        }\n      });\n      on('slideChange', () => {\n        if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n          onTransitionEnd();\n        }\n      });\n      Object.assign(swiper.zoom, {\n        enable,\n        disable,\n        in: zoomIn,\n        out: zoomOut,\n        toggle: zoomToggle\n      });\n    }\n\n    function Lazy({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      extendParams({\n        lazy: {\n          checkInView: false,\n          enabled: false,\n          loadPrevNext: false,\n          loadPrevNextAmount: 1,\n          loadOnTransitionStart: false,\n          scrollingElement: '',\n          elementClass: 'swiper-lazy',\n          loadingClass: 'swiper-lazy-loading',\n          loadedClass: 'swiper-lazy-loaded',\n          preloaderClass: 'swiper-lazy-preloader'\n        }\n      });\n      swiper.lazy = {};\n      let scrollHandlerAttached = false;\n      let initialImageLoaded = false;\n\n      function loadInSlide(index, loadInDuplicate = true) {\n        const params = swiper.params.lazy;\n        if (typeof index === 'undefined') return;\n        if (swiper.slides.length === 0) return;\n        const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n        const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n        const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n        if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n          $images.push($slideEl[0]);\n        }\n\n        if ($images.length === 0) return;\n        $images.each(imageEl => {\n          const $imageEl = $(imageEl);\n          $imageEl.addClass(params.loadingClass);\n          const background = $imageEl.attr('data-background');\n          const src = $imageEl.attr('data-src');\n          const srcset = $imageEl.attr('data-srcset');\n          const sizes = $imageEl.attr('data-sizes');\n          const $pictureEl = $imageEl.parent('picture');\n          swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n            if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n            if (background) {\n              $imageEl.css('background-image', `url(\"${background}\")`);\n              $imageEl.removeAttr('data-background');\n            } else {\n              if (srcset) {\n                $imageEl.attr('srcset', srcset);\n                $imageEl.removeAttr('data-srcset');\n              }\n\n              if (sizes) {\n                $imageEl.attr('sizes', sizes);\n                $imageEl.removeAttr('data-sizes');\n              }\n\n              if ($pictureEl.length) {\n                $pictureEl.children('source').each(sourceEl => {\n                  const $source = $(sourceEl);\n\n                  if ($source.attr('data-srcset')) {\n                    $source.attr('srcset', $source.attr('data-srcset'));\n                    $source.removeAttr('data-srcset');\n                  }\n                });\n              }\n\n              if (src) {\n                $imageEl.attr('src', src);\n                $imageEl.removeAttr('data-src');\n              }\n            }\n\n            $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n            $slideEl.find(`.${params.preloaderClass}`).remove();\n\n            if (swiper.params.loop && loadInDuplicate) {\n              const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n              if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n                const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n                loadInSlide(originalSlide.index(), false);\n              } else {\n                const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n                loadInSlide(duplicatedSlide.index(), false);\n              }\n            }\n\n            emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n            if (swiper.params.autoHeight) {\n              swiper.updateAutoHeight();\n            }\n          });\n          emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n        });\n      }\n\n      function load() {\n        const {\n          $wrapperEl,\n          params: swiperParams,\n          slides,\n          activeIndex\n        } = swiper;\n        const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n        const params = swiperParams.lazy;\n        let slidesPerView = swiperParams.slidesPerView;\n\n        if (slidesPerView === 'auto') {\n          slidesPerView = 0;\n        }\n\n        function slideExist(index) {\n          if (isVirtual) {\n            if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n              return true;\n            }\n          } else if (slides[index]) return true;\n\n          return false;\n        }\n\n        function slideIndex(slideEl) {\n          if (isVirtual) {\n            return $(slideEl).attr('data-swiper-slide-index');\n          }\n\n          return $(slideEl).index();\n        }\n\n        if (!initialImageLoaded) initialImageLoaded = true;\n\n        if (swiper.params.watchSlidesProgress) {\n          $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n            const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n            loadInSlide(index);\n          });\n        } else if (slidesPerView > 1) {\n          for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n            if (slideExist(i)) loadInSlide(i);\n          }\n        } else {\n          loadInSlide(activeIndex);\n        }\n\n        if (params.loadPrevNext) {\n          if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n            const amount = params.loadPrevNextAmount;\n            const spv = slidesPerView;\n            const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n            const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n            for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) {\n              if (slideExist(i)) loadInSlide(i);\n            } // Prev Slides\n\n\n            for (let i = minIndex; i < activeIndex; i += 1) {\n              if (slideExist(i)) loadInSlide(i);\n            }\n          } else {\n            const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n            if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n            const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n            if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n          }\n        }\n      }\n\n      function checkInViewOnLoad() {\n        const window = getWindow();\n        if (!swiper || swiper.destroyed) return;\n        const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n        const isWindow = $scrollElement[0] === window;\n        const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n        const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n        const swiperOffset = swiper.$el.offset();\n        const {\n          rtlTranslate: rtl\n        } = swiper;\n        let inView = false;\n        if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n        const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n        for (let i = 0; i < swiperCoord.length; i += 1) {\n          const point = swiperCoord[i];\n\n          if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n            if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n            inView = true;\n          }\n        }\n\n        const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n          passive: true,\n          capture: false\n        } : false;\n\n        if (inView) {\n          load();\n          $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n        } else if (!scrollHandlerAttached) {\n          scrollHandlerAttached = true;\n          $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n        }\n      }\n\n      on('beforeInit', () => {\n        if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n          swiper.params.preloadImages = false;\n        }\n      });\n      on('init', () => {\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.checkInView) {\n            checkInViewOnLoad();\n          } else {\n            load();\n          }\n        }\n      });\n      on('scroll', () => {\n        if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n          load();\n        }\n      });\n      on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.checkInView) {\n            checkInViewOnLoad();\n          } else {\n            load();\n          }\n        }\n      });\n      on('transitionStart', () => {\n        if (swiper.params.lazy.enabled) {\n          if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n            if (swiper.params.lazy.checkInView) {\n              checkInViewOnLoad();\n            } else {\n              load();\n            }\n          }\n        }\n      });\n      on('transitionEnd', () => {\n        if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n          if (swiper.params.lazy.checkInView) {\n            checkInViewOnLoad();\n          } else {\n            load();\n          }\n        }\n      });\n      on('slideChange', () => {\n        const {\n          lazy,\n          cssMode,\n          watchSlidesProgress,\n          touchReleaseOnEdges,\n          resistanceRatio\n        } = swiper.params;\n\n        if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n          load();\n        }\n      });\n      Object.assign(swiper.lazy, {\n        load,\n        loadInSlide\n      });\n    }\n\n    /* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\n    function Controller({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        controller: {\n          control: undefined,\n          inverse: false,\n          by: 'slide' // or 'container'\n\n        }\n      });\n      swiper.controller = {\n        control: undefined\n      };\n\n      function LinearSpline(x, y) {\n        const binarySearch = function search() {\n          let maxIndex;\n          let minIndex;\n          let guess;\n          return (array, val) => {\n            minIndex = -1;\n            maxIndex = array.length;\n\n            while (maxIndex - minIndex > 1) {\n              guess = maxIndex + minIndex >> 1;\n\n              if (array[guess] <= val) {\n                minIndex = guess;\n              } else {\n                maxIndex = guess;\n              }\n            }\n\n            return maxIndex;\n          };\n        }();\n\n        this.x = x;\n        this.y = y;\n        this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n        // (x1,y1) is the known point before given value,\n        // (x3,y3) is the known point after given value.\n\n        let i1;\n        let i3;\n\n        this.interpolate = function interpolate(x2) {\n          if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n          i3 = binarySearch(this.x, x2);\n          i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n          // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n          return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n        };\n\n        return this;\n      } // xxx: for now i will just save one spline function to to\n\n\n      function getInterpolateFunction(c) {\n        if (!swiper.controller.spline) {\n          swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n        }\n      }\n\n      function setTranslate(_t, byController) {\n        const controlled = swiper.controller.control;\n        let multiplier;\n        let controlledTranslate;\n        const Swiper = swiper.constructor;\n\n        function setControlledTranslate(c) {\n          // this will create an Interpolate function based on the snapGrids\n          // x is the Grid of the scrolled scroller and y will be the controlled scroller\n          // it makes sense to create this only once and recall it for the interpolation\n          // the function does a lot of value caching for performance\n          const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n          if (swiper.params.controller.by === 'slide') {\n            getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n            // but it did not work out\n\n            controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n          }\n\n          if (!controlledTranslate || swiper.params.controller.by === 'container') {\n            multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n            controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n          }\n\n          if (swiper.params.controller.inverse) {\n            controlledTranslate = c.maxTranslate() - controlledTranslate;\n          }\n\n          c.updateProgress(controlledTranslate);\n          c.setTranslate(controlledTranslate, swiper);\n          c.updateActiveIndex();\n          c.updateSlidesClasses();\n        }\n\n        if (Array.isArray(controlled)) {\n          for (let i = 0; i < controlled.length; i += 1) {\n            if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n              setControlledTranslate(controlled[i]);\n            }\n          }\n        } else if (controlled instanceof Swiper && byController !== controlled) {\n          setControlledTranslate(controlled);\n        }\n      }\n\n      function setTransition(duration, byController) {\n        const Swiper = swiper.constructor;\n        const controlled = swiper.controller.control;\n        let i;\n\n        function setControlledTransition(c) {\n          c.setTransition(duration, swiper);\n\n          if (duration !== 0) {\n            c.transitionStart();\n\n            if (c.params.autoHeight) {\n              nextTick(() => {\n                c.updateAutoHeight();\n              });\n            }\n\n            c.$wrapperEl.transitionEnd(() => {\n              if (!controlled) return;\n\n              if (c.params.loop && swiper.params.controller.by === 'slide') {\n                c.loopFix();\n              }\n\n              c.transitionEnd();\n            });\n          }\n        }\n\n        if (Array.isArray(controlled)) {\n          for (i = 0; i < controlled.length; i += 1) {\n            if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n              setControlledTransition(controlled[i]);\n            }\n          }\n        } else if (controlled instanceof Swiper && byController !== controlled) {\n          setControlledTransition(controlled);\n        }\n      }\n\n      function removeSpline() {\n        if (!swiper.controller.control) return;\n\n        if (swiper.controller.spline) {\n          swiper.controller.spline = undefined;\n          delete swiper.controller.spline;\n        }\n      }\n\n      on('beforeInit', () => {\n        swiper.controller.control = swiper.params.controller.control;\n      });\n      on('update', () => {\n        removeSpline();\n      });\n      on('resize', () => {\n        removeSpline();\n      });\n      on('observerUpdate', () => {\n        removeSpline();\n      });\n      on('setTranslate', (_s, translate, byController) => {\n        if (!swiper.controller.control) return;\n        swiper.controller.setTranslate(translate, byController);\n      });\n      on('setTransition', (_s, duration, byController) => {\n        if (!swiper.controller.control) return;\n        swiper.controller.setTransition(duration, byController);\n      });\n      Object.assign(swiper.controller, {\n        setTranslate,\n        setTransition\n      });\n    }\n\n    function A11y({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        a11y: {\n          enabled: true,\n          notificationClass: 'swiper-notification',\n          prevSlideMessage: 'Previous slide',\n          nextSlideMessage: 'Next slide',\n          firstSlideMessage: 'This is the first slide',\n          lastSlideMessage: 'This is the last slide',\n          paginationBulletMessage: 'Go to slide {{index}}',\n          slideLabelMessage: '{{index}} / {{slidesLength}}',\n          containerMessage: null,\n          containerRoleDescriptionMessage: null,\n          itemRoleDescriptionMessage: null,\n          slideRole: 'group'\n        }\n      });\n      let liveRegion = null;\n\n      function notify(message) {\n        const notification = liveRegion;\n        if (notification.length === 0) return;\n        notification.html('');\n        notification.html(message);\n      }\n\n      function getRandomNumber(size = 16) {\n        const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n        return 'x'.repeat(size).replace(/x/g, randomChar);\n      }\n\n      function makeElFocusable($el) {\n        $el.attr('tabIndex', '0');\n      }\n\n      function makeElNotFocusable($el) {\n        $el.attr('tabIndex', '-1');\n      }\n\n      function addElRole($el, role) {\n        $el.attr('role', role);\n      }\n\n      function addElRoleDescription($el, description) {\n        $el.attr('aria-roledescription', description);\n      }\n\n      function addElControls($el, controls) {\n        $el.attr('aria-controls', controls);\n      }\n\n      function addElLabel($el, label) {\n        $el.attr('aria-label', label);\n      }\n\n      function addElId($el, id) {\n        $el.attr('id', id);\n      }\n\n      function addElLive($el, live) {\n        $el.attr('aria-live', live);\n      }\n\n      function disableEl($el) {\n        $el.attr('aria-disabled', true);\n      }\n\n      function enableEl($el) {\n        $el.attr('aria-disabled', false);\n      }\n\n      function onEnterOrSpaceKey(e) {\n        if (e.keyCode !== 13 && e.keyCode !== 32) return;\n        const params = swiper.params.a11y;\n        const $targetEl = $(e.target);\n\n        if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n          if (!(swiper.isEnd && !swiper.params.loop)) {\n            swiper.slideNext();\n          }\n\n          if (swiper.isEnd) {\n            notify(params.lastSlideMessage);\n          } else {\n            notify(params.nextSlideMessage);\n          }\n        }\n\n        if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n          if (!(swiper.isBeginning && !swiper.params.loop)) {\n            swiper.slidePrev();\n          }\n\n          if (swiper.isBeginning) {\n            notify(params.firstSlideMessage);\n          } else {\n            notify(params.prevSlideMessage);\n          }\n        }\n\n        if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n          $targetEl[0].click();\n        }\n      }\n\n      function updateNavigation() {\n        if (swiper.params.loop || !swiper.navigation) return;\n        const {\n          $nextEl,\n          $prevEl\n        } = swiper.navigation;\n\n        if ($prevEl && $prevEl.length > 0) {\n          if (swiper.isBeginning) {\n            disableEl($prevEl);\n            makeElNotFocusable($prevEl);\n          } else {\n            enableEl($prevEl);\n            makeElFocusable($prevEl);\n          }\n        }\n\n        if ($nextEl && $nextEl.length > 0) {\n          if (swiper.isEnd) {\n            disableEl($nextEl);\n            makeElNotFocusable($nextEl);\n          } else {\n            enableEl($nextEl);\n            makeElFocusable($nextEl);\n          }\n        }\n      }\n\n      function hasPagination() {\n        return swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length;\n      }\n\n      function updatePagination() {\n        const params = swiper.params.a11y;\n\n        if (hasPagination()) {\n          swiper.pagination.bullets.each(bulletEl => {\n            const $bulletEl = $(bulletEl);\n            makeElFocusable($bulletEl);\n\n            if (!swiper.params.pagination.renderBullet) {\n              addElRole($bulletEl, 'button');\n              addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n            }\n          });\n        }\n      }\n\n      const initNavEl = ($el, wrapperId, message) => {\n        makeElFocusable($el);\n\n        if ($el[0].tagName !== 'BUTTON') {\n          addElRole($el, 'button');\n          $el.on('keydown', onEnterOrSpaceKey);\n        }\n\n        addElLabel($el, message);\n        addElControls($el, wrapperId);\n      };\n\n      function init() {\n        const params = swiper.params.a11y;\n        swiper.$el.append(liveRegion); // Container\n\n        const $containerEl = swiper.$el;\n\n        if (params.containerRoleDescriptionMessage) {\n          addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n        }\n\n        if (params.containerMessage) {\n          addElLabel($containerEl, params.containerMessage);\n        } // Wrapper\n\n\n        const $wrapperEl = swiper.$wrapperEl;\n        const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n        const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n        addElId($wrapperEl, wrapperId);\n        addElLive($wrapperEl, live); // Slide\n\n        if (params.itemRoleDescriptionMessage) {\n          addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n        }\n\n        addElRole($(swiper.slides), params.slideRole);\n        const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n        swiper.slides.each((slideEl, index) => {\n          const $slideEl = $(slideEl);\n          const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index;\n          const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n          addElLabel($slideEl, ariaLabelMessage);\n        }); // Navigation\n\n        let $nextEl;\n        let $prevEl;\n\n        if (swiper.navigation && swiper.navigation.$nextEl) {\n          $nextEl = swiper.navigation.$nextEl;\n        }\n\n        if (swiper.navigation && swiper.navigation.$prevEl) {\n          $prevEl = swiper.navigation.$prevEl;\n        }\n\n        if ($nextEl && $nextEl.length) {\n          initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n        }\n\n        if ($prevEl && $prevEl.length) {\n          initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n        } // Pagination\n\n\n        if (hasPagination()) {\n          swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n        }\n      }\n\n      function destroy() {\n        if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n        let $nextEl;\n        let $prevEl;\n\n        if (swiper.navigation && swiper.navigation.$nextEl) {\n          $nextEl = swiper.navigation.$nextEl;\n        }\n\n        if (swiper.navigation && swiper.navigation.$prevEl) {\n          $prevEl = swiper.navigation.$prevEl;\n        }\n\n        if ($nextEl) {\n          $nextEl.off('keydown', onEnterOrSpaceKey);\n        }\n\n        if ($prevEl) {\n          $prevEl.off('keydown', onEnterOrSpaceKey);\n        } // Pagination\n\n\n        if (hasPagination()) {\n          swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n        }\n      }\n\n      on('beforeInit', () => {\n        liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\n      });\n      on('afterInit', () => {\n        if (!swiper.params.a11y.enabled) return;\n        init();\n        updateNavigation();\n      });\n      on('toEdge', () => {\n        if (!swiper.params.a11y.enabled) return;\n        updateNavigation();\n      });\n      on('fromEdge', () => {\n        if (!swiper.params.a11y.enabled) return;\n        updateNavigation();\n      });\n      on('paginationUpdate', () => {\n        if (!swiper.params.a11y.enabled) return;\n        updatePagination();\n      });\n      on('destroy', () => {\n        if (!swiper.params.a11y.enabled) return;\n        destroy();\n      });\n    }\n\n    function History({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        history: {\n          enabled: false,\n          root: '',\n          replaceState: false,\n          key: 'slides'\n        }\n      });\n      let initialized = false;\n      let paths = {};\n\n      const slugify = text => {\n        return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n      };\n\n      const getPathValues = urlOverride => {\n        const window = getWindow();\n        let location;\n\n        if (urlOverride) {\n          location = new URL(urlOverride);\n        } else {\n          location = window.location;\n        }\n\n        const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n        const total = pathArray.length;\n        const key = pathArray[total - 2];\n        const value = pathArray[total - 1];\n        return {\n          key,\n          value\n        };\n      };\n\n      const setHistory = (key, index) => {\n        const window = getWindow();\n        if (!initialized || !swiper.params.history.enabled) return;\n        let location;\n\n        if (swiper.params.url) {\n          location = new URL(swiper.params.url);\n        } else {\n          location = window.location;\n        }\n\n        const slide = swiper.slides.eq(index);\n        let value = slugify(slide.attr('data-history'));\n\n        if (swiper.params.history.root.length > 0) {\n          let root = swiper.params.history.root;\n          if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n          value = `${root}/${key}/${value}`;\n        } else if (!location.pathname.includes(key)) {\n          value = `${key}/${value}`;\n        }\n\n        const currentState = window.history.state;\n\n        if (currentState && currentState.value === value) {\n          return;\n        }\n\n        if (swiper.params.history.replaceState) {\n          window.history.replaceState({\n            value\n          }, null, value);\n        } else {\n          window.history.pushState({\n            value\n          }, null, value);\n        }\n      };\n\n      const scrollToSlide = (speed, value, runCallbacks) => {\n        if (value) {\n          for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n            const slide = swiper.slides.eq(i);\n            const slideHistory = slugify(slide.attr('data-history'));\n\n            if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n              const index = slide.index();\n              swiper.slideTo(index, speed, runCallbacks);\n            }\n          }\n        } else {\n          swiper.slideTo(0, speed, runCallbacks);\n        }\n      };\n\n      const setHistoryPopState = () => {\n        paths = getPathValues(swiper.params.url);\n        scrollToSlide(swiper.params.speed, swiper.paths.value, false);\n      };\n\n      const init = () => {\n        const window = getWindow();\n        if (!swiper.params.history) return;\n\n        if (!window.history || !window.history.pushState) {\n          swiper.params.history.enabled = false;\n          swiper.params.hashNavigation.enabled = true;\n          return;\n        }\n\n        initialized = true;\n        paths = getPathValues(swiper.params.url);\n        if (!paths.key && !paths.value) return;\n        scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n        if (!swiper.params.history.replaceState) {\n          window.addEventListener('popstate', setHistoryPopState);\n        }\n      };\n\n      const destroy = () => {\n        const window = getWindow();\n\n        if (!swiper.params.history.replaceState) {\n          window.removeEventListener('popstate', setHistoryPopState);\n        }\n      };\n\n      on('init', () => {\n        if (swiper.params.history.enabled) {\n          init();\n        }\n      });\n      on('destroy', () => {\n        if (swiper.params.history.enabled) {\n          destroy();\n        }\n      });\n      on('transitionEnd _freeModeNoMomentumRelease', () => {\n        if (initialized) {\n          setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      });\n      on('slideChange', () => {\n        if (initialized && swiper.params.cssMode) {\n          setHistory(swiper.params.history.key, swiper.activeIndex);\n        }\n      });\n    }\n\n    function HashNavigation({\n      swiper,\n      extendParams,\n      emit,\n      on\n    }) {\n      let initialized = false;\n      const document = getDocument();\n      const window = getWindow();\n      extendParams({\n        hashNavigation: {\n          enabled: false,\n          replaceState: false,\n          watchState: false\n        }\n      });\n\n      const onHashChange = () => {\n        emit('hashChange');\n        const newHash = document.location.hash.replace('#', '');\n        const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n        if (newHash !== activeSlideHash) {\n          const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n          if (typeof newIndex === 'undefined') return;\n          swiper.slideTo(newIndex);\n        }\n      };\n\n      const setHash = () => {\n        if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n        if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n          window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n          emit('hashSet');\n        } else {\n          const slide = swiper.slides.eq(swiper.activeIndex);\n          const hash = slide.attr('data-hash') || slide.attr('data-history');\n          document.location.hash = hash || '';\n          emit('hashSet');\n        }\n      };\n\n      const init = () => {\n        if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n        initialized = true;\n        const hash = document.location.hash.replace('#', '');\n\n        if (hash) {\n          const speed = 0;\n\n          for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n            const slide = swiper.slides.eq(i);\n            const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n            if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n              const index = slide.index();\n              swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n            }\n          }\n        }\n\n        if (swiper.params.hashNavigation.watchState) {\n          $(window).on('hashchange', onHashChange);\n        }\n      };\n\n      const destroy = () => {\n        if (swiper.params.hashNavigation.watchState) {\n          $(window).off('hashchange', onHashChange);\n        }\n      };\n\n      on('init', () => {\n        if (swiper.params.hashNavigation.enabled) {\n          init();\n        }\n      });\n      on('destroy', () => {\n        if (swiper.params.hashNavigation.enabled) {\n          destroy();\n        }\n      });\n      on('transitionEnd _freeModeNoMomentumRelease', () => {\n        if (initialized) {\n          setHash();\n        }\n      });\n      on('slideChange', () => {\n        if (initialized && swiper.params.cssMode) {\n          setHash();\n        }\n      });\n    }\n\n    /* eslint no-underscore-dangle: \"off\" */\n    function Autoplay({\n      swiper,\n      extendParams,\n      on,\n      emit\n    }) {\n      let timeout;\n      swiper.autoplay = {\n        running: false,\n        paused: false\n      };\n      extendParams({\n        autoplay: {\n          enabled: false,\n          delay: 3000,\n          waitForTransition: true,\n          disableOnInteraction: true,\n          stopOnLastSlide: false,\n          reverseDirection: false,\n          pauseOnMouseEnter: false\n        }\n      });\n\n      function run() {\n        const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n        let delay = swiper.params.autoplay.delay;\n\n        if ($activeSlideEl.attr('data-swiper-autoplay')) {\n          delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n        }\n\n        clearTimeout(timeout);\n        timeout = nextTick(() => {\n          let autoplayResult;\n\n          if (swiper.params.autoplay.reverseDirection) {\n            if (swiper.params.loop) {\n              swiper.loopFix();\n              autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n              emit('autoplay');\n            } else if (!swiper.isBeginning) {\n              autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n              emit('autoplay');\n            } else if (!swiper.params.autoplay.stopOnLastSlide) {\n              autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n              emit('autoplay');\n            } else {\n              stop();\n            }\n          } else if (swiper.params.loop) {\n            swiper.loopFix();\n            autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n            emit('autoplay');\n          } else if (!swiper.isEnd) {\n            autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n            emit('autoplay');\n          } else if (!swiper.params.autoplay.stopOnLastSlide) {\n            autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n            emit('autoplay');\n          } else {\n            stop();\n          }\n\n          if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n            run();\n          }\n        }, delay);\n      }\n\n      function start() {\n        if (typeof timeout !== 'undefined') return false;\n        if (swiper.autoplay.running) return false;\n        swiper.autoplay.running = true;\n        emit('autoplayStart');\n        run();\n        return true;\n      }\n\n      function stop() {\n        if (!swiper.autoplay.running) return false;\n        if (typeof timeout === 'undefined') return false;\n\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = undefined;\n        }\n\n        swiper.autoplay.running = false;\n        emit('autoplayStop');\n        return true;\n      }\n\n      function pause(speed) {\n        if (!swiper.autoplay.running) return;\n        if (swiper.autoplay.paused) return;\n        if (timeout) clearTimeout(timeout);\n        swiper.autoplay.paused = true;\n\n        if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n          swiper.autoplay.paused = false;\n          run();\n        } else {\n          ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n            swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n          });\n        }\n      }\n\n      function onVisibilityChange() {\n        const document = getDocument();\n\n        if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n          pause();\n        }\n\n        if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n          run();\n          swiper.autoplay.paused = false;\n        }\n      }\n\n      function onTransitionEnd(e) {\n        if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n        if (e.target !== swiper.$wrapperEl[0]) return;\n        ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n          swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n        });\n        swiper.autoplay.paused = false;\n\n        if (!swiper.autoplay.running) {\n          stop();\n        } else {\n          run();\n        }\n      }\n\n      function onMouseEnter() {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          stop();\n        } else {\n          pause();\n        }\n\n        ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n          swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n        });\n      }\n\n      function onMouseLeave() {\n        if (swiper.params.autoplay.disableOnInteraction) {\n          return;\n        }\n\n        swiper.autoplay.paused = false;\n        run();\n      }\n\n      function attachMouseEvents() {\n        if (swiper.params.autoplay.pauseOnMouseEnter) {\n          swiper.$el.on('mouseenter', onMouseEnter);\n          swiper.$el.on('mouseleave', onMouseLeave);\n        }\n      }\n\n      function detachMouseEvents() {\n        swiper.$el.off('mouseenter', onMouseEnter);\n        swiper.$el.off('mouseleave', onMouseLeave);\n      }\n\n      on('init', () => {\n        if (swiper.params.autoplay.enabled) {\n          start();\n          const document = getDocument();\n          document.addEventListener('visibilitychange', onVisibilityChange);\n          attachMouseEvents();\n        }\n      });\n      on('beforeTransitionStart', (_s, speed, internal) => {\n        if (swiper.autoplay.running) {\n          if (internal || !swiper.params.autoplay.disableOnInteraction) {\n            swiper.autoplay.pause(speed);\n          } else {\n            stop();\n          }\n        }\n      });\n      on('sliderFirstMove', () => {\n        if (swiper.autoplay.running) {\n          if (swiper.params.autoplay.disableOnInteraction) {\n            stop();\n          } else {\n            pause();\n          }\n        }\n      });\n      on('touchEnd', () => {\n        if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n          run();\n        }\n      });\n      on('destroy', () => {\n        detachMouseEvents();\n\n        if (swiper.autoplay.running) {\n          stop();\n        }\n\n        const document = getDocument();\n        document.removeEventListener('visibilitychange', onVisibilityChange);\n      });\n      Object.assign(swiper.autoplay, {\n        pause,\n        run,\n        start,\n        stop\n      });\n    }\n\n    function Thumb({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        thumbs: {\n          swiper: null,\n          multipleActiveThumbs: true,\n          autoScrollOffset: 0,\n          slideThumbActiveClass: 'swiper-slide-thumb-active',\n          thumbsContainerClass: 'swiper-thumbs'\n        }\n      });\n      let initialized = false;\n      let swiperCreated = false;\n      swiper.thumbs = {\n        swiper: null\n      };\n\n      function onThumbClick() {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n        const clickedIndex = thumbsSwiper.clickedIndex;\n        const clickedSlide = thumbsSwiper.clickedSlide;\n        if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n        if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n        let slideToIndex;\n\n        if (thumbsSwiper.params.loop) {\n          slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n        } else {\n          slideToIndex = clickedIndex;\n        }\n\n        if (swiper.params.loop) {\n          let currentIndex = swiper.activeIndex;\n\n          if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n            swiper.loopFix(); // eslint-disable-next-line\n\n            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n            currentIndex = swiper.activeIndex;\n          }\n\n          const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n          const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n          if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n        }\n\n        swiper.slideTo(slideToIndex);\n      }\n\n      function init() {\n        const {\n          thumbs: thumbsParams\n        } = swiper.params;\n        if (initialized) return false;\n        initialized = true;\n        const SwiperClass = swiper.constructor;\n\n        if (thumbsParams.swiper instanceof SwiperClass) {\n          swiper.thumbs.swiper = thumbsParams.swiper;\n          Object.assign(swiper.thumbs.swiper.originalParams, {\n            watchSlidesProgress: true,\n            slideToClickedSlide: false\n          });\n          Object.assign(swiper.thumbs.swiper.params, {\n            watchSlidesProgress: true,\n            slideToClickedSlide: false\n          });\n        } else if (isObject(thumbsParams.swiper)) {\n          const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n          Object.assign(thumbsSwiperParams, {\n            watchSlidesProgress: true,\n            slideToClickedSlide: false\n          });\n          swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n          swiperCreated = true;\n        }\n\n        swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n        swiper.thumbs.swiper.on('tap', onThumbClick);\n        return true;\n      }\n\n      function update(initial) {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n        const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n        const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n        const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n        if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n          let currentThumbsIndex = thumbsSwiper.activeIndex;\n          let newThumbsIndex;\n          let direction;\n\n          if (thumbsSwiper.params.loop) {\n            if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n              thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n              thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n              currentThumbsIndex = thumbsSwiper.activeIndex;\n            } // Find actual thumbs index to slide to\n\n\n            const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n            const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n            if (typeof prevThumbsIndex === 'undefined') {\n              newThumbsIndex = nextThumbsIndex;\n            } else if (typeof nextThumbsIndex === 'undefined') {\n              newThumbsIndex = prevThumbsIndex;\n            } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n              newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n            } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n              newThumbsIndex = nextThumbsIndex;\n            } else {\n              newThumbsIndex = prevThumbsIndex;\n            }\n\n            direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n          } else {\n            newThumbsIndex = swiper.realIndex;\n            direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n          }\n\n          if (useOffset) {\n            newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n          }\n\n          if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n            if (thumbsSwiper.params.centeredSlides) {\n              if (newThumbsIndex > currentThumbsIndex) {\n                newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n              } else {\n                newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n              }\n            } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n\n            thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n          }\n        } // Activate thumbs\n\n\n        let thumbsToActivate = 1;\n        const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n        if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n          thumbsToActivate = swiper.params.slidesPerView;\n        }\n\n        if (!swiper.params.thumbs.multipleActiveThumbs) {\n          thumbsToActivate = 1;\n        }\n\n        thumbsToActivate = Math.floor(thumbsToActivate);\n        thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n        if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n          for (let i = 0; i < thumbsToActivate; i += 1) {\n            thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n          }\n        } else {\n          for (let i = 0; i < thumbsToActivate; i += 1) {\n            thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n          }\n        }\n      }\n\n      on('beforeInit', () => {\n        const {\n          thumbs\n        } = swiper.params;\n        if (!thumbs || !thumbs.swiper) return;\n        init();\n        update(true);\n      });\n      on('slideChange update resize observerUpdate', () => {\n        if (!swiper.thumbs.swiper) return;\n        update();\n      });\n      on('setTransition', (_s, duration) => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n        thumbsSwiper.setTransition(duration);\n      });\n      on('beforeDestroy', () => {\n        const thumbsSwiper = swiper.thumbs.swiper;\n        if (!thumbsSwiper) return;\n\n        if (swiperCreated && thumbsSwiper) {\n          thumbsSwiper.destroy();\n        }\n      });\n      Object.assign(swiper.thumbs, {\n        init,\n        update\n      });\n    }\n\n    function freeMode({\n      swiper,\n      extendParams,\n      emit,\n      once\n    }) {\n      extendParams({\n        freeMode: {\n          enabled: false,\n          momentum: true,\n          momentumRatio: 1,\n          momentumBounce: true,\n          momentumBounceRatio: 1,\n          momentumVelocityRatio: 1,\n          sticky: false,\n          minimumVelocity: 0.02\n        }\n      });\n\n      function onTouchMove() {\n        const {\n          touchEventsData: data,\n          touches\n        } = swiper; // Velocity\n\n        if (data.velocities.length === 0) {\n          data.velocities.push({\n            position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n            time: data.touchStartTime\n          });\n        }\n\n        data.velocities.push({\n          position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n          time: now()\n        });\n      }\n\n      function onTouchEnd({\n        currentPos\n      }) {\n        const {\n          params,\n          $wrapperEl,\n          rtlTranslate: rtl,\n          snapGrid,\n          touchEventsData: data\n        } = swiper; // Time diff\n\n        const touchEndTime = now();\n        const timeDiff = touchEndTime - data.touchStartTime;\n\n        if (currentPos < -swiper.minTranslate()) {\n          swiper.slideTo(swiper.activeIndex);\n          return;\n        }\n\n        if (currentPos > -swiper.maxTranslate()) {\n          if (swiper.slides.length < snapGrid.length) {\n            swiper.slideTo(snapGrid.length - 1);\n          } else {\n            swiper.slideTo(swiper.slides.length - 1);\n          }\n\n          return;\n        }\n\n        if (params.freeMode.momentum) {\n          if (data.velocities.length > 1) {\n            const lastMoveEvent = data.velocities.pop();\n            const velocityEvent = data.velocities.pop();\n            const distance = lastMoveEvent.position - velocityEvent.position;\n            const time = lastMoveEvent.time - velocityEvent.time;\n            swiper.velocity = distance / time;\n            swiper.velocity /= 2;\n\n            if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n              swiper.velocity = 0;\n            } // this implies that the user stopped moving a finger then released.\n            // There would be no events with distance zero, so the last event is stale.\n\n\n            if (time > 150 || now() - lastMoveEvent.time > 300) {\n              swiper.velocity = 0;\n            }\n          } else {\n            swiper.velocity = 0;\n          }\n\n          swiper.velocity *= params.freeMode.momentumVelocityRatio;\n          data.velocities.length = 0;\n          let momentumDuration = 1000 * params.freeMode.momentumRatio;\n          const momentumDistance = swiper.velocity * momentumDuration;\n          let newPosition = swiper.translate + momentumDistance;\n          if (rtl) newPosition = -newPosition;\n          let doBounce = false;\n          let afterBouncePosition;\n          const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n          let needsLoopFix;\n\n          if (newPosition < swiper.maxTranslate()) {\n            if (params.freeMode.momentumBounce) {\n              if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n                newPosition = swiper.maxTranslate() - bounceAmount;\n              }\n\n              afterBouncePosition = swiper.maxTranslate();\n              doBounce = true;\n              data.allowMomentumBounce = true;\n            } else {\n              newPosition = swiper.maxTranslate();\n            }\n\n            if (params.loop && params.centeredSlides) needsLoopFix = true;\n          } else if (newPosition > swiper.minTranslate()) {\n            if (params.freeMode.momentumBounce) {\n              if (newPosition - swiper.minTranslate() > bounceAmount) {\n                newPosition = swiper.minTranslate() + bounceAmount;\n              }\n\n              afterBouncePosition = swiper.minTranslate();\n              doBounce = true;\n              data.allowMomentumBounce = true;\n            } else {\n              newPosition = swiper.minTranslate();\n            }\n\n            if (params.loop && params.centeredSlides) needsLoopFix = true;\n          } else if (params.freeMode.sticky) {\n            let nextSlide;\n\n            for (let j = 0; j < snapGrid.length; j += 1) {\n              if (snapGrid[j] > -newPosition) {\n                nextSlide = j;\n                break;\n              }\n            }\n\n            if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n              newPosition = snapGrid[nextSlide];\n            } else {\n              newPosition = snapGrid[nextSlide - 1];\n            }\n\n            newPosition = -newPosition;\n          }\n\n          if (needsLoopFix) {\n            once('transitionEnd', () => {\n              swiper.loopFix();\n            });\n          } // Fix duration\n\n\n          if (swiper.velocity !== 0) {\n            if (rtl) {\n              momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n            } else {\n              momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n            }\n\n            if (params.freeMode.sticky) {\n              // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n              // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n              // It's easy to see this when simulating touch with mouse events. To fix this,\n              // limit single-slide swipes to the default slide duration. This also has the\n              // nice side effect of matching slide speed if the user stopped moving before\n              // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n              // For faster swipes, also apply limits (albeit higher ones).\n              const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n              const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n              if (moveDistance < currentSlideSize) {\n                momentumDuration = params.speed;\n              } else if (moveDistance < 2 * currentSlideSize) {\n                momentumDuration = params.speed * 1.5;\n              } else {\n                momentumDuration = params.speed * 2.5;\n              }\n            }\n          } else if (params.freeMode.sticky) {\n            swiper.slideToClosest();\n            return;\n          }\n\n          if (params.freeMode.momentumBounce && doBounce) {\n            swiper.updateProgress(afterBouncePosition);\n            swiper.setTransition(momentumDuration);\n            swiper.setTranslate(newPosition);\n            swiper.transitionStart(true, swiper.swipeDirection);\n            swiper.animating = true;\n            $wrapperEl.transitionEnd(() => {\n              if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n              emit('momentumBounce');\n              swiper.setTransition(params.speed);\n              setTimeout(() => {\n                swiper.setTranslate(afterBouncePosition);\n                $wrapperEl.transitionEnd(() => {\n                  if (!swiper || swiper.destroyed) return;\n                  swiper.transitionEnd();\n                });\n              }, 0);\n            });\n          } else if (swiper.velocity) {\n            emit('_freeModeNoMomentumRelease');\n            swiper.updateProgress(newPosition);\n            swiper.setTransition(momentumDuration);\n            swiper.setTranslate(newPosition);\n            swiper.transitionStart(true, swiper.swipeDirection);\n\n            if (!swiper.animating) {\n              swiper.animating = true;\n              $wrapperEl.transitionEnd(() => {\n                if (!swiper || swiper.destroyed) return;\n                swiper.transitionEnd();\n              });\n            }\n          } else {\n            swiper.updateProgress(newPosition);\n          }\n\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n        } else if (params.freeMode.sticky) {\n          swiper.slideToClosest();\n          return;\n        } else if (params.freeMode) {\n          emit('_freeModeNoMomentumRelease');\n        }\n\n        if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n          swiper.updateProgress();\n          swiper.updateActiveIndex();\n          swiper.updateSlidesClasses();\n        }\n      }\n\n      Object.assign(swiper, {\n        freeMode: {\n          onTouchMove,\n          onTouchEnd\n        }\n      });\n    }\n\n    function Grid({\n      swiper,\n      extendParams\n    }) {\n      extendParams({\n        grid: {\n          rows: 1,\n          fill: 'column'\n        }\n      });\n      let slidesNumberEvenToRows;\n      let slidesPerRow;\n      let numFullColumns;\n\n      const initSlides = slidesLength => {\n        const {\n          slidesPerView\n        } = swiper.params;\n        const {\n          rows,\n          fill\n        } = swiper.params.grid;\n        slidesPerRow = slidesNumberEvenToRows / rows;\n        numFullColumns = Math.floor(slidesLength / rows);\n\n        if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n          slidesNumberEvenToRows = slidesLength;\n        } else {\n          slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n        }\n\n        if (slidesPerView !== 'auto' && fill === 'row') {\n          slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n        }\n      };\n\n      const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n        const {\n          slidesPerGroup,\n          spaceBetween\n        } = swiper.params;\n        const {\n          rows,\n          fill\n        } = swiper.params.grid; // Set slides order\n\n        let newSlideOrderIndex;\n        let column;\n        let row;\n\n        if (fill === 'row' && slidesPerGroup > 1) {\n          const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n          const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n          const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n          row = Math.floor(slideIndexInGroup / columnsInGroup);\n          column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n          newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n          slide.css({\n            '-webkit-order': newSlideOrderIndex,\n            order: newSlideOrderIndex\n          });\n        } else if (fill === 'column') {\n          column = Math.floor(i / rows);\n          row = i - column * rows;\n\n          if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n            row += 1;\n\n            if (row >= rows) {\n              row = 0;\n              column += 1;\n            }\n          }\n        } else {\n          row = Math.floor(i / slidesPerRow);\n          column = i - row * slidesPerRow;\n        }\n\n        slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n      };\n\n      const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n        const {\n          spaceBetween,\n          centeredSlides,\n          roundLengths\n        } = swiper.params;\n        const {\n          rows\n        } = swiper.params.grid;\n        swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n        swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n        swiper.$wrapperEl.css({\n          [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n        });\n\n        if (centeredSlides) {\n          snapGrid.splice(0, snapGrid.length);\n          const newSlidesGrid = [];\n\n          for (let i = 0; i < snapGrid.length; i += 1) {\n            let slidesGridItem = snapGrid[i];\n            if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n            if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n          }\n\n          snapGrid.push(...newSlidesGrid);\n        }\n      };\n\n      swiper.grid = {\n        initSlides,\n        updateSlide,\n        updateWrapperSize\n      };\n    }\n\n    function appendSlide(slides) {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params\n      } = swiper;\n\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      if (typeof slides === 'object' && 'length' in slides) {\n        for (let i = 0; i < slides.length; i += 1) {\n          if (slides[i]) $wrapperEl.append(slides[i]);\n        }\n      } else {\n        $wrapperEl.append(slides);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n    }\n\n    function prependSlide(slides) {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl,\n        activeIndex\n      } = swiper;\n\n      if (params.loop) {\n        swiper.loopDestroy();\n      }\n\n      let newActiveIndex = activeIndex + 1;\n\n      if (typeof slides === 'object' && 'length' in slides) {\n        for (let i = 0; i < slides.length; i += 1) {\n          if (slides[i]) $wrapperEl.prepend(slides[i]);\n        }\n\n        newActiveIndex = activeIndex + slides.length;\n      } else {\n        $wrapperEl.prepend(slides);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n\n      swiper.slideTo(newActiveIndex, 0, false);\n    }\n\n    function addSlide(index, slides) {\n      const swiper = this;\n      const {\n        $wrapperEl,\n        params,\n        activeIndex\n      } = swiper;\n      let activeIndexBuffer = activeIndex;\n\n      if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides;\n        swiper.loopDestroy();\n        swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n      }\n\n      const baseLength = swiper.slides.length;\n\n      if (index <= 0) {\n        swiper.prependSlide(slides);\n        return;\n      }\n\n      if (index >= baseLength) {\n        swiper.appendSlide(slides);\n        return;\n      }\n\n      let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n      const slidesBuffer = [];\n\n      for (let i = baseLength - 1; i >= index; i -= 1) {\n        const currentSlide = swiper.slides.eq(i);\n        currentSlide.remove();\n        slidesBuffer.unshift(currentSlide);\n      }\n\n      if (typeof slides === 'object' && 'length' in slides) {\n        for (let i = 0; i < slides.length; i += 1) {\n          if (slides[i]) $wrapperEl.append(slides[i]);\n        }\n\n        newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n      } else {\n        $wrapperEl.append(slides);\n      }\n\n      for (let i = 0; i < slidesBuffer.length; i += 1) {\n        $wrapperEl.append(slidesBuffer[i]);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n\n      if (params.loop) {\n        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n      } else {\n        swiper.slideTo(newActiveIndex, 0, false);\n      }\n    }\n\n    function removeSlide(slidesIndexes) {\n      const swiper = this;\n      const {\n        params,\n        $wrapperEl,\n        activeIndex\n      } = swiper;\n      let activeIndexBuffer = activeIndex;\n\n      if (params.loop) {\n        activeIndexBuffer -= swiper.loopedSlides;\n        swiper.loopDestroy();\n        swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n      }\n\n      let newActiveIndex = activeIndexBuffer;\n      let indexToRemove;\n\n      if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n        for (let i = 0; i < slidesIndexes.length; i += 1) {\n          indexToRemove = slidesIndexes[i];\n          if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n          if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n        }\n\n        newActiveIndex = Math.max(newActiveIndex, 0);\n      } else {\n        indexToRemove = slidesIndexes;\n        if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n        if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n        newActiveIndex = Math.max(newActiveIndex, 0);\n      }\n\n      if (params.loop) {\n        swiper.loopCreate();\n      }\n\n      if (!params.observer) {\n        swiper.update();\n      }\n\n      if (params.loop) {\n        swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n      } else {\n        swiper.slideTo(newActiveIndex, 0, false);\n      }\n    }\n\n    function removeAllSlides() {\n      const swiper = this;\n      const slidesIndexes = [];\n\n      for (let i = 0; i < swiper.slides.length; i += 1) {\n        slidesIndexes.push(i);\n      }\n\n      swiper.removeSlide(slidesIndexes);\n    }\n\n    function Manipulation({\n      swiper\n    }) {\n      Object.assign(swiper, {\n        appendSlide: appendSlide.bind(swiper),\n        prependSlide: prependSlide.bind(swiper),\n        addSlide: addSlide.bind(swiper),\n        removeSlide: removeSlide.bind(swiper),\n        removeAllSlides: removeAllSlides.bind(swiper)\n      });\n    }\n\n    function effectInit(params) {\n      const {\n        effect,\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        overwriteParams,\n        perspective\n      } = params;\n      on('beforeInit', () => {\n        if (swiper.params.effect !== effect) return;\n        swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n        if (perspective && perspective()) {\n          swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n        }\n\n        const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n        Object.assign(swiper.params, overwriteParamsResult);\n        Object.assign(swiper.originalParams, overwriteParamsResult);\n      });\n      on('setTranslate', () => {\n        if (swiper.params.effect !== effect) return;\n        setTranslate();\n      });\n      on('setTransition', (_s, duration) => {\n        if (swiper.params.effect !== effect) return;\n        setTransition(duration);\n      });\n    }\n\n    function effectTarget(effectParams, $slideEl) {\n      if (effectParams.transformEl) {\n        return $slideEl.find(effectParams.transformEl).css({\n          'backface-visibility': 'hidden',\n          '-webkit-backface-visibility': 'hidden'\n        });\n      }\n\n      return $slideEl;\n    }\n\n    function effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformEl,\n      allSlides\n    }) {\n      const {\n        slides,\n        activeIndex,\n        $wrapperEl\n      } = swiper;\n\n      if (swiper.params.virtualTranslate && duration !== 0) {\n        let eventTriggered = false;\n        let $transitionEndTarget;\n\n        if (allSlides) {\n          $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n        } else {\n          $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n        }\n\n        $transitionEndTarget.transitionEnd(() => {\n          if (eventTriggered) return;\n          if (!swiper || swiper.destroyed) return;\n          eventTriggered = true;\n          swiper.animating = false;\n          const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n          for (let i = 0; i < triggerEvents.length; i += 1) {\n            $wrapperEl.trigger(triggerEvents[i]);\n          }\n        });\n      }\n    }\n\n    function EffectFade({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        fadeEffect: {\n          crossFade: false,\n          transformEl: null\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          slides\n        } = swiper;\n        const params = swiper.params.fadeEffect;\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = swiper.slides.eq(i);\n          const offset = $slideEl[0].swiperSlideOffset;\n          let tx = -offset;\n          if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n          let ty = 0;\n\n          if (!swiper.isHorizontal()) {\n            ty = tx;\n            tx = 0;\n          }\n\n          const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.css({\n            opacity: slideOpacity\n          }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.fadeEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl,\n          allSlides: true\n        });\n      };\n\n      effectInit({\n        effect: 'fade',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        overwriteParams: () => ({\n          slidesPerView: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: !swiper.params.cssMode\n        })\n      });\n    }\n\n    function EffectCube({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        cubeEffect: {\n          slideShadows: true,\n          shadow: true,\n          shadowOffset: 20,\n          shadowScale: 0.94\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          $el,\n          $wrapperEl,\n          slides,\n          width: swiperWidth,\n          height: swiperHeight,\n          rtlTranslate: rtl,\n          size: swiperSize,\n          browser\n        } = swiper;\n        const params = swiper.params.cubeEffect;\n        const isHorizontal = swiper.isHorizontal();\n        const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n        let wrapperRotate = 0;\n        let $cubeShadowEl;\n\n        if (params.shadow) {\n          if (isHorizontal) {\n            $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n            if ($cubeShadowEl.length === 0) {\n              $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n              $wrapperEl.append($cubeShadowEl);\n            }\n\n            $cubeShadowEl.css({\n              height: `${swiperWidth}px`\n            });\n          } else {\n            $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n            if ($cubeShadowEl.length === 0) {\n              $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n              $el.append($cubeShadowEl);\n            }\n          }\n        }\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          let slideIndex = i;\n\n          if (isVirtual) {\n            slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n          }\n\n          let slideAngle = slideIndex * 90;\n          let round = Math.floor(slideAngle / 360);\n\n          if (rtl) {\n            slideAngle = -slideAngle;\n            round = Math.floor(-slideAngle / 360);\n          }\n\n          const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n          let tx = 0;\n          let ty = 0;\n          let tz = 0;\n\n          if (slideIndex % 4 === 0) {\n            tx = -round * 4 * swiperSize;\n            tz = 0;\n          } else if ((slideIndex - 1) % 4 === 0) {\n            tx = 0;\n            tz = -round * 4 * swiperSize;\n          } else if ((slideIndex - 2) % 4 === 0) {\n            tx = swiperSize + round * 4 * swiperSize;\n            tz = swiperSize;\n          } else if ((slideIndex - 3) % 4 === 0) {\n            tx = -swiperSize;\n            tz = 3 * swiperSize + swiperSize * 4 * round;\n          }\n\n          if (rtl) {\n            tx = -tx;\n          }\n\n          if (!isHorizontal) {\n            ty = tx;\n            tx = 0;\n          }\n\n          const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n          if (progress <= 1 && progress > -1) {\n            wrapperRotate = slideIndex * 90 + progress * 90;\n            if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n          }\n\n          $slideEl.transform(transform);\n\n          if (params.slideShadows) {\n            // Set shadows\n            let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n            let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n            if (shadowBefore.length === 0) {\n              shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n              $slideEl.append(shadowBefore);\n            }\n\n            if (shadowAfter.length === 0) {\n              shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n              $slideEl.append(shadowAfter);\n            }\n\n            if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n            if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n          }\n        }\n\n        $wrapperEl.css({\n          '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n          'transform-origin': `50% 50% -${swiperSize / 2}px`\n        });\n\n        if (params.shadow) {\n          if (isHorizontal) {\n            $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`);\n          } else {\n            const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n            const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n            const scale1 = params.shadowScale;\n            const scale2 = params.shadowScale / multiplier;\n            const offset = params.shadowOffset;\n            $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n          }\n        }\n\n        const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n        $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n      };\n\n      const setTransition = duration => {\n        const {\n          $el,\n          slides\n        } = swiper;\n        slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n        if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n          $el.find('.swiper-cube-shadow').transition(duration);\n        }\n      };\n\n      effectInit({\n        effect: 'cube',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n          slidesPerView: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          resistanceRatio: 0,\n          spaceBetween: 0,\n          centeredSlides: false,\n          virtualTranslate: true\n        })\n      });\n    }\n\n    function createShadow(params, $slideEl, side) {\n      const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n      const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n      let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n      if (!$shadowEl.length) {\n        $shadowEl = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n        $shadowContainer.append($shadowEl);\n      }\n\n      return $shadowEl;\n    }\n\n    function EffectFlip({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        flipEffect: {\n          slideShadows: true,\n          limitRotation: true,\n          transformEl: null\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          slides,\n          rtlTranslate: rtl\n        } = swiper;\n        const params = swiper.params.flipEffect;\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          let progress = $slideEl[0].progress;\n\n          if (swiper.params.flipEffect.limitRotation) {\n            progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n          }\n\n          const offset = $slideEl[0].swiperSlideOffset;\n          const rotate = -180 * progress;\n          let rotateY = rotate;\n          let rotateX = 0;\n          let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n          let ty = 0;\n\n          if (!swiper.isHorizontal()) {\n            ty = tx;\n            tx = 0;\n            rotateX = -rotateY;\n            rotateY = 0;\n          } else if (rtl) {\n            rotateY = -rotateY;\n          }\n\n          $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n          if (params.slideShadows) {\n            // Set shadows\n            let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n            let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n            if (shadowBefore.length === 0) {\n              shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n            }\n\n            if (shadowAfter.length === 0) {\n              shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n            }\n\n            if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n            if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n          }\n\n          const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.transform(transform);\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.flipEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl\n        });\n      };\n\n      effectInit({\n        effect: 'flip',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n          slidesPerView: 1,\n          slidesPerGroup: 1,\n          watchSlidesProgress: true,\n          spaceBetween: 0,\n          virtualTranslate: !swiper.params.cssMode\n        })\n      });\n    }\n\n    function EffectCoverflow({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        coverflowEffect: {\n          rotate: 50,\n          stretch: 0,\n          depth: 100,\n          scale: 1,\n          modifier: 1,\n          slideShadows: true,\n          transformEl: null\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          width: swiperWidth,\n          height: swiperHeight,\n          slides,\n          slidesSizesGrid\n        } = swiper;\n        const params = swiper.params.coverflowEffect;\n        const isHorizontal = swiper.isHorizontal();\n        const transform = swiper.translate;\n        const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n        const rotate = isHorizontal ? params.rotate : -params.rotate;\n        const translate = params.depth; // Each slide offset from center\n\n        for (let i = 0, length = slides.length; i < length; i += 1) {\n          const $slideEl = slides.eq(i);\n          const slideSize = slidesSizesGrid[i];\n          const slideOffset = $slideEl[0].swiperSlideOffset;\n          const offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;\n          let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n          let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n          let translateZ = -translate * Math.abs(offsetMultiplier);\n          let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n          if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n            stretch = parseFloat(params.stretch) / 100 * slideSize;\n          }\n\n          let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n          let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n          let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n          if (Math.abs(translateX) < 0.001) translateX = 0;\n          if (Math.abs(translateY) < 0.001) translateY = 0;\n          if (Math.abs(translateZ) < 0.001) translateZ = 0;\n          if (Math.abs(rotateY) < 0.001) rotateY = 0;\n          if (Math.abs(rotateX) < 0.001) rotateX = 0;\n          if (Math.abs(scale) < 0.001) scale = 0;\n          const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.transform(slideTransform);\n          $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n          if (params.slideShadows) {\n            // Set shadows\n            let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n            let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n            if ($shadowBeforeEl.length === 0) {\n              $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n            }\n\n            if ($shadowAfterEl.length === 0) {\n              $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n            }\n\n            if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n            if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n          }\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.coverflowEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n      };\n\n      effectInit({\n        effect: 'coverflow',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n          watchSlidesProgress: true\n        })\n      });\n    }\n\n    function EffectCreative({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        creativeEffect: {\n          transformEl: null,\n          limitProgress: 1,\n          shadowPerProgress: false,\n          progressMultiplier: 1,\n          perspective: true,\n          prev: {\n            translate: [0, 0, 0],\n            rotate: [0, 0, 0],\n            opacity: 1,\n            scale: 1\n          },\n          next: {\n            translate: [0, 0, 0],\n            rotate: [0, 0, 0],\n            opacity: 1,\n            scale: 1\n          }\n        }\n      });\n\n      const getTranslateValue = value => {\n        if (typeof value === 'string') return value;\n        return `${value}px`;\n      };\n\n      const setTranslate = () => {\n        const {\n          slides\n        } = swiper;\n        const params = swiper.params.creativeEffect;\n        const {\n          progressMultiplier: multiplier\n        } = params;\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          const slideProgress = $slideEl[0].progress;\n          const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n          const originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n          const offset = $slideEl[0].swiperSlideOffset;\n          const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n          const r = [0, 0, 0];\n          let custom = false;\n\n          if (!swiper.isHorizontal()) {\n            t[1] = t[0];\n            t[0] = 0;\n          }\n\n          let data = {\n            translate: [0, 0, 0],\n            rotate: [0, 0, 0],\n            scale: 1,\n            opacity: 1\n          };\n\n          if (progress < 0) {\n            data = params.next;\n            custom = true;\n          } else if (progress > 0) {\n            data = params.prev;\n            custom = true;\n          } // set translate\n\n\n          t.forEach((value, index) => {\n            t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n          }); // set rotates\n\n          r.forEach((value, index) => {\n            r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n          });\n          $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n          const translateString = t.join(', ');\n          const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n          const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n          const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n          const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows\n\n          if (custom && data.shadow || !custom) {\n            let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n            if ($shadowEl.length === 0 && data.shadow) {\n              $shadowEl = createShadow(params, $slideEl);\n            }\n\n            if ($shadowEl.length) {\n              const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n              $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n            }\n          }\n\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.transform(transform).css({\n            opacity: opacityString\n          });\n\n          if (data.origin) {\n            $targetEl.css('transform-origin', data.origin);\n          }\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.creativeEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl,\n          allSlides: true\n        });\n      };\n\n      effectInit({\n        effect: 'creative',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => swiper.params.creativeEffect.perspective,\n        overwriteParams: () => ({\n          watchSlidesProgress: true,\n          virtualTranslate: !swiper.params.cssMode\n        })\n      });\n    }\n\n    function EffectCards({\n      swiper,\n      extendParams,\n      on\n    }) {\n      extendParams({\n        cardsEffect: {\n          slideShadows: true,\n          transformEl: null\n        }\n      });\n\n      const setTranslate = () => {\n        const {\n          slides,\n          activeIndex\n        } = swiper;\n        const params = swiper.params.cardsEffect;\n        const {\n          startTranslate,\n          isTouched\n        } = swiper.touchEventsData;\n        const currentTranslate = swiper.translate;\n\n        for (let i = 0; i < slides.length; i += 1) {\n          const $slideEl = slides.eq(i);\n          const slideProgress = $slideEl[0].progress;\n          const progress = Math.min(Math.max(slideProgress, -4), 4);\n          let offset = $slideEl[0].swiperSlideOffset;\n\n          if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n            swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n          }\n\n          if (swiper.params.centeredSlides && swiper.params.cssMode) {\n            offset -= slides[0].swiperSlideOffset;\n          }\n\n          let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n          let tY = 0;\n          const tZ = -100 * Math.abs(progress);\n          let scale = 1;\n          let rotate = -2 * progress;\n          let tXAdd = 8 - Math.abs(progress) * 0.75;\n          const isSwipeToNext = (i === activeIndex || i === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n          const isSwipeToPrev = (i === activeIndex || i === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n\n          if (isSwipeToNext || isSwipeToPrev) {\n            const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n            rotate += -28 * progress * subProgress;\n            scale += -0.5 * subProgress;\n            tXAdd += 96 * subProgress;\n            tY = `${-25 * subProgress * Math.abs(progress)}%`;\n          }\n\n          if (progress < 0) {\n            // next\n            tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n          } else if (progress > 0) {\n            // prev\n            tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n          } else {\n            tX = `${tX}px`;\n          }\n\n          if (!swiper.isHorizontal()) {\n            const prevY = tY;\n            tY = tX;\n            tX = prevY;\n          }\n\n          const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n          const transform = `\n        translate3d(${tX}, ${tY}, ${tZ}px)\n        rotateZ(${rotate}deg)\n        scale(${scaleString})\n      `;\n\n          if (params.slideShadows) {\n            // Set shadows\n            let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n            if ($shadowEl.length === 0) {\n              $shadowEl = createShadow(params, $slideEl);\n            }\n\n            if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n          }\n\n          $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n          const $targetEl = effectTarget(params, $slideEl);\n          $targetEl.transform(transform);\n        }\n      };\n\n      const setTransition = duration => {\n        const {\n          transformEl\n        } = swiper.params.cardsEffect;\n        const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n        $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n        effectVirtualTransitionEnd({\n          swiper,\n          duration,\n          transformEl\n        });\n      };\n\n      effectInit({\n        effect: 'cards',\n        swiper,\n        on,\n        setTranslate,\n        setTransition,\n        perspective: () => true,\n        overwriteParams: () => ({\n          watchSlidesProgress: true,\n          virtualTranslate: !swiper.params.cssMode\n        })\n      });\n    }\n\n    // Swiper Class\n    const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\n    Swiper.use(modules);\n\n    return Swiper;\n\n})));\n//# sourceMappingURL=swiper-bundle.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/swiper/swiper-bundle.js\n// module id = 8\n// module chunks = 0","( function ( $ ) {\r\n\tconst changeLanguage = ( lang, url ) => {\r\n\t\t$.ajax( {\r\n\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\tdata: {\r\n\t\t\t\t'action': 'process_lang_change',\r\n\t\t\t\t'lang': lang,\r\n\t\t\t},\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tsuccess: function () {\r\n\t\t\t\tdocument.location.href = url;\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\t$( 'div.js-language' ).on('click', e => changeLanguage( e.currentTarget.dataset.slug, e.currentTarget.dataset.value ) );\r\n\r\n\t$( 'select.js-language' ).on('change', e => {\r\n\t\tconst option = e.currentTarget.querySelector( 'option:checked' );\r\n\r\n\t\tchangeLanguage( option.dataset.slug, option.dataset.value );\r\n\t} );\r\n\r\n\t$( 'div.js-shipping' ).on('click', function () {\r\n\t\twindow.Checkout.countryChangeProcess( this.dataset.value, false, true );\r\n\t} );\r\n\r\n\t$( 'select.js-shipping' ).on('change', e => window.Checkout.countryChangeProcess( e.currentTarget.value, false, true ) );\r\n} )( jQuery );\r\n\r\nlet Language = {};\r\n\r\nLanguage.init = function () {\r\n\tlet languageOverlay = $( '.js-language-overlay' );\r\n\r\n\t// Cart Overlay\r\n\tif ( !$( 'body' ).is( '.isApple, .AndroidOS' ) ) {\r\n\t\tlanguageOverlay.hover( function () {\r\n\t\t\t$( 'body' ).addClass( 'language-overlay' );\r\n\t\t}, function () {\r\n\t\t\t$( 'body' ).removeClass( 'language-overlay' );\r\n\t\t} );\r\n\t}\r\n};\r\n\r\nLanguage.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/language.js","// import external dependencies\r\nimport 'jquery';\r\n\r\n// Require/Import vendors\r\nrequire('../../../node_modules/flickity/dist/flickity.pkgd')\r\nrequire('../../../node_modules/overlayscrollbars/js/jquery.overlayScrollbars');\r\nrequire('./vendor/flickity-fullscreen');\r\nrequire('./vendor/jquery.txtTruncate');\r\n\r\n// Import everything from autoload\r\nimport './autoload/_bootstrap.js'\r\n\r\n// import local dependencies/utils\r\nimport Router from './util/Router';\r\nimport common from './routes/common';\r\nimport { sliders } from './components/sliders';\r\nimport LazyLoad from 'vanilla-lazyload';\r\nimport { stokpress } from './util/helper';\r\n\r\nwindow.stokpress = stokpress;\r\n\r\nrequire('./util/plusItem');\r\nrequire('./util/crossPlatform');\r\nrequire('./util/autoPadding');\r\nrequire('./util/ellipsis');\r\nrequire('./util/backgroundSwitcher');\r\nrequire('./util/articleFilter');\r\nrequire('./util/checkTouch');\r\nrequire('./util/displayProp');\r\nrequire('./util/disableBodyScroll');\r\n\r\n// Require Components\r\n// components are now on common. See routes below\r\n// routes will be found on routes folder\r\n\r\n/** Populate Router instance with DOM routes */\r\nconst routes = new Router({\r\n  // All pages\r\n  common,\r\n});\r\n\r\n// Load Events\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  routes.loadEvents();\r\n\tsliders.init();\r\n\r\n  $('body').autoPadding({\r\n    source: $('.js-header'),\r\n  });\r\n\r\n  let lazyLoadInstance = new LazyLoad({\r\n    threshold: 500,\r\n    elements_selector: '.lazy',\r\n  });\r\n\r\n  if (lazyLoadInstance) {\r\n    lazyLoadInstance.update();\r\n  }\r\n\r\n\twindow.lazyLoadInstance = lazyLoadInstance;\r\n});\n\n\n// WEBPACK FOOTER //\n// ./scripts/main.js","/*!\n * Flickity PACKAGED v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /* globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {\n      return factory( window, jQuery );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('jquery')\n    );\n  } else {\n    // browser global\n    window.jQueryBridget = factory(\n      window,\n      window.jQuery\n    );\n  }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n  function( message ) {\n    console.error( message );\n  };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n  $ = $ || jQuery || window.jQuery;\n  if ( !$ ) {\n    return;\n  }\n\n  // add option method -> $().plugin('option', {...})\n  if ( !PluginClass.prototype.option ) {\n    // option setter\n    PluginClass.prototype.option = function( opts ) {\n      // bail out if not an object\n      if ( !$.isPlainObject( opts ) ){\n        return;\n      }\n      this.options = $.extend( true, this.options, opts );\n    };\n  }\n\n  // make jQuery plugin\n  $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n    if ( typeof arg0 == 'string' ) {\n      // method call $().plugin( 'methodName', { options } )\n      // shift arguments by 1\n      var args = arraySlice.call( arguments, 1 );\n      return methodCall( this, arg0, args );\n    }\n    // just $().plugin({ options })\n    plainCall( this, arg0 );\n    return this;\n  };\n\n  // $().plugin('methodName')\n  function methodCall( $elems, methodName, args ) {\n    var returnValue;\n    var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n    $elems.each( function( i, elem ) {\n      // get instance\n      var instance = $.data( elem, namespace );\n      if ( !instance ) {\n        logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n          pluginMethodStr );\n        return;\n      }\n\n      var method = instance[ methodName ];\n      if ( !method || methodName.charAt(0) == '_' ) {\n        logError( pluginMethodStr + ' is not a valid method' );\n        return;\n      }\n\n      // apply method, get return value\n      var value = method.apply( instance, args );\n      // set return value if value is returned, use only first value\n      returnValue = returnValue === undefined ? value : returnValue;\n    });\n\n    return returnValue !== undefined ? returnValue : $elems;\n  }\n\n  function plainCall( $elems, options ) {\n    $elems.each( function( i, elem ) {\n      var instance = $.data( elem, namespace );\n      if ( instance ) {\n        // set options & init\n        instance.option( options );\n        instance._init();\n      } else {\n        // initialize new instance\n        instance = new PluginClass( elem, options );\n        $.data( elem, namespace, instance );\n      }\n    });\n  }\n\n  updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n  if ( !$ || ( $ && $.bridget ) ) {\n    return;\n  }\n  $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// -----  ----- //\n\nreturn jQueryBridget;\n\n}));\n\n/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( 'ev-emitter/ev-emitter',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i]\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n\n/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n  /* jshint strict: false */ /* globals define, module */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'get-size/get-size',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    logError( 'Style returned ' + style +\n      '. Are you running this code in a hidden iframe on Firefox? ' +\n      'See https://bit.ly/getsizebug1' );\n  }\n  return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  // -------------------------- box sizing -------------------------- //\n\n  /**\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\n   * IE11 & Firefox<29 measures the inner-width\n   */\n  var div = document.createElement('div');\n  div.style.width = '200px';\n  div.style.padding = '1px 2px 3px 4px';\n  div.style.borderStyle = 'solid';\n  div.style.borderWidth = '1px 2px 3px 4px';\n  div.style.boxSizing = 'border-box';\n\n  var body = document.body || document.documentElement;\n  body.appendChild( div );\n  var style = getStyle( div );\n  // round value for browser zoom. desandro/masonry#928\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n  body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n});\n\n/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false */\n  'use strict';\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'desandro-matches-selector/matches-selector',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.matchesSelector = factory();\n  }\n\n}( window, function factory() {\n  'use strict';\n\n  var matchesMethod = ( function() {\n    var ElemProto = window.Element.prototype;\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0; i < prefixes.length; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  return function matchesSelector( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  };\n\n}));\n\n/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'fizzy-ui-utils/utils',[\n      'desandro-matches-selector/matches-selector'\n    ], function( matchesSelector ) {\n      return factory( window, matchesSelector );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, matchesSelector ) {\n\n\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) {\n    return [];\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  elems.forEach( function( elem ) {\n    // check that elem is an actual element\n    if ( !( elem instanceof HTMLElement ) ) {\n      return;\n    }\n    // add elem if no selector\n    if ( !selector ) {\n      ffElems.push( elem );\n      return;\n    }\n    // filter & find items if we have a selector\n    // filter\n    if ( matchesSelector( elem, selector ) ) {\n      ffElems.push( elem );\n    }\n    // find children\n    var childElems = elem.querySelectorAll( selector );\n    // concat childElems to filterFound array\n    for ( var i=0; i < childElems.length; i++ ) {\n      ffElems.push( childElems[i] );\n    }\n  });\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    clearTimeout( timeout );\n\n    var args = arguments;\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n  var readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( callback );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', callback );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var dataAttr = 'data-' + dashedNamespace;\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var elems = utils.makeArray( dataAttrElems )\n      .concat( utils.makeArray( jsDashElems ) );\n    var dataOptionsAttr = dataAttr + '-options';\n    var jQuery = window.jQuery;\n\n    elems.forEach( function( elem ) {\n      var attr = elem.getAttribute( dataAttr ) ||\n        elem.getAttribute( dataOptionsAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n          ': ' + error );\n        }\n        return;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    });\n\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n\n// Flickity.Cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/cell',[\n      'get-size/get-size'\n    ], function( getSize ) {\n      return factory( window, getSize );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('get-size')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Cell = factory(\n      window,\n      window.getSize\n    );\n  }\n\n}( window, function factory( window, getSize ) {\n\n\n\nfunction Cell( elem, parent ) {\n  this.element = elem;\n  this.parent = parent;\n\n  this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n  this.element.style.position = 'absolute';\n  this.element.setAttribute( 'aria-hidden', 'true' );\n  this.x = 0;\n  this.shift = 0;\n};\n\nproto.destroy = function() {\n  // reset style\n  this.unselect();\n  this.element.style.position = '';\n  var side = this.parent.originSide;\n  this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n  this.x = x;\n  this.updateTarget();\n  this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n  var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n  this.target = this.x + this.size[ marginProperty ] +\n    this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n  // render position of cell with in slider\n  var side = this.parent.originSide;\n  this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n  this.element.classList.add('is-selected');\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n  this.element.classList.remove('is-selected');\n  this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n  this.shift = shift;\n  this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n  this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n\n// slide\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/slide',factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Slide = factory();\n  }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n  this.parent = parent;\n  this.isOriginLeft = parent.originSide == 'left';\n  this.cells = [];\n  this.outerWidth = 0;\n  this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n  this.cells.push( cell );\n  this.outerWidth += cell.size.outerWidth;\n  this.height = Math.max( cell.size.outerHeight, this.height );\n  // first cell stuff\n  if ( this.cells.length == 1 ) {\n    this.x = cell.x; // x comes from first cell\n    var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n    this.firstMargin = cell.size[ beginMargin ];\n  }\n};\n\nproto.updateTarget = function() {\n  var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n  var lastCell = this.getLastCell();\n  var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n  var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n  this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n  this.cells.forEach( function( cell ) {\n    cell.select();\n  });\n};\n\nproto.unselect = function() {\n  this.cells.forEach( function( cell ) {\n    cell.unselect();\n  });\n};\n\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  });\n};\n\nreturn Slide;\n\n}));\n\n// animate\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/animate',[\n      'fizzy-ui-utils/utils'\n    ], function( utils ) {\n      return factory( window, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.animatePrototype = factory(\n      window,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, utils ) {\n\n\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n  if ( this.isAnimating ) {\n    return;\n  }\n\n  this.isAnimating = true;\n  this.restingFrames = 0;\n  this.animate();\n};\n\nproto.animate = function() {\n  this.applyDragForce();\n  this.applySelectedAttraction();\n\n  var previousX = this.x;\n\n  this.integratePhysics();\n  this.positionSlider();\n  this.settle( previousX );\n  // animate next frame\n  if ( this.isAnimating ) {\n    var _this = this;\n    requestAnimationFrame( function animateFrame() {\n      _this.animate();\n    });\n  }\n};\n\nproto.positionSlider = function() {\n  var x = this.x;\n  // wrap position around\n  if ( this.options.wrapAround && this.cells.length > 1 ) {\n    x = utils.modulo( x, this.slideableWidth );\n    x = x - this.slideableWidth;\n    this.shiftWrapCells( x );\n  }\n\n  this.setTranslateX( x, this.isAnimating );\n  this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n  x += this.cursorPosition;\n  // reverse if right-to-left and using transform\n  x = this.options.rightToLeft ? -x : x;\n  var translateX = this.getPositionValue( x );\n  // use 3D tranforms for hardware acceleration on iOS\n  // but use 2D when settled, for better font-rendering\n  this.slider.style.transform = is3d ?\n    'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n  var firstSlide = this.slides[0];\n  if ( !firstSlide ) {\n    return;\n  }\n  var positionX = -this.x - firstSlide.target;\n  var progress = positionX / this.slidesWidth;\n  this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n  if ( !this.cells.length ) {\n    return;\n  }\n  this.x = -this.selectedSlide.target;\n  this.velocity = 0; // stop wobble\n  this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n  if ( this.options.percentPosition ) {\n    // percent position, round to 2 digits, like 12.34%\n    return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n  } else {\n    // pixel positioning\n    return Math.round( position ) + 'px';\n  }\n};\n\nproto.settle = function( previousX ) {\n  // keep track of frames where x hasn't moved\n  if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n    this.restingFrames++;\n  }\n  // stop animating if resting for 3 or more frames\n  if ( this.restingFrames > 2 ) {\n    this.isAnimating = false;\n    delete this.isFreeScrolling;\n    // render position with translateX when settled\n    this.positionSlider();\n    this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n  }\n};\n\nproto.shiftWrapCells = function( x ) {\n  // shift before cells\n  var beforeGap = this.cursorPosition + x;\n  this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n  // shift after cells\n  var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n  this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n  for ( var i=0; i < cells.length; i++ ) {\n    var cell = cells[i];\n    var cellShift = gap > 0 ? shift : 0;\n    cell.wrapShift( cellShift );\n    gap -= cell.size.outerWidth;\n  }\n};\n\nproto._unshiftCells = function( cells ) {\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  for ( var i=0; i < cells.length; i++ ) {\n    cells[i].wrapShift( 0 );\n  }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n  this.x += this.velocity;\n  this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n  this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n  return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n  // my thanks to Steven Wittens, who simplified this math greatly\n  return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n  if ( !this.isDraggable || !this.isPointerDown ) {\n    return;\n  }\n  // change the position to drag position by applying force\n  var dragVelocity = this.dragX - this.x;\n  var dragForce = dragVelocity - this.velocity;\n  this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n  // do not attract if pointer down or no slides\n  var dragDown = this.isDraggable && this.isPointerDown;\n  if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n    return;\n  }\n  var distance = this.selectedSlide.target * -1 - this.x;\n  var force = distance * this.options.selectedAttraction;\n  this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n\n// Flickity main\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/flickity',[\n      'ev-emitter/ev-emitter',\n      'get-size/get-size',\n      'fizzy-ui-utils/utils',\n      './cell',\n      './slide',\n      './animate'\n    ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n      return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter'),\n      require('get-size'),\n      require('fizzy-ui-utils'),\n      require('./cell'),\n      require('./slide'),\n      require('./animate')\n    );\n  } else {\n    // browser global\n    var _Flickity = window.Flickity;\n\n    window.Flickity = factory(\n      window,\n      window.EvEmitter,\n      window.getSize,\n      window.fizzyUIUtils,\n      _Flickity.Cell,\n      _Flickity.Slide,\n      _Flickity.animatePrototype\n    );\n  }\n\n}( window, function factory( window, EvEmitter, getSize,\n  utils, Cell, Slide, animatePrototype ) {\n\n\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n  elems = utils.makeArray( elems );\n  while ( elems.length ) {\n    toElem.appendChild( elems.shift() );\n  }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // do not initialize twice on same element\n  if ( this.element.flickityGUID ) {\n    var instance = instances[ this.element.flickityGUID ];\n    instance.option( options );\n    return instance;\n  }\n\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // kick things off\n  this._create();\n}\n\nFlickity.defaults = {\n  accessibility: true,\n  // adaptiveHeight: false,\n  cellAlign: 'center',\n  // cellSelector: undefined,\n  // contain: false,\n  freeScrollFriction: 0.075, // friction when free-scrolling\n  friction: 0.28, // friction when selecting\n  namespaceJQueryEvents: true,\n  // initialIndex: 0,\n  percentPosition: true,\n  resize: true,\n  selectedAttraction: 0.025,\n  setGallerySize: true\n  // watchCSS: false,\n  // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n  // add id for Flickity.data\n  var id = this.guid = ++GUID;\n  this.element.flickityGUID = id; // expando\n  instances[ id ] = this; // associate via id\n  // initial properties\n  this.selectedIndex = 0;\n  // how many frames slider has been in same position\n  this.restingFrames = 0;\n  // initial physics properties\n  this.x = 0;\n  this.velocity = 0;\n  this.originSide = this.options.rightToLeft ? 'right' : 'left';\n  // create viewport & slider\n  this.viewport = document.createElement('div');\n  this.viewport.className = 'flickity-viewport';\n  this._createSlider();\n\n  if ( this.options.resize || this.options.watchCSS ) {\n    window.addEventListener( 'resize', this );\n  }\n\n  // add listeners from on option\n  for ( var eventName in this.options.on ) {\n    var listener = this.options.on[ eventName ];\n    this.on( eventName, listener );\n  }\n\n  Flickity.createMethods.forEach( function( method ) {\n    this[ method ]();\n  }, this );\n\n  if ( this.options.watchCSS ) {\n    this.watchCSS();\n  } else {\n    this.activate();\n  }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n  if ( this.isActive ) {\n    return;\n  }\n  this.isActive = true;\n  this.element.classList.add('flickity-enabled');\n  if ( this.options.rightToLeft ) {\n    this.element.classList.add('flickity-rtl');\n  }\n\n  this.getSize();\n  // move initial cell elements so they can be loaded as cells\n  var cellElems = this._filterFindCellElements( this.element.children );\n  moveElements( cellElems, this.slider );\n  this.viewport.appendChild( this.slider );\n  this.element.appendChild( this.viewport );\n  // get cells from children\n  this.reloadCells();\n\n  if ( this.options.accessibility ) {\n    // allow element to focusable\n    this.element.tabIndex = 0;\n    // listen for key presses\n    this.element.addEventListener( 'keydown', this );\n  }\n\n  this.emitEvent('activate');\n  this.selectInitialIndex();\n  // flag for initial activation, for using initialIndex\n  this.isInitActivated = true;\n  // ready event. #493\n  this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n  // slider element does all the positioning\n  var slider = document.createElement('div');\n  slider.className = 'flickity-slider';\n  slider.style[ this.originSide ] = 0;\n  this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n  // collection of item elements\n  this.cells = this._makeCells( this.slider.children );\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n  var cellElems = this._filterFindCellElements( elems );\n\n  // create new Flickity for collection\n  var cells = cellElems.map( function( cellElem ) {\n    return new Cell( cellElem, this );\n  }, this );\n\n  return cells;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n  return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n  // size all cells\n  this._sizeCells( this.cells );\n  // position all cells\n  this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n  index = index || 0;\n  // also measure maxCellHeight\n  // start 0 if positioning all cells\n  this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n  var cellX = 0;\n  // get cellX\n  if ( index > 0 ) {\n    var startCell = this.cells[ index - 1 ];\n    cellX = startCell.x + startCell.size.outerWidth;\n  }\n  var len = this.cells.length;\n  for ( var i=index; i < len; i++ ) {\n    var cell = this.cells[i];\n    cell.setPosition( cellX );\n    cellX += cell.size.outerWidth;\n    this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n  }\n  // keep track of cellX for wrap-around\n  this.slideableWidth = cellX;\n  // slides\n  this.updateSlides();\n  // contain slides target\n  this._containSlides();\n  // update slidesWidth\n  this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n  cells.forEach( function( cell ) {\n    cell.getSize();\n  });\n};\n\n// --------------------------  -------------------------- //\n\nproto.updateSlides = function() {\n  this.slides = [];\n  if ( !this.cells.length ) {\n    return;\n  }\n\n  var slide = new Slide( this );\n  this.slides.push( slide );\n  var isOriginLeft = this.originSide == 'left';\n  var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n  var canCellFit = this._getCanCellFit();\n\n  this.cells.forEach( function( cell, i ) {\n    // just add cell if first cell in slide\n    if ( !slide.cells.length ) {\n      slide.addCell( cell );\n      return;\n    }\n\n    var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n      ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n    if ( canCellFit.call( this, i, slideWidth ) ) {\n      slide.addCell( cell );\n    } else {\n      // doesn't fit, new slide\n      slide.updateTarget();\n\n      slide = new Slide( this );\n      this.slides.push( slide );\n      slide.addCell( cell );\n    }\n  }, this );\n  // last slide\n  slide.updateTarget();\n  // update .selectedSlide\n  this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n  var groupCells = this.options.groupCells;\n  if ( !groupCells ) {\n    return function() {\n      return false;\n    };\n  } else if ( typeof groupCells == 'number' ) {\n    // group by number. 3 -> [0,1,2], [3,4,5], ...\n    var number = parseInt( groupCells, 10 );\n    return function( i ) {\n      return ( i % number ) !== 0;\n    };\n  }\n  // default, group by width of slide\n  // parse '75%\n  var percentMatch = typeof groupCells == 'string' &&\n    groupCells.match(/^(\\d+)%$/);\n  var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n  return function( i, slideWidth ) {\n    return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n  };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n  this.positionCells();\n  this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n  this.setCellAlign();\n  this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n  // cell align, then based on origin side\n  center: {\n    left: 0.5,\n    right: 0.5\n  },\n  left: {\n    left: 0,\n    right: 1\n  },\n  right: {\n    right: 0,\n    left: 1\n  }\n};\n\nproto.setCellAlign = function() {\n  var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n  this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n  if ( this.options.setGallerySize ) {\n    var height = this.options.adaptiveHeight && this.selectedSlide ?\n      this.selectedSlide.height : this.maxCellHeight;\n    this.viewport.style.height = height + 'px';\n  }\n};\n\nproto._getWrapShiftCells = function() {\n  // only for wrap-around\n  if ( !this.options.wrapAround ) {\n    return;\n  }\n  // unshift previous cells\n  this._unshiftCells( this.beforeShiftCells );\n  this._unshiftCells( this.afterShiftCells );\n  // get before cells\n  // initial gap\n  var gapX = this.cursorPosition;\n  var cellIndex = this.cells.length - 1;\n  this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n  // get after cells\n  // ending gap between last cell and end of gallery viewport\n  gapX = this.size.innerWidth - this.cursorPosition;\n  // start cloning at first cell, working forwards\n  this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n  // keep adding cells until the cover the initial gap\n  var cells = [];\n  while ( gapX > 0 ) {\n    var cell = this.cells[ cellIndex ];\n    if ( !cell ) {\n      break;\n    }\n    cells.push( cell );\n    cellIndex += increment;\n    gapX -= cell.size.outerWidth;\n  }\n  return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n  if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n    return;\n  }\n  var isRightToLeft = this.options.rightToLeft;\n  var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n  var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n  var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n  // content is less than gallery size\n  var isContentSmaller = contentWidth < this.size.innerWidth;\n  // bounds\n  var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n  var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n  // contain each cell target\n  this.slides.forEach( function( slide ) {\n    if ( isContentSmaller ) {\n      // all cells fit inside gallery\n      slide.target = contentWidth * this.cellAlign;\n    } else {\n      // contain to bounds\n      slide.target = Math.max( slide.target, beginBound );\n      slide.target = Math.min( slide.target, endBound );\n    }\n  }, this );\n};\n\n// -----  ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery && this.$element ) {\n    // default trigger with type if no event\n    type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n    var $event = type;\n    if ( event ) {\n      // create jQuery event\n      var jQEvent = jQuery.Event( event );\n      jQEvent.type = type;\n      $event = jQEvent;\n    }\n    this.$element.trigger( $event, args );\n  }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n  if ( !this.isActive ) {\n    return;\n  }\n  index = parseInt( index, 10 );\n  this._wrapSelect( index );\n\n  if ( this.options.wrapAround || isWrap ) {\n    index = utils.modulo( index, this.slides.length );\n  }\n  // bail if invalid index\n  if ( !this.slides[ index ] ) {\n    return;\n  }\n  var prevIndex = this.selectedIndex;\n  this.selectedIndex = index;\n  this.updateSelectedSlide();\n  if ( isInstant ) {\n    this.positionSliderAtSelected();\n  } else {\n    this.startAnimation();\n  }\n  if ( this.options.adaptiveHeight ) {\n    this.setGallerySize();\n  }\n  // events\n  this.dispatchEvent( 'select', null, [ index ] );\n  // change event if new index\n  if ( index != prevIndex ) {\n    this.dispatchEvent( 'change', null, [ index ] );\n  }\n  // old v1 event name, remove in v3\n  this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n  var len = this.slides.length;\n  var isWrapping = this.options.wrapAround && len > 1;\n  if ( !isWrapping ) {\n    return index;\n  }\n  var wrapIndex = utils.modulo( index, len );\n  // go to shortest\n  var delta = Math.abs( wrapIndex - this.selectedIndex );\n  var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n  var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n  if ( !this.isDragSelect && backWrapDelta < delta ) {\n    index += len;\n  } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n    index -= len;\n  }\n  // wrap position so slider is within normal area\n  if ( index < 0 ) {\n    this.x -= this.slideableWidth;\n  } else if ( index >= len ) {\n    this.x += this.slideableWidth;\n  }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n  var slide = this.slides[ this.selectedIndex ];\n  // selectedIndex could be outside of slides, if triggered before resize()\n  if ( !slide ) {\n    return;\n  }\n  // unselect previous selected slide\n  this.unselectSelectedSlide();\n  // update new selected slide\n  this.selectedSlide = slide;\n  slide.select();\n  this.selectedCells = slide.cells;\n  this.selectedElements = slide.getCellElements();\n  // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n  // Remove in v3?\n  this.selectedCell = slide.cells[0];\n  this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n  if ( this.selectedSlide ) {\n    this.selectedSlide.unselect();\n  }\n};\n\nproto.selectInitialIndex = function() {\n  var initialIndex = this.options.initialIndex;\n  // already activated, select previous selectedIndex\n  if ( this.isInitActivated ) {\n    this.select( this.selectedIndex, false, true );\n    return;\n  }\n  // select with selector string\n  if ( initialIndex && typeof initialIndex == 'string' ) {\n    var cell = this.queryCell( initialIndex );\n    if ( cell ) {\n      this.selectCell( initialIndex, false, true );\n      return;\n    }\n  }\n\n  var index = 0;\n  // select with number\n  if ( initialIndex && this.slides[ initialIndex ] ) {\n    index = initialIndex;\n  }\n  // select instantly\n  this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n  // get cell\n  var cell = this.queryCell( value );\n  if ( !cell ) {\n    return;\n  }\n\n  var index = this.getCellSlideIndex( cell );\n  this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n  // get index of slides that has cell\n  for ( var i=0; i < this.slides.length; i++ ) {\n    var slide = this.slides[i];\n    var index = slide.cells.indexOf( cell );\n    if ( index != -1 ) {\n      return i;\n    }\n  }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n  // loop through cells to get the one that matches\n  for ( var i=0; i < this.cells.length; i++ ) {\n    var cell = this.cells[i];\n    if ( cell.element == elem ) {\n      return cell;\n    }\n  }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n  elems = utils.makeArray( elems );\n  var cells = [];\n  elems.forEach( function( elem ) {\n    var cell = this.getCell( elem );\n    if ( cell ) {\n      cells.push( cell );\n    }\n  }, this );\n  return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n  // first check if elem is cell\n  var cell = this.getCell( elem );\n  if ( cell ) {\n    return cell;\n  }\n  // try to get parent cell elem\n  elem = utils.getParent( elem, '.flickity-slider > *' );\n  return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n  if ( !adjCount ) {\n    return this.selectedSlide.getCellElements();\n  }\n  index = index === undefined ? this.selectedIndex : index;\n\n  var len = this.slides.length;\n  if ( 1 + ( adjCount * 2 ) >= len ) {\n    return this.getCellElements();\n  }\n\n  var cellElems = [];\n  for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n    var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n    var slide = this.slides[ slideIndex ];\n    if ( slide ) {\n      cellElems = cellElems.concat( slide.getCellElements() );\n    }\n  }\n  return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n  if ( typeof selector == 'number' ) {\n    // use number as index\n    return this.cells[ selector ];\n  }\n  if ( typeof selector == 'string' ) {\n    // do not select invalid selectors from hash: #123, #/. #791\n    if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n      return;\n    }\n    // use string as selector, get element\n    selector = this.element.querySelector( selector );\n  }\n  // get cell from element\n  return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n  this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n  // HACK iOS does not allow touch events to bubble up?!\n  if ( event.type != 'touchstart' ) {\n    event.preventDefault();\n  }\n  this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n  this.watchCSS();\n  this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.getSize();\n  // wrap values\n  if ( this.options.wrapAround ) {\n    this.x = utils.modulo( this.x, this.slideableWidth );\n  }\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  this.emitEvent('resize');\n  // update selected index for group slides, instant\n  // TODO: position can be lost between groups of various numbers\n  var selectedElement = this.selectedElements && this.selectedElements[0];\n  this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n  var watchOption = this.options.watchCSS;\n  if ( !watchOption ) {\n    return;\n  }\n\n  var afterContent = getComputedStyle( this.element, ':after' ).content;\n  // activate if :after { content: 'flickity' }\n  if ( afterContent.indexOf('flickity') != -1 ) {\n    this.activate();\n  } else {\n    this.deactivate();\n  }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n  // only work if element is in focus\n  var isNotFocused = document.activeElement && document.activeElement != this.element;\n  if ( !this.options.accessibility ||isNotFocused ) {\n    return;\n  }\n\n  var handler = Flickity.keyboardHandlers[ event.keyCode ];\n  if ( handler ) {\n    handler.call( this );\n  }\n};\n\nFlickity.keyboardHandlers = {\n  // left arrow\n  37: function() {\n    var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n    this.uiChange();\n    this[ leftMethod ]();\n  },\n  // right arrow\n  39: function() {\n    var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n    this.uiChange();\n    this[ rightMethod ]();\n  },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n  // TODO remove scrollTo once focus options gets more support\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n  var prevScrollY = window.pageYOffset;\n  this.element.focus({ preventScroll: true });\n  // hack to fix scroll jump after focus, #76\n  if ( window.pageYOffset != prevScrollY ) {\n    window.scrollTo( window.pageXOffset, prevScrollY );\n  }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.element.classList.remove('flickity-enabled');\n  this.element.classList.remove('flickity-rtl');\n  this.unselectSelectedSlide();\n  // destroy cells\n  this.cells.forEach( function( cell ) {\n    cell.destroy();\n  });\n  this.element.removeChild( this.viewport );\n  // move child elements back into element\n  moveElements( this.slider.children, this.element );\n  if ( this.options.accessibility ) {\n    this.element.removeAttribute('tabIndex');\n    this.element.removeEventListener( 'keydown', this );\n  }\n  // set flags\n  this.isActive = false;\n  this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n  this.deactivate();\n  window.removeEventListener( 'resize', this );\n  this.allOff();\n  this.emitEvent('destroy');\n  if ( jQuery && this.$element ) {\n    jQuery.removeData( this.element, 'flickity' );\n  }\n  delete this.element.flickityGUID;\n  delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.flickityGUID;\n  return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n  jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n  jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n\n/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*global define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'unipointer/unipointer',[\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.Unipointer = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n}( window, function factory( window, EvEmitter ) {\n\n\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n  // default to mouse events\n  var startEvent = 'mousedown';\n  if ( window.PointerEvent ) {\n    // Pointer Events\n    startEvent = 'pointerdown';\n  } else if ( 'ontouchstart' in window ) {\n    // Touch Events. iOS Safari\n    startEvent = 'touchstart';\n  }\n  elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n  for ( var i=0; i < touches.length; i++ ) {\n    var touch = touches[i];\n    if ( touch.identifier == this.pointerIdentifier ) {\n      return touch;\n    }\n  }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n  // dismiss clicks from right or middle buttons\n  var button = event.button;\n  if ( button && ( button !== 0 && button !== 1 ) ) {\n    return;\n  }\n  this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n  this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n  this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n  // dismiss right click and other pointers\n  // button = 0 is okay, 1-4 not\n  if ( event.button || this.isPointerDown ) {\n    return;\n  }\n\n  this.isPointerDown = true;\n  // save pointer identifier to match up touch events\n  this.pointerIdentifier = pointer.pointerId !== undefined ?\n    // pointerId for pointer events, touch.indentifier for touch events\n    pointer.pointerId : pointer.identifier;\n\n  this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n  mousedown: [ 'mousemove', 'mouseup' ],\n  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n  if ( !event ) {\n    return;\n  }\n  // get proper events to match start event\n  var events = postStartEvents[ event.type ];\n  // bind events to node\n  events.forEach( function( eventName ) {\n    window.addEventListener( eventName, this );\n  }, this );\n  // save these arguments\n  this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n  // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n  if ( !this._boundPointerEvents ) {\n    return;\n  }\n  this._boundPointerEvents.forEach( function( eventName ) {\n    window.removeEventListener( eventName, this );\n  }, this );\n\n  delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n  this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerMove( event, event );\n  }\n};\n\nproto.ontouchmove = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerMove( event, touch );\n  }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n  this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n  this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n  this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerUp( event, event );\n  }\n};\n\nproto.ontouchend = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerUp( event, touch );\n  }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n  this._pointerReset();\n  this._unbindPostStartEvents();\n  this.pointerDone();\n};\n\nproto._pointerReset = function() {\n  // reset properties\n  this.isPointerDown = false;\n  delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerCancel( event, event );\n  }\n};\n\nproto.ontouchcancel = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerCancel( event, touch );\n  }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n  this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// -----  ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n  return {\n    x: pointer.pageX,\n    y: pointer.pageY\n  };\n};\n\n// -----  ----- //\n\nreturn Unipointer;\n\n}));\n\n/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'unidragger/unidragger',[\n      'unipointer/unipointer'\n    ], function( Unipointer ) {\n      return factory( window, Unipointer );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('unipointer')\n    );\n  } else {\n    // browser global\n    window.Unidragger = factory(\n      window,\n      window.Unipointer\n    );\n  }\n\n}( window, function factory( window, Unipointer ) {\n\n\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n  this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n  this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  // bind each handle\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n  var touchAction = isAdd ? this._touchActionValue : '';\n  for ( var i=0; i < this.handles.length; i++ ) {\n    var handle = this.handles[i];\n    this._bindStartEvent( handle, isAdd );\n    handle[ bindMethod ]( 'click', this );\n    // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n    if ( window.PointerEvent ) {\n      handle.style.touchAction = touchAction;\n    }\n  }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n  // track start event position\n  this.pointerDownPointer = pointer;\n\n  event.preventDefault();\n  this.pointerDownBlur();\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n  TEXTAREA: true,\n  INPUT: true,\n  SELECT: true,\n  OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n  radio: true,\n  checkbox: true,\n  button: true,\n  submit: true,\n  image: true,\n  file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n  var isCursorNode = cursorNodes[ event.target.nodeName ];\n  var isClickType = clickTypes[ event.target.type ];\n  var isOkay = !isCursorNode || isClickType;\n  if ( !isOkay ) {\n    this._pointerReset();\n  }\n  return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n  var focused = document.activeElement;\n  // do not blur body for IE10, metafizzy/flickity#117\n  var canBlur = focused && focused.blur && focused != document.body;\n  if ( canBlur ) {\n    focused.blur();\n  }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n  var moveVector = {\n    x: pointer.pageX - this.pointerDownPointer.pageX,\n    y: pointer.pageY - this.pointerDownPointer.pageY\n  };\n  // start drag if pointer has moved far enough to start drag\n  if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n    this._dragStart( event, pointer );\n  }\n  return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n  if ( this.isDragging ) {\n    this._dragEnd( event, pointer );\n  } else {\n    // pointer didn't move enough for drag to start\n    this._staticClick( event, pointer );\n  }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n  this.isDragging = true;\n  // prevent clicks\n  this.isPreventingClicks = true;\n  this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n  this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n  // do not drag if not dragging yet\n  if ( !this.isDragging ) {\n    return;\n  }\n\n  this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  event.preventDefault();\n  this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n  // set flags\n  this.isDragging = false;\n  // re-enable clicking async\n  setTimeout( function() {\n    delete this.isPreventingClicks;\n  }.bind( this ) );\n\n  this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n  if ( this.isPreventingClicks ) {\n    event.preventDefault();\n  }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n    return;\n  }\n\n  this.staticClick( event, pointer );\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( event.type != 'mouseup' ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 300ms\n    setTimeout( function() {\n      delete this.isIgnoringMouseUp;\n    }.bind( this ), 400 );\n  }\n};\n\nproto.staticClick = function( event, pointer ) {\n  this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// -----  ----- //\n\nreturn Unidragger;\n\n}));\n\n// drag\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/drag',[\n      './flickity',\n      'unidragger/unidragger',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unidragger, utils ) {\n      return factory( window, Flickity, Unidragger, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unidragger'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window,\n      window.Flickity,\n      window.Unidragger,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n  draggable: '>1',\n  dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// --------------------------  -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n  this.on( 'activate', this.onActivateDrag );\n  this.on( 'uiChange', this._uiChangeDrag );\n  this.on( 'deactivate', this.onDeactivateDrag );\n  this.on( 'cellChange', this.updateDraggable );\n  // TODO updateDraggable on resize? if groupCells & slides change\n  // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n  // #457, RubaXa/Sortable#973\n  if ( isTouch && !isTouchmoveScrollCanceled ) {\n    window.addEventListener( 'touchmove', function() {});\n    isTouchmoveScrollCanceled = true;\n  }\n};\n\nproto.onActivateDrag = function() {\n  this.handles = [ this.viewport ];\n  this.bindHandles();\n  this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n  this.unbindHandles();\n  this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n  // disable dragging if less than 2 slides. #278\n  if ( this.options.draggable == '>1' ) {\n    this.isDraggable = this.slides.length > 1;\n  } else {\n    this.isDraggable = this.options.draggable;\n  }\n  if ( this.isDraggable ) {\n    this.element.classList.add('is-draggable');\n  } else {\n    this.element.classList.remove('is-draggable');\n  }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n  this.options.draggable = true;\n  this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n  this.options.draggable = false;\n  this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n  delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    this._pointerDownDefault( event, pointer );\n    return;\n  }\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n\n  this._pointerDownPreventDefault( event );\n  this.pointerDownFocus( event );\n  // blur\n  if ( document.activeElement != this.element ) {\n    // do not blur if already focused\n    this.pointerDownBlur();\n  }\n\n  // stop if it was moving\n  this.dragX = this.x;\n  this.viewport.classList.add('is-pointer-down');\n  // track scrolling\n  this.pointerDownScroll = getScrollPosition();\n  window.addEventListener( 'scroll', this );\n\n  this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n  // track start event position\n  // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n  this.pointerDownPointer = {\n    pageX: pointer.pageX,\n    pageY: pointer.pageY,\n  };\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n  INPUT: true,\n  TEXTAREA: true,\n  SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isFocusNode ) {\n    this.focus();\n  }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n  var isTouchStart = event.type == 'touchstart';\n  var isTouchPointer = event.pointerType == 'touch';\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n    event.preventDefault();\n  }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n  delete this.isTouchScrolling;\n  this.viewport.classList.remove('is-pointer-down');\n  this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n  window.removeEventListener( 'scroll', this );\n  delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  this.dragStartPosition = this.x;\n  this.startAnimation();\n  window.removeEventListener( 'scroll', this );\n  this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  event.preventDefault();\n\n  this.previousDragX = this.dragX;\n  // reverse if right-to-left\n  var direction = this.options.rightToLeft ? -1 : 1;\n  if ( this.options.wrapAround ) {\n    // wrap around move. #589\n    moveVector.x = moveVector.x % this.slideableWidth;\n  }\n  var dragX = this.dragStartPosition + moveVector.x * direction;\n\n  if ( !this.options.wrapAround && this.slides.length ) {\n    // slow drag\n    var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n    dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n    var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n    dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n  }\n\n  this.dragX = dragX;\n\n  this.dragMoveTime = new Date();\n  this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  if ( this.options.freeScroll ) {\n    this.isFreeScrolling = true;\n  }\n  // set selectedIndex based on where flick will end up\n  var index = this.dragEndRestingSelect();\n\n  if ( this.options.freeScroll && !this.options.wrapAround ) {\n    // if free-scroll & not wrap around\n    // do not free-scroll if going outside of bounding slides\n    // so bounding slides can attract slider, and keep it in bounds\n    var restingX = this.getRestingPosition();\n    this.isFreeScrolling = -restingX > this.slides[0].target &&\n      -restingX < this.getLastSlide().target;\n  } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n    // boost selection if selected index has not changed\n    index += this.dragEndBoostSelect();\n  }\n  delete this.previousDragX;\n  // apply selection\n  // TODO refactor this, selecting here feels weird\n  // HACK, set flag so dragging stays in correct direction\n  this.isDragSelect = this.options.wrapAround;\n  this.select( index );\n  delete this.isDragSelect;\n  this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n  var restingX = this.getRestingPosition();\n  // how far away from selected slide\n  var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n  // get closet resting going up and going down\n  var positiveResting = this._getClosestResting( restingX, distance, 1 );\n  var negativeResting = this._getClosestResting( restingX, distance, -1 );\n  // use closer resting for wrap-around\n  var index = positiveResting.distance < negativeResting.distance ?\n    positiveResting.index : negativeResting.index;\n  return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n  var index = this.selectedIndex;\n  var minDistance = Infinity;\n  var condition = this.options.contain && !this.options.wrapAround ?\n    // if contain, keep going if distance is equal to minDistance\n    function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n  while ( condition( distance, minDistance ) ) {\n    // measure distance to next cell\n    index += increment;\n    minDistance = distance;\n    distance = this.getSlideDistance( -restingX, index );\n    if ( distance === null ) {\n      break;\n    }\n    distance = Math.abs( distance );\n  }\n  return {\n    distance: minDistance,\n    // selected was previous index\n    index: index - increment\n  };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n  var len = this.slides.length;\n  // wrap around if at least 2 slides\n  var isWrapAround = this.options.wrapAround && len > 1;\n  var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n  var slide = this.slides[ slideIndex ];\n  if ( !slide ) {\n    return null;\n  }\n  // add distance for wrap-around slides\n  var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n  return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n  // do not boost if no previousDragX or dragMoveTime\n  if ( this.previousDragX === undefined || !this.dragMoveTime ||\n    // or if drag was held for 100 ms\n    new Date() - this.dragMoveTime > 100 ) {\n    return 0;\n  }\n\n  var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n  var delta = this.previousDragX - this.dragX;\n  if ( distance > 0 && delta > 0 ) {\n    // boost to next if moving towards the right, and positive velocity\n    return 1;\n  } else if ( distance < 0 && delta < 0 ) {\n    // boost to previous if moving towards the left, and negative velocity\n    return -1;\n  }\n  return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n  // get clickedCell, if cell was clicked\n  var clickedCell = this.getParentCell( event.target );\n  var cellElem = clickedCell && clickedCell.element;\n  var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n  this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n  var scroll = getScrollPosition();\n  var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n  var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n  // cancel click/tap if scroll is too much\n  if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n    this._pointerDone();\n  }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  };\n}\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n\n// prev/next buttons\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/prev-next-button',[\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unipointer'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.Unipointer,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n  this.direction = direction;\n  this.parent = parent;\n  this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n  // properties\n  this.isEnabled = true;\n  this.isPrevious = this.direction == -1;\n  var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n  this.isLeft = this.direction == leftDirection;\n\n  var element = this.element = document.createElement('button');\n  element.className = 'flickity-button flickity-prev-next-button';\n  element.className += this.isPrevious ? ' previous' : ' next';\n  // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n  element.setAttribute( 'type', 'button' );\n  // init as disabled\n  this.disable();\n\n  element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n  // create arrow\n  var svg = this.createSVG();\n  element.appendChild( svg );\n  // events\n  this.parent.on( 'select', this.update.bind( this ) );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n  this.bindStartEvent( this.element );\n  this.element.addEventListener( 'click', this );\n  // add to DOM\n  this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n  // remove from DOM\n  this.parent.element.removeChild( this.element );\n  // click events\n  this.unbindStartEvent( this.element );\n  this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n  var svg = document.createElementNS( svgURI, 'svg');\n  svg.setAttribute( 'class', 'flickity-button-icon' );\n  svg.setAttribute( 'viewBox', '0 0 100 100' );\n  var path = document.createElementNS( svgURI, 'path');\n  var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n  path.setAttribute( 'd', pathMovements );\n  path.setAttribute( 'class', 'arrow' );\n  // rotate arrow\n  if ( !this.isLeft ) {\n    path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n  }\n  svg.appendChild( path );\n  return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n  // use shape as movement if string\n  if ( typeof shape == 'string' ) {\n    return shape;\n  }\n  // create movement string\n  return 'M ' + shape.x0 + ',50' +\n    ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n    ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n    ' L ' + shape.x3 + ',50 ' +\n    ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n    ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n    ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.parent.uiChange();\n  var method = this.isPrevious ? 'previous' : 'next';\n  this.parent[ method ]();\n};\n\n// -----  ----- //\n\nPrevNextButton.prototype.enable = function() {\n  if ( this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = false;\n  this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = true;\n  this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n  // index of first or last slide, if previous or next\n  var slides = this.parent.slides;\n  // enable is wrapAround and at least 2 slides\n  if ( this.parent.options.wrapAround && slides.length > 1 ) {\n    this.enable();\n    return;\n  }\n  var lastIndex = slides.length ? slides.length - 1 : 0;\n  var boundIndex = this.isPrevious ? 0 : lastIndex;\n  var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n  this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  prevNextButtons: true,\n  arrowShape: {\n    x0: 10,\n    x1: 60, y1: 50,\n    x2: 70, y2: 40,\n    x3: 30\n  }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n  if ( !this.options.prevNextButtons ) {\n    return;\n  }\n\n  this.prevButton = new PrevNextButton( -1, this );\n  this.nextButton = new PrevNextButton( 1, this );\n\n  this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n  this.prevButton.activate();\n  this.nextButton.activate();\n  this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n  this.prevButton.deactivate();\n  this.nextButton.deactivate();\n  this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// --------------------------  -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n\n// page dots\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/page-dots',[\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unipointer'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.Unipointer,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n\n\nfunction PageDots( parent ) {\n  this.parent = parent;\n  this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n  // create holder element\n  this.holder = document.createElement('ol');\n  this.holder.className = 'flickity-page-dots';\n  // create dots, array of elements\n  this.dots = [];\n  // events\n  this.handleClick = this.onClick.bind( this );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n  this.setDots();\n  this.holder.addEventListener( 'click', this.handleClick );\n  this.bindStartEvent( this.holder );\n  // add to DOM\n  this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n  this.holder.removeEventListener( 'click', this.handleClick );\n  this.unbindStartEvent( this.holder );\n  // remove from DOM\n  this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n  // get difference between number of slides and number of dots\n  var delta = this.parent.slides.length - this.dots.length;\n  if ( delta > 0 ) {\n    this.addDots( delta );\n  } else if ( delta < 0 ) {\n    this.removeDots( -delta );\n  }\n};\n\nPageDots.prototype.addDots = function( count ) {\n  var fragment = document.createDocumentFragment();\n  var newDots = [];\n  var length = this.dots.length;\n  var max = length + count;\n\n  for ( var i = length; i < max; i++ ) {\n    var dot = document.createElement('li');\n    dot.className = 'dot';\n    dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n    fragment.appendChild( dot );\n    newDots.push( dot );\n  }\n\n  this.holder.appendChild( fragment );\n  this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n  // remove from this.dots collection\n  var removeDots = this.dots.splice( this.dots.length - count, count );\n  // remove from DOM\n  removeDots.forEach( function( dot ) {\n    this.holder.removeChild( dot );\n  }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n  // remove selected class on previous\n  if ( this.selectedDot ) {\n    this.selectedDot.className = 'dot';\n    this.selectedDot.removeAttribute('aria-current');\n  }\n  // don't proceed if no dots\n  if ( !this.dots.length ) {\n    return;\n  }\n  this.selectedDot = this.dots[ this.parent.selectedIndex ];\n  this.selectedDot.className = 'dot is-selected';\n  this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n  var target = event.target;\n  // only care about dot clicks\n  if ( target.nodeName != 'LI' ) {\n    return;\n  }\n\n  this.parent.uiChange();\n  var index = this.dots.indexOf( target );\n  this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n  if ( !this.options.pageDots ) {\n    return;\n  }\n  this.pageDots = new PageDots( this );\n  // events\n  this.on( 'activate', this.activatePageDots );\n  this.on( 'select', this.updateSelectedPageDots );\n  this.on( 'cellChange', this.updatePageDots );\n  this.on( 'resize', this.updatePageDots );\n  this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n  this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n  this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n  this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n  this.pageDots.deactivate();\n};\n\n// -----  ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n\n// player & autoPlay\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/player',[\n      'ev-emitter/ev-emitter',\n      'fizzy-ui-utils/utils',\n      './flickity'\n    ], function( EvEmitter, utils, Flickity ) {\n      return factory( EvEmitter, utils, Flickity );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('ev-emitter'),\n      require('fizzy-ui-utils'),\n      require('./flickity')\n    );\n  } else {\n    // browser global\n    factory(\n      window.EvEmitter,\n      window.fizzyUIUtils,\n      window.Flickity\n    );\n  }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n  this.parent = parent;\n  this.state = 'stopped';\n  // visibility change event handler\n  this.onVisibilityChange = this.visibilityChange.bind( this );\n  this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n  if ( this.state == 'playing' ) {\n    return;\n  }\n  // do not play if page is hidden, start playing when page is visible\n  var isPageHidden = document.hidden;\n  if ( isPageHidden ) {\n    document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n    return;\n  }\n\n  this.state = 'playing';\n  // listen to visibility change\n  document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n  // start ticking\n  this.tick();\n};\n\nPlayer.prototype.tick = function() {\n  // do not tick if not playing\n  if ( this.state != 'playing' ) {\n    return;\n  }\n\n  var time = this.parent.options.autoPlay;\n  // default to 3 seconds\n  time = typeof time == 'number' ? time : 3000;\n  var _this = this;\n  // HACK: reset ticks if stopped and started within interval\n  this.clear();\n  this.timeout = setTimeout( function() {\n    _this.parent.next( true );\n    _this.tick();\n  }, time );\n};\n\nPlayer.prototype.stop = function() {\n  this.state = 'stopped';\n  this.clear();\n  // remove visibility change event\n  document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n  clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n  if ( this.state == 'playing' ) {\n    this.state = 'paused';\n    this.clear();\n  }\n};\n\nPlayer.prototype.unpause = function() {\n  // re-start play if paused\n  if ( this.state == 'paused' ) {\n    this.play();\n  }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n  var isPageHidden = document.hidden;\n  this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n  this.play();\n  document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n  this.player = new Player( this );\n\n  this.on( 'activate', this.activatePlayer );\n  this.on( 'uiChange', this.stopPlayer );\n  this.on( 'pointerDown', this.stopPlayer );\n  this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n  if ( !this.options.autoPlay ) {\n    return;\n  }\n  this.player.play();\n  this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n  this.player.play();\n};\n\nproto.stopPlayer = function() {\n  this.player.stop();\n};\n\nproto.pausePlayer = function() {\n  this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n  this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n  this.player.stop();\n  this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n  if ( !this.options.pauseAutoPlayOnHover ) {\n    return;\n  }\n  this.player.pause();\n  this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n  this.player.unpause();\n  this.element.removeEventListener( 'mouseleave', this );\n};\n\n// -----  ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n\n// add, remove cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/add-remove-cell',[\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n\n\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n  var fragment = document.createDocumentFragment();\n  cells.forEach( function( cell ) {\n    fragment.appendChild( cell.element );\n  });\n  return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n  var cells = this._makeCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  var len = this.cells.length;\n  // default to append\n  index = index === undefined ? len : index;\n  // add cells with document fragment\n  var fragment = getCellsFragment( cells );\n  // append to slider\n  var isAppend = index == len;\n  if ( isAppend ) {\n    this.slider.appendChild( fragment );\n  } else {\n    var insertCellElement = this.cells[ index ].element;\n    this.slider.insertBefore( fragment, insertCellElement );\n  }\n  // add to this.cells\n  if ( index === 0 ) {\n    // prepend, add to start\n    this.cells = cells.concat( this.cells );\n  } else if ( isAppend ) {\n    // append, add to end\n    this.cells = this.cells.concat( cells );\n  } else {\n    // insert in this.cells\n    var endCells = this.cells.splice( index, len - index );\n    this.cells = this.cells.concat( cells ).concat( endCells );\n  }\n\n  this._sizeCells( cells );\n  this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n  this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n  this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n  var cells = this.getCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n\n  var minCellIndex = this.cells.length - 1;\n  // remove cells from collection & DOM\n  cells.forEach( function( cell ) {\n    cell.remove();\n    var index = this.cells.indexOf( cell );\n    minCellIndex = Math.min( index, minCellIndex );\n    utils.removeFrom( this.cells, cell );\n  }, this );\n\n  this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n  var cell = this.getCell( elem );\n  if ( !cell ) {\n    return;\n  }\n  cell.getSize();\n\n  var index = this.cells.indexOf( cell );\n  this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n  var prevSelectedElem = this.selectedElement;\n  this._positionCells( changedCellIndex );\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  // update selectedIndex\n  // try to maintain position & select previous selected element\n  var cell = this.getCell( prevSelectedElem );\n  if ( cell ) {\n    this.selectedIndex = this.getCellSlideIndex( cell );\n  }\n  this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n  this.emitEvent( 'cellChange', [ changedCellIndex ] );\n  // position slider\n  this.select( this.selectedIndex );\n  // do not position slider after lazy load\n  if ( isPositioningSlider ) {\n    this.positionSliderAtSelected();\n  }\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n\n// lazyload\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/lazyload',[\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n  this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n  var lazyLoad = this.options.lazyLoad;\n  if ( !lazyLoad ) {\n    return;\n  }\n  // get adjacent cells, use lazyLoad option for adjacent count\n  var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n  var cellElems = this.getAdjacentCellElements( adjCount );\n  // get lazy images in those cells\n  var lazyImages = [];\n  cellElems.forEach( function( cellElem ) {\n    var lazyCellImages = getCellLazyImages( cellElem );\n    lazyImages = lazyImages.concat( lazyCellImages );\n  });\n  // load lazy images\n  lazyImages.forEach( function( img ) {\n    new LazyLoader( img, this );\n  }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n  // check if cell element is lazy image\n  if ( cellElem.nodeName == 'IMG' ) {\n    var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n    var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n    var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n    if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n      return [ cellElem ];\n    }\n  }\n  // select lazy images in cell\n  var lazySelector = 'img[data-flickity-lazyload], ' +\n    'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n  var imgs = cellElem.querySelectorAll( lazySelector );\n  return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n  this.img = img;\n  this.flickity = flickity;\n  this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  // get src & srcset\n  var src = this.img.getAttribute('data-flickity-lazyload') ||\n    this.img.getAttribute('data-flickity-lazyload-src');\n  var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n  // set src & serset\n  this.img.src = src;\n  if ( srcset ) {\n    this.img.setAttribute( 'srcset', srcset );\n  }\n  // remove attr\n  this.img.removeAttribute('data-flickity-lazyload');\n  this.img.removeAttribute('data-flickity-lazyload-src');\n  this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n  this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n  this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n  // unbind events\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n\n  var cell = this.flickity.getParentCell( this.img );\n  var cellElem = cell && cell.element;\n  this.flickity.cellSizeChange( cellElem );\n\n  this.img.classList.add( className );\n  this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -----  ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n\n/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity/js/index',[\n      './flickity',\n      './drag',\n      './prev-next-button',\n      './page-dots',\n      './player',\n      './add-remove-cell',\n      './lazyload'\n    ], factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('./flickity'),\n      require('./drag'),\n      require('./prev-next-button'),\n      require('./page-dots'),\n      require('./player'),\n      require('./add-remove-cell'),\n      require('./lazyload')\n    );\n  }\n\n})( window, function factory( Flickity ) {\n  /*jshint strict: false*/\n  return Flickity;\n});\n\n/*!\n * Flickity asNavFor v2.0.1\n * enable asNavFor for Flickity\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true*/\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'flickity-as-nav-for/as-nav-for',[\n      'flickity/js/index',\n      'fizzy-ui-utils/utils'\n    ], factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('flickity'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( Flickity, utils ) {\n\n\n\n// -------------------------- asNavFor prototype -------------------------- //\n\n// Flickity.defaults.asNavFor = null;\n\nFlickity.createMethods.push('_createAsNavFor');\n\nvar proto = Flickity.prototype;\n\nproto._createAsNavFor = function() {\n  this.on( 'activate', this.activateAsNavFor );\n  this.on( 'deactivate', this.deactivateAsNavFor );\n  this.on( 'destroy', this.destroyAsNavFor );\n\n  var asNavForOption = this.options.asNavFor;\n  if ( !asNavForOption ) {\n    return;\n  }\n  // HACK do async, give time for other flickity to be initalized\n  var _this = this;\n  setTimeout( function initNavCompanion() {\n    _this.setNavCompanion( asNavForOption );\n  });\n};\n\nproto.setNavCompanion = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var companion = Flickity.data( elem );\n  // stop if no companion or companion is self\n  if ( !companion || companion == this ) {\n    return;\n  }\n\n  this.navCompanion = companion;\n  // companion select\n  var _this = this;\n  this.onNavCompanionSelect = function() {\n    _this.navCompanionSelect();\n  };\n  companion.on( 'select', this.onNavCompanionSelect );\n  // click\n  this.on( 'staticClick', this.onNavStaticClick );\n\n  this.navCompanionSelect( true );\n};\n\nproto.navCompanionSelect = function( isInstant ) {\n  if ( !this.navCompanion ) {\n    return;\n  }\n  // select slide that matches first cell of slide\n  var selectedCell = this.navCompanion.selectedCells[0];\n  var firstIndex = this.navCompanion.cells.indexOf( selectedCell );\n  var lastIndex = firstIndex + this.navCompanion.selectedCells.length - 1;\n  var selectIndex = Math.floor( lerp( firstIndex, lastIndex,\n    this.navCompanion.cellAlign ) );\n  this.selectCell( selectIndex, false, isInstant );\n  // set nav selected class\n  this.removeNavSelectedElements();\n  // stop if companion has more cells than this one\n  if ( selectIndex >= this.cells.length ) {\n    return;\n  }\n\n  var selectedCells = this.cells.slice( firstIndex, lastIndex + 1 );\n  this.navSelectedElements = selectedCells.map( function( cell ) {\n    return cell.element;\n  });\n  this.changeNavSelectedClass('add');\n};\n\nfunction lerp( a, b, t ) {\n  return ( b - a ) * t + a;\n}\n\nproto.changeNavSelectedClass = function( method ) {\n  this.navSelectedElements.forEach( function( navElem ) {\n    navElem.classList[ method ]('is-nav-selected');\n  });\n};\n\nproto.activateAsNavFor = function() {\n  this.navCompanionSelect( true );\n};\n\nproto.removeNavSelectedElements = function() {\n  if ( !this.navSelectedElements ) {\n    return;\n  }\n  this.changeNavSelectedClass('remove');\n  delete this.navSelectedElements;\n};\n\nproto.onNavStaticClick = function( event, pointer, cellElement, cellIndex ) {\n  if ( typeof cellIndex == 'number' ) {\n    this.navCompanion.selectCell( cellIndex );\n  }\n};\n\nproto.deactivateAsNavFor = function() {\n  this.removeNavSelectedElements();\n};\n\nproto.destroyAsNavFor = function() {\n  if ( !this.navCompanion ) {\n    return;\n  }\n  this.navCompanion.off( 'select', this.onNavCompanionSelect );\n  this.off( 'staticClick', this.onNavStaticClick );\n  delete this.navCompanion;\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n\n/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n  // universal module definition\n\n  /*global define: false, module: false, require: false */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( 'imagesloaded/imagesloaded',[\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.imagesLoaded = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// --------------------------  factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n  // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n  if ( !( this instanceof ImagesLoaded ) ) {\n    return new ImagesLoaded( elem, options, onAlways );\n  }\n  // use elem as selector string\n  var queryElem = elem;\n  if ( typeof elem == 'string' ) {\n    queryElem = document.querySelectorAll( elem );\n  }\n  // bail if bad element\n  if ( !queryElem ) {\n    console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n    return;\n  }\n\n  this.elements = makeArray( queryElem );\n  this.options = extend( {}, this.options );\n  // shift arguments if no options set\n  if ( typeof options == 'function' ) {\n    onAlways = options;\n  } else {\n    extend( this.options, options );\n  }\n\n  if ( onAlways ) {\n    this.on( 'always', onAlways );\n  }\n\n  this.getImages();\n\n  if ( $ ) {\n    // add jQuery Deferred object\n    this.jqDeferred = new $.Deferred();\n  }\n\n  // HACK check async to allow time to bind listeners\n  setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n  this.images = [];\n\n  // filter & find items if we have an item selector\n  this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n  // filter siblings\n  if ( elem.nodeName == 'IMG' ) {\n    this.addImage( elem );\n  }\n  // get background image on element\n  if ( this.options.background === true ) {\n    this.addElementBackgroundImages( elem );\n  }\n\n  // find children\n  // no non-element nodes, #143\n  var nodeType = elem.nodeType;\n  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n    return;\n  }\n  var childImgs = elem.querySelectorAll('img');\n  // concat childElems to filterFound array\n  for ( var i=0; i < childImgs.length; i++ ) {\n    var img = childImgs[i];\n    this.addImage( img );\n  }\n\n  // get child background images\n  if ( typeof this.options.background == 'string' ) {\n    var children = elem.querySelectorAll( this.options.background );\n    for ( i=0; i < children.length; i++ ) {\n      var child = children[i];\n      this.addElementBackgroundImages( child );\n    }\n  }\n};\n\nvar elementNodeTypes = {\n  1: true,\n  9: true,\n  11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n    return;\n  }\n  // get url inside url(\"...\")\n  var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n  var matches = reURL.exec( style.backgroundImage );\n  while ( matches !== null ) {\n    var url = matches && matches[2];\n    if ( url ) {\n      this.addBackground( url, elem );\n    }\n    matches = reURL.exec( style.backgroundImage );\n  }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n  var loadingImage = new LoadingImage( img );\n  this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n  var background = new Background( url, elem );\n  this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n  var _this = this;\n  this.progressedCount = 0;\n  this.hasAnyBroken = false;\n  // complete if no images\n  if ( !this.images.length ) {\n    this.complete();\n    return;\n  }\n\n  function onProgress( image, elem, message ) {\n    // HACK - Chrome triggers event before object properties have changed. #83\n    setTimeout( function() {\n      _this.progress( image, elem, message );\n    });\n  }\n\n  this.images.forEach( function( loadingImage ) {\n    loadingImage.once( 'progress', onProgress );\n    loadingImage.check();\n  });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n  this.progressedCount++;\n  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n  // progress event\n  this.emitEvent( 'progress', [ this, image, elem ] );\n  if ( this.jqDeferred && this.jqDeferred.notify ) {\n    this.jqDeferred.notify( this, image );\n  }\n  // check if completed\n  if ( this.progressedCount == this.images.length ) {\n    this.complete();\n  }\n\n  if ( this.options.debug && console ) {\n    console.log( 'progress: ' + message, image, elem );\n  }\n};\n\nImagesLoaded.prototype.complete = function() {\n  var eventName = this.hasAnyBroken ? 'fail' : 'done';\n  this.isComplete = true;\n  this.emitEvent( eventName, [ this ] );\n  this.emitEvent( 'always', [ this ] );\n  if ( this.jqDeferred ) {\n    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n    this.jqDeferred[ jqMethod ]( this );\n  }\n};\n\n// --------------------------  -------------------------- //\n\nfunction LoadingImage( img ) {\n  this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n  // If complete is true and browser supports natural sizes,\n  // try to check for image status manually.\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    // report based on naturalWidth\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    return;\n  }\n\n  // If none of the checks above matched, simulate loading on detached element.\n  this.proxyImage = new Image();\n  this.proxyImage.addEventListener( 'load', this );\n  this.proxyImage.addEventListener( 'error', this );\n  // bind to image as well for Firefox. #191\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n  // check for non-zero, non-undefined naturalWidth\n  // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n  return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nLoadingImage.prototype.onload = function() {\n  this.confirm( true, 'onload' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n  this.confirm( false, 'onerror' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n  this.proxyImage.removeEventListener( 'load', this );\n  this.proxyImage.removeEventListener( 'error', this );\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n  this.url = url;\n  this.element = element;\n  this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.img.src = this.url;\n  // check if image is already complete\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    this.unbindEvents();\n  }\n};\n\nBackground.prototype.unbindEvents = function() {\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n  jQuery = jQuery || window.jQuery;\n  if ( !jQuery ) {\n    return;\n  }\n  // set local variable\n  $ = jQuery;\n  // $().imagesLoaded()\n  $.fn.imagesLoaded = function( options, callback ) {\n    var instance = new ImagesLoaded( this, options, callback );\n    return instance.jqDeferred.promise( $(this) );\n  };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// --------------------------  -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n\n/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'flickity/js/index',\n      'imagesloaded/imagesloaded'\n    ], function( Flickity, imagesLoaded ) {\n      return factory( window, Flickity, imagesLoaded );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('flickity'),\n      require('imagesloaded')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window,\n      window.Flickity,\n      window.imagesLoaded\n    );\n  }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n  this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n  if ( !this.options.imagesLoaded ) {\n    return;\n  }\n  var _this = this;\n  function onImagesLoadedProgress( instance, image ) {\n    var cell = _this.getParentCell( image.img );\n    _this.cellSizeChange( cell && cell.element );\n    if ( !_this.options.freeScroll ) {\n      _this.positionSliderAtSelected();\n    }\n  }\n  imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/dist/flickity.pkgd.js\n// module id = 12\n// module chunks = 0","/*!\n * OverlayScrollbars\n * https://github.com/KingSora/OverlayScrollbars\n *\n * Version: 1.9.1\n *\n * Copyright KingSora | Rene Haas.\n * https://github.com/KingSora\n *\n * Released under the MIT license.\n * Date: 03.08.2019\n */\n\n(function (global, factory) {\n    if (typeof define === 'function' && define.amd)\n        define(['jquery'], function(framework) { return factory(global, global.document, undefined, framework); });\n    else if (typeof module === 'object' && typeof module.exports === 'object')\n        module.exports = factory(global, global.document, undefined, require('jquery'));\n    else\n        factory(global, global.document, undefined, global.jQuery);\n}(typeof window !== 'undefined' ? window : this,\n    function(window, document, undefined, framework) {\n        'use strict';\n        var PLUGINNAME = 'OverlayScrollbars';\n        var TYPES = {\n            o : 'object',\n            f : 'function',\n            a : 'array',\n            s : 'string',\n            b : 'boolean',\n            n : 'number',\n            u : 'undefined',\n            z : 'null'\n            //d : 'date',\n            //e : 'error',\n            //r : 'regexp',\n            //y : 'symbol'\n        };\n        var LEXICON = {\n            c : 'class',\n            s : 'style',\n            i : 'id',\n            l : 'length',\n            p : 'prototype',\n            oH : 'offsetHeight',\n            cH : 'clientHeight',\n            sH : 'scrollHeight',\n            oW : 'offsetWidth',\n            cW : 'clientWidth',\n            sW : 'scrollWidth',\n            hOP : 'hasOwnProperty'\n        };\n        var VENDORS = {\n            //https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix\n            _jsCache : { },\n            _cssCache : { },\n            _cssPrefixes : ['-webkit-', '-moz-', '-o-', '-ms-'],\n            _jsPrefixes : ['WebKit', 'Moz', 'O', 'MS'],\n            _cssProperty : function(name) {\n                var cache = this._cssCache;\n\n                if(cache[name])\n                    return cache[name];\n\n                var prefixes = this._cssPrefixes;\n                var uppercasedName = this._firstLetterToUpper(name);\n                var elmStyle = document.createElement('div')[LEXICON.s];\n                var resultPossibilities;\n                var i = 0;\n                var v = 0;\n                var currVendorWithoutDashes;\n\n                for (; i < prefixes.length; i++) {\n                    currVendorWithoutDashes = prefixes[i].replace(/-/g, '');\n                    resultPossibilities = [\n                        name, //transition\n                        prefixes[i] + name, //-webkit-transition\n                        currVendorWithoutDashes + uppercasedName, //webkitTransition\n                        this._firstLetterToUpper(currVendorWithoutDashes) + uppercasedName //WebkitTransition\n                    ];\n                    for(v = 0; v < resultPossibilities[LEXICON.l]; v++) {\n                        if(elmStyle[resultPossibilities[v]] !== undefined) {\n                            cache[name] = resultPossibilities[v];\n                            return resultPossibilities[v];\n                        }\n                    }\n                }\n\n                return null;\n            },\n            _jsAPI : function(name, isInterface, fallback) {\n                var prefixes = this._jsPrefixes;\n                var cache = this._jsCache;\n                var i = 0;\n                var result = cache[name];\n                if(!result) {\n                    result = window[name];\n                    for(; i < prefixes[LEXICON.l]; i++)\n                        result = result || window[(isInterface ? prefixes[i] : prefixes[i].toLowerCase()) + this._firstLetterToUpper(name)];\n                    cache[name] = result;\n                }\n                return result || fallback;\n            },\n            _firstLetterToUpper : function(str) {\n                return str.charAt(0).toUpperCase() + str.slice(1);\n            }\n        };\n        var COMPATIBILITY = {\n            /**\n             * Gets the current window width.\n             * @returns {Number|number} The current window width in pixel.\n             */\n            wW: function() {\n                return window.innerWidth || document.documentElement[LEXICON.cW] || document.body[LEXICON.cW];\n            },\n\n            /**\n             * Gets the current window height.\n             * @returns {Number|number} The current window height in pixel.\n             */\n            wH: function() {\n                return window.innerHeight || document.documentElement[LEXICON.cH] || document.body[LEXICON.cH];\n            },\n\n            /**\n             * Gets the MutationObserver Object or undefined if not supported.\n             * @returns {MutationObserver|*|undefined} The MutationsObserver Object or undefined.\n             */\n            mO: function() {\n                return VENDORS._jsAPI('MutationObserver', true);\n            },\n\n            /**\n             * Gets the ResizeObserver Object or undefined if not supported.\n             * @returns {MutationObserver|*|undefined} The ResizeObserver Object or undefined.\n             */\n            rO: function() {\n                return VENDORS._jsAPI('ResizeObserver', true);\n            },\n\n            /**\n             * Gets the RequestAnimationFrame method or it's corresponding polyfill.\n             * @returns {*|Function} The RequestAnimationFrame method or it's corresponding polyfill.\n             */\n            rAF: function() {\n                return VENDORS._jsAPI('requestAnimationFrame', false, function (func) { return window.setTimeout(func, 1000 / 60); });\n            },\n\n            /**\n             * Gets the CancelAnimationFrame method or it's corresponding polyfill.\n             * @returns {*|Function} The CancelAnimationFrame method or it's corresponding polyfill.\n             */\n            cAF: function() {\n                return VENDORS._jsAPI('cancelAnimationFrame', false, function (id) { return window.clearTimeout(id); });\n            },\n\n            /**\n             * Gets the current time.\n             * @returns {number} The current time.\n             */\n            now: function() {\n                return Date.now && Date.now() || new Date().getTime();\n            },\n\n            /**\n             * Stops the propagation of the given event.\n             * @param event The event of which the propagation shall be stoped.\n             */\n            stpP: function(event) {\n                if(event.stopPropagation)\n                    event.stopPropagation();\n                else\n                    event.cancelBubble = true;\n            },\n\n            /**\n             * Prevents the default action of the given event.\n             * @param event The event of which the default action shall be prevented.\n             */\n            prvD: function(event) {\n                if(event.preventDefault && event.cancelable)\n                    event.preventDefault();\n                else\n                    event.returnValue = false;\n            },\n\n            /**\n             * Gets the pageX and pageY values of the given mouse event.\n             * @param event The mouse event of which the pageX and pageX shall be got.\n             * @returns {{x: number, y: number}} x = pageX value, y = pageY value.\n             */\n            page: function(event) {\n                event = event.originalEvent || event;\n\n                var strPage = 'page';\n                var strClient = 'client';\n                var strX = 'X';\n                var strY = 'Y';\n                var target = event.target || event.srcElement || document;\n                var eventDoc = target.ownerDocument || document;\n                var doc = eventDoc.documentElement;\n                var body = eventDoc.body;\n\n                //if touch event return return pageX/Y of it\n                if(event.touches !== undefined) {\n                    var touch = event.touches[0];\n                    return {\n                        x : touch[strPage + strX],\n                        y : touch[strPage + strY]\n                    }\n                }\n\n                // Calculate pageX/Y if not native supported\n                if (!event[strPage + strX] && event[strClient + strX] && event[strClient + strX] != null) {\n\n                    return {\n                        x : event[strClient + strX] +\n                        (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n                        (doc && doc.clientLeft || body && body.clientLeft || 0),\n                        y : event[strClient + strY] +\n                        (doc && doc.scrollTop || body && body.scrollTop || 0) -\n                        (doc && doc.clientTop || body && body.clientTop || 0)\n                    }\n                }\n                return {\n                    x : event[strPage + strX],\n                    y : event[strPage + strY]\n                };\n            },\n\n            /**\n             * Gets the clicked mouse button of the given mouse event.\n             * @param event The mouse event of which the clicked button shal be got.\n             * @returns {number} The number of the clicked mouse button. (0 : none | 1 : leftButton | 2 : middleButton | 3 : rightButton)\n             */\n            mBtn: function(event) {\n                var button = event.button;\n                if (!event.which && button !== undefined)\n                    return (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n                else\n                    return event.which;\n            },\n\n            /**\n             * Checks whether a item is in the given array and returns its index.\n             * @param item The item of which the position in the array shall be determined.\n             * @param arr The array.\n             * @returns {number} The zero based index of the item or -1 if the item isn't in the array.\n             */\n            inA : function(item, arr) {\n                for (var i = 0; i < arr[LEXICON.l]; i++)\n                    //Sometiems in IE a \"SCRIPT70\" Permission denied error occurs if HTML elements in a iFrame are compared\n                    try {\n                        if (arr[i] === item)\n                            return i;\n                    }\n                    catch(e) { }\n                return -1;\n            },\n\n            /**\n             * Returns true if the given value is a array.\n             * @param arr The potential array.\n             * @returns {boolean} True if the given value is a array, false otherwise.\n             */\n            isA: function(arr) {\n                var def = Array.isArray;\n                return def ? def(arr) : this.type(arr) == TYPES.a;\n            },\n\n            /**\n             * Determine the internal JavaScript [[Class]] of the given object.\n             * @param obj The object of which the type shall be determined.\n             * @returns {string} The type of the given object.\n             */\n            type: function(obj) {\n                if (obj === undefined)\n                    return obj + \"\";\n                if (obj === null)\n                    return obj + \"\";\n                return Object[LEXICON.p].toString.call(obj).replace(/^\\[object (.+)\\]$/, '$1').toLowerCase();\n            },\n\n\n            bind: function(func, thisObj) {\n                if (typeof func != TYPES.f) {\n                    throw \"Can't bind function!\";\n                    // closest thing possible to the ECMAScript 5\n                    // internal IsCallable function\n                    //throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n                }\n                var proto     = LEXICON.p;\n                var aArgs   = Array[proto].slice.call(arguments, 2);\n                var fNOP    = function() {};\n                var fBound  = function() { return func.apply(this instanceof fNOP ? this : thisObj, aArgs.concat(Array[proto].slice.call(arguments))); };\n\n                if (func[proto])\n                    fNOP[proto] = func[proto]; // Function.prototype doesn't have a prototype property\n                fBound[proto] = new fNOP();\n\n                return fBound;\n            }\n\n            /**\n             * Gets the vendor-prefixed CSS property by the given name.\n             * For example the given name is \"transform\" and you're using a old Firefox browser then the returned value would be \"-moz-transform\".\n             * If the browser doesn't need a vendor-prefix, then the returned string is the given name.\n             * If the browser doesn't support the given property name at all (not even with a vendor-prefix) the returned value is null.\n             * @param propName The unprefixed CSS property name.\n             * @returns {string|null} The vendor-prefixed CSS property or null if the browser doesn't support the given CSS property.\n\n            cssProp : function(propName) {\n                return VENDORS._cssProperty(propName);\n            }\n            */\n        };\n\n        var MATH = Math;\n        var JQUERY = framework;\n        var EASING = framework.easing;\n        var FRAMEWORK = framework;\n        var INSTANCES = (function() {\n            var _targets = [ ];\n            var _instancePropertyString = '__overlayScrollbars__';\n\n            /**\n             * Register, unregister or get a certain (or all) instances.\n             * Register: Pass the target and the instance.\n             * Unregister: Pass the target and null.\n             * Get Instance: Pass the target from which the instance shall be got.\n             * Get Targets: Pass no arguments.\n             * @param target The target to which the instance shall be registered / from which the instance shall be unregistered / the instance shall be got\n             * @param instance The instance.\n             * @returns {*|void} Returns the instance from the given target.\n             */\n            return function (target, instance) {\n                var argLen = arguments[LEXICON.l];\n                if(argLen < 1) {\n                    //return all targets\n                    return _targets;\n                }\n                else {\n                    if(instance) {\n                        //register instance\n                        target[_instancePropertyString] = instance;\n                        _targets.push(target);\n                    }\n                    else {\n                        var index = COMPATIBILITY.inA(target, _targets);\n                        if (index > -1) {\n                            if(argLen > 1) {\n                                //unregister instance\n                                delete target[_instancePropertyString];\n                                _targets.splice(index, 1);\n                            }\n                            else {\n                                //get instance from target\n                                return _targets[index][_instancePropertyString];\n                            }\n                        }\n                    }\n                }\n            }\n        })();\n        var PLUGIN = (function() {\n            var _plugin;\n            var _pluginsGlobals;\n            var _pluginsAutoUpdateLoop;\n            var _pluginsExtensions = [ ];\n            var _pluginsOptions = (function() {\n                var type = COMPATIBILITY.type;\n                var possibleTemplateTypes = [\n                    TYPES.b, //boolean\n                    TYPES.n, //number\n                    TYPES.s, //string\n                    TYPES.a, //array\n                    TYPES.o, //object\n                    TYPES.f, //function\n                    TYPES.z  //null\n                ];\n                var restrictedStringsSplit = ' ';\n                var restrictedStringsPossibilitiesSplit = ':';\n                var classNameAllowedValues = [TYPES.z, TYPES.s];\n                var numberAllowedValues = TYPES.n;\n                var booleanNullAllowedValues = [TYPES.z, TYPES.b];\n                var booleanTrueTemplate = [true, TYPES.b];\n                var booleanFalseTemplate = [false, TYPES.b];\n                var callbackTemplate = [null,  [TYPES.z, TYPES.f]];\n                var inheritedAttrsTemplate = [['style', 'class'], [TYPES.s, TYPES.a, TYPES.z]];\n                var resizeAllowedValues = 'n:none b:both h:horizontal v:vertical';\n                var overflowBehaviorAllowedValues = 'v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden';\n                var scrollbarsVisibilityAllowedValues = 'v:visible h:hidden a:auto';\n                var scrollbarsAutoHideAllowedValues = 'n:never s:scroll l:leave m:move';\n                var optionsDefaultsAndTemplate = {\n                    className: ['os-theme-dark', classNameAllowedValues],                //null || string\n                    resize: ['none', resizeAllowedValues],                               //none || both  || horizontal || vertical || n || b || h || v\n                    sizeAutoCapable: booleanTrueTemplate,                                //true || false\n                    clipAlways: booleanTrueTemplate,                                     //true || false\n                    normalizeRTL: booleanTrueTemplate,                                   //true || false\n                    paddingAbsolute: booleanFalseTemplate,                               //true || false\n                    autoUpdate: [null, booleanNullAllowedValues],                        //true || false || null\n                    autoUpdateInterval: [33, numberAllowedValues],                       //number\n                    nativeScrollbarsOverlaid: {\n                        showNativeScrollbars: booleanFalseTemplate,                      //true || false\n                        initialize: booleanTrueTemplate                                  //true || false\n                    },\n                    overflowBehavior: {\n                        x: ['scroll', overflowBehaviorAllowedValues],                    //visible-hidden  || visible-scroll || hidden || scroll || v-h || v-s || h || s\n                        y: ['scroll', overflowBehaviorAllowedValues]                     //visible-hidden  || visible-scroll || hidden || scroll || v-h || v-s || h || s\n                    },\n                    scrollbars: {\n                        visibility: ['auto', scrollbarsVisibilityAllowedValues],         //visible || hidden || auto || v || h || a\n                        autoHide: ['never', scrollbarsAutoHideAllowedValues],            //never || scroll || leave || move || n || s || l || m\n                        autoHideDelay: [800, numberAllowedValues],                       //number\n                        dragScrolling: booleanTrueTemplate,                              //true || false\n                        clickScrolling: booleanFalseTemplate,                            //true || false\n                        touchSupport: booleanTrueTemplate,                               //true || false\n                        snapHandle: booleanFalseTemplate                                 //true || false\n                    },\n                    textarea: {\n                        dynWidth: booleanFalseTemplate,                                  //true || false\n                        dynHeight: booleanFalseTemplate,                                 //true || false\n                        inheritedAttrs : inheritedAttrsTemplate                          //string || array || null\n                    },\n                    callbacks: {\n                        onInitialized: callbackTemplate,                                 //null || function\n                        onInitializationWithdrawn: callbackTemplate,                     //null || function\n                        onDestroyed: callbackTemplate,                                   //null || function\n                        onScrollStart: callbackTemplate,                                 //null || function\n                        onScroll: callbackTemplate,                                      //null || function\n                        onScrollStop: callbackTemplate,                                  //null || function\n                        onOverflowChanged: callbackTemplate,                             //null || function\n                        onOverflowAmountChanged: callbackTemplate,                       //null || function\n                        onDirectionChanged: callbackTemplate,                            //null || function\n                        onContentSizeChanged: callbackTemplate,                          //null || function\n                        onHostSizeChanged: callbackTemplate,                             //null || function\n                        onUpdated: callbackTemplate                                      //null || function\n                    }\n                };\n                var convert = function(template) {\n                    var recursive = function(obj) {\n                        var key;\n                        var val;\n                        var valType;\n                        for(key in obj) {\n                            if(!obj[LEXICON.hOP](key))\n                                continue;\n                            val = obj[key];\n                            valType = type(val);\n                            if(valType == TYPES.a)\n                                obj[key] = val[template ? 1 : 0];\n                            else if(valType == TYPES.o)\n                                obj[key] = recursive(val);\n                        }\n                        return obj;\n                    };\n                    return recursive(FRAMEWORK.extend(true, { }, optionsDefaultsAndTemplate));\n                };\n\n                return {\n                    _defaults : convert(),\n\n                    _template : convert(true),\n\n                    /**\n                     * Validates the passed object by the passed template.\n                     * @param obj The object which shall be validated.\n                     * @param template The template which defines the allowed values and types.\n                     * @param writeErrors True if errors shall be logged to the console.\n                     * @param diffObj If a object is passed then only valid differences to this object will be returned.\n                     * @returns {{}} A object which contains two objects called \"default\" and \"prepared\" which contains only the valid properties of the passed original object and discards not different values compared to the passed diffObj.\n                     */\n                    _validate : function (obj, template, writeErrors, diffObj) {\n                        var validatedOptions = { };\n                        var validatedOptionsPrepared = { };\n                        var objectCopy = FRAMEWORK.extend(true, { }, obj);\n                        var inArray = FRAMEWORK.inArray;\n                        var isEmptyObj = FRAMEWORK.isEmptyObject;\n                        var checkObjectProps = function(data, template, diffData, validatedOptions, validatedOptionsPrepared, prevPropName) {\n                            for (var prop in template) {\n                                if (template[LEXICON.hOP](prop) && data[LEXICON.hOP](prop)) {\n                                    var isValid = false;\n                                    var isDiff = false;\n                                    var templateValue = template[prop];\n                                    var templateValueType = type(templateValue);\n                                    var templateIsComplex = templateValueType == TYPES.o;\n                                    var templateTypes = type(templateValue) != TYPES.a ? [ templateValue ] : templateValue;\n                                    var dataDiffValue = diffData[prop];\n                                    var dataValue = data[prop];\n                                    var dataValueType = type(dataValue);\n                                    var propPrefix = prevPropName ? prevPropName + \".\" : \"\";\n                                    var error = \"The option \\\"\" + propPrefix + prop + \"\\\" wasn't set, because\";\n                                    var errorPossibleTypes = [ ];\n                                    var errorRestrictedStrings = [ ];\n                                    var restrictedStringValuesSplit;\n                                    var restrictedStringValuesPossibilitiesSplit;\n                                    var isRestrictedValue;\n                                    var mainPossibility;\n                                    var currType;\n                                    var i;\n                                    var v;\n                                    var j;\n\n                                    dataDiffValue = dataDiffValue === undefined ? { } : dataDiffValue;\n                                    \n                                    //if the template has a object as value, it means that the options are complex (verschachtelt)\n                                    if(templateIsComplex && dataValueType == TYPES.o) {\n                                        validatedOptions[prop] = { };\n                                        validatedOptionsPrepared[prop] = { };\n                                        checkObjectProps(dataValue, templateValue, dataDiffValue, validatedOptions[prop], validatedOptionsPrepared[prop], propPrefix + prop);\n                                        FRAMEWORK.each([ data, validatedOptions, validatedOptionsPrepared ], function(index, value) {\n                                            if(isEmptyObj(value[prop])) {\n                                                delete value[prop];\n                                            }\n                                        });\n                                    }\n                                    else if(!templateIsComplex) {\n                                        for(i = 0; i < templateTypes[LEXICON.l]; i++) {\n                                            currType = templateTypes[i];\n                                            templateValueType = type(currType);\n                                            //if currtype is string and starts with restrictedStringPrefix and end with restrictedStringSuffix\n                                            isRestrictedValue = templateValueType == TYPES.s && inArray(currType, possibleTemplateTypes) === -1;\n                                            if(isRestrictedValue) {\n                                                errorPossibleTypes.push(TYPES.s);\n\n                                                //split it into a array which contains all possible values for example: [\"y:yes\", \"n:no\", \"m:maybe\"]\n                                                restrictedStringValuesSplit = currType.split(restrictedStringsSplit);\n                                                errorRestrictedStrings = errorRestrictedStrings.concat(restrictedStringValuesSplit);\n                                                for(v = 0; v < restrictedStringValuesSplit[LEXICON.l]; v++) {\n                                                    //split the possible values into their possibiliteis for example: [\"y\", \"yes\"] -> the first is always the mainPossibility\n                                                    restrictedStringValuesPossibilitiesSplit = restrictedStringValuesSplit[v].split(restrictedStringsPossibilitiesSplit);\n                                                    mainPossibility = restrictedStringValuesPossibilitiesSplit[0];\n                                                    for(j = 0; j < restrictedStringValuesPossibilitiesSplit[LEXICON.l]; j++) {\n                                                        //if any possibility matches with the dataValue, its valid\n                                                        if(dataValue === restrictedStringValuesPossibilitiesSplit[j]) {\n                                                            isValid = true;\n                                                            break;\n                                                        }\n                                                    }\n                                                    if(isValid)\n                                                        break;\n                                                }\n                                            }\n                                            else {\n                                                errorPossibleTypes.push(currType);\n\n                                                if(dataValueType === currType) {\n                                                    isValid = true;\n                                                    break;\n                                                }\n                                            }\n                                        }\n\n                                        if(isValid) {\n                                            isDiff = dataValue !== dataDiffValue;\n                                            \n                                            if(isDiff)\n                                                validatedOptions[prop] = dataValue;\n                                            \n                                            if(isRestrictedValue ? inArray(dataDiffValue, restrictedStringValuesPossibilitiesSplit) < 0 : isDiff)\n                                                validatedOptionsPrepared[prop] = isRestrictedValue ? mainPossibility : dataValue;\n                                        }\n                                        else if(writeErrors) {\n                                            console.warn(error + \" it doesn't accept the type [ \" + dataValueType.toUpperCase() + \" ] with the value of \\\"\" + dataValue + \"\\\".\\r\\n\" +\n                                                \"Accepted types are: [ \" + errorPossibleTypes.join(\", \").toUpperCase() + \" ].\" +\n                                                (errorRestrictedStrings[length] > 0 ? \"\\r\\nValid strings are: [ \" + errorRestrictedStrings.join(\", \").split(restrictedStringsPossibilitiesSplit).join(\", \") + \" ].\" : \"\"));\n                                        }\n                                        delete data[prop];\n                                    }\n                                }\n                            }\n                        };\n                        checkObjectProps(objectCopy, template, diffObj || { }, validatedOptions, validatedOptionsPrepared);\n\n                        //add values which aren't specified in the template to the finished validated object to prevent them from being discarded\n                        /*\n                        if(keepForeignProps) {\n                            FRAMEWORK.extend(true, validatedOptions, objectCopy);\n                            FRAMEWORK.extend(true, validatedOptionsPrepared, objectCopy);\n                        }\n                        */\n                        \n                        if(!isEmptyObj(objectCopy) && writeErrors)\n                            console.warn(\"The following options are discarded due to invalidity:\\r\\n\" + window.JSON.stringify(objectCopy, null, 2));\n\n                        return {\n                            _default : validatedOptions,\n                            _prepared : validatedOptionsPrepared\n                        };\n                    }\n                }\n            }());\n\n            /**\n             * Initializes the object which contains global information about the plugin and each instance of it.\n             */\n            function initOverlayScrollbarsStatics() {\n                if(!_pluginsGlobals)\n                    _pluginsGlobals = new OverlayScrollbarsGlobals(_pluginsOptions._defaults);\n                if(!_pluginsAutoUpdateLoop)\n                    _pluginsAutoUpdateLoop = new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals);\n            }\n\n            /**\n             * The global object for the OverlayScrollbars objects. It contains resources which every OverlayScrollbars object needs. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n             * @param defaultOptions\n             * @constructor\n             */\n            function OverlayScrollbarsGlobals(defaultOptions) {\n                var _base = this;\n                var strOverflow = 'overflow';\n                var strHidden = 'hidden';\n                var strScroll = 'scroll';\n                var bodyElement = FRAMEWORK('body');\n                var scrollbarDummyElement = FRAMEWORK('<div id=\"os-dummy-scrollbar-size\"><div></div></div>');\n                var scrollbarDummyElement0 = scrollbarDummyElement[0];\n                var dummyContainerChild = FRAMEWORK(scrollbarDummyElement.children('div').eq(0));\n\n                bodyElement.append(scrollbarDummyElement);\n                scrollbarDummyElement.hide().show(); //fix IE8 bug (incorrect measuring)\n\n                var nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement0);\n                var nativeScrollbarIsOverlaid = {\n                    x: nativeScrollbarSize.x === 0,\n                    y: nativeScrollbarSize.y === 0\n                };\n\n                FRAMEWORK.extend(_base, {\n                    defaultOptions : defaultOptions,\n                    autoUpdateLoop : false,\n                    autoUpdateRecommended : !COMPATIBILITY.mO(),\n                    nativeScrollbarSize : nativeScrollbarSize,\n                    nativeScrollbarIsOverlaid : nativeScrollbarIsOverlaid,\n                    nativeScrollbarStyling : (function() {\n                        var result = false;\n                        scrollbarDummyElement.addClass('os-viewport-native-scrollbars-invisible');\n                        try {\n                            result = scrollbarDummyElement.css('scrollbar-width') === 'none' || window.getComputedStyle(scrollbarDummyElement0, '::-webkit-scrollbar').getPropertyValue('display') === 'none';\n                        } catch (ex) { }\n                        \n                        //fix opera bug: scrollbar styles will only appear if overflow value is scroll or auto during the activation of the style.\n                        //and set overflow to scroll\n                        //scrollbarDummyElement.css(strOverflow, strHidden).hide().css(strOverflow, strScroll).show();\n                        //return (scrollbarDummyElement0[LEXICON.oH] - scrollbarDummyElement0[LEXICON.cH]) === 0 && (scrollbarDummyElement0[LEXICON.oW] - scrollbarDummyElement0[LEXICON.cW]) === 0;\n                        \n                        return result;\n                    })(),\n                    overlayScrollbarDummySize : { x: 30, y: 30 },\n                    msie : (function() {\n                        var ua = window.navigator.userAgent;\n                        var strIndexOf = 'indexOf';\n                        var strSubString = 'substring';\n                        var msie = ua[strIndexOf]('MSIE ');\n                        var trident = ua[strIndexOf]('Trident/');\n                        var edge = ua[strIndexOf]('Edge/');\n                        var rv = ua[strIndexOf]('rv:');\n                        var result;\n                        var parseIntFunc = parseInt;\n\n                        // IE 10 or older => return version number\n                        if (msie > 0)\n                            result = parseIntFunc(ua[strSubString](msie + 5, ua[strIndexOf]('.', msie)), 10);\n\n                        // IE 11 => return version number\n                        else if (trident > 0)\n                            result = parseIntFunc(ua[strSubString](rv + 3, ua[strIndexOf]('.', rv)), 10);\n\n                        // Edge (IE 12+) => return version number\n                        else if (edge > 0)\n                            result = parseIntFunc(ua[strSubString](edge + 5, ua[strIndexOf]('.', edge)), 10);\n\n                        // other browser\n                        return result;\n                    })(),\n                    cssCalc : (function() {\n                        var dummyStyle = document.createElement('div')[LEXICON.s];\n                        var strCalc = 'calc';\n                        var i = -1;\n                        var prop;\n\n                        for(; i < VENDORS._cssPrefixes[LEXICON.l]; i++) {\n                            prop = i < 0 ? strCalc : VENDORS._cssPrefixes[i] + strCalc;\n                            dummyStyle.cssText = 'width:' + prop + '(1px);';\n                            if (dummyStyle[LEXICON.l])\n                                return prop;\n                        }\n                        return null;\n                    })(),\n                    restrictedMeasuring : (function() {\n                        //https://bugzilla.mozilla.org/show_bug.cgi?id=1439305\n                        scrollbarDummyElement.css(strOverflow, strHidden);\n                        var scrollSize = {\n                            w : scrollbarDummyElement0[LEXICON.sW],\n                            h : scrollbarDummyElement0[LEXICON.sH]\n                        };\n                        scrollbarDummyElement.css(strOverflow, 'visible');\n                        var scrollSize2 = {\n                            w : scrollbarDummyElement0[LEXICON.sW],\n                            h : scrollbarDummyElement0[LEXICON.sH]\n                        };\n                        return (scrollSize.w - scrollSize2.w) !== 0 || (scrollSize.h - scrollSize2.h) !== 0;\n                    })(),\n                    rtlScrollBehavior : (function() {\n                        scrollbarDummyElement.css({ 'overflow-y' : strHidden, 'overflow-x' : strScroll, 'direction' : 'rtl' }).scrollLeft(0);\n                        var dummyContainerOffset = scrollbarDummyElement.offset();\n                        var dummyContainerChildOffset = dummyContainerChild.offset();\n                        scrollbarDummyElement.scrollLeft(999);\n                        var dummyContainerScrollOffsetAfterScroll = dummyContainerChild.offset();\n                        return {\n                            //origin direction = determines if the zero scroll position is on the left or right side\n                            //'i' means 'invert' (i === true means that the axis must be inverted to be correct)\n                            //true = on the left side\n                            //false = on the right side\n                            i : dummyContainerOffset.left === dummyContainerChildOffset.left,\n                            //negative = determines if the maximum scroll is positive or negative\n                            //'n' means 'negate' (n === true means that the axis must be negated to be correct)\n                            //true = negative\n                            //false = positive\n                            n : dummyContainerChildOffset.left - dummyContainerScrollOffsetAfterScroll.left === 0\n                        };\n                    })(),\n                    supportTransform : VENDORS._cssProperty('transform') !== null,\n                    supportTransition : VENDORS._cssProperty('transition') !== null,\n                    supportPassiveEvents : (function() {\n                        var supportsPassive = false;\n                        try {\n                            window.addEventListener('test', null, Object.defineProperty({ }, 'passive', {\n                                get: function() {\n                                    supportsPassive = true;\n                                }\n                            }));\n                        } catch (e) { }\n                        return supportsPassive;\n                    })(),\n                    supportResizeObserver : !!COMPATIBILITY.rO(),\n                    supportMutationObserver : !!COMPATIBILITY.mO()\n                });\n\n                scrollbarDummyElement.removeAttr(LEXICON.s).remove();\n\n                //Catch zoom event:\n                (function () {\n                    if(nativeScrollbarIsOverlaid.x && nativeScrollbarIsOverlaid.y)\n                        return;\n\n                    var abs = MATH.abs;\n                    var windowWidth = COMPATIBILITY.wW();\n                    var windowHeight = COMPATIBILITY.wH();\n                    var windowDpr = getWindowDPR();\n                    var onResize = function() {\n                        if(INSTANCES().length > 0) {\n                            var newW = COMPATIBILITY.wW();\n                            var newH = COMPATIBILITY.wH();\n                            var deltaW = newW - windowWidth;\n                            var deltaH = newH - windowHeight;\n\n                            if (deltaW === 0 && deltaH === 0)\n                                return;\n\n                            var deltaWRatio = MATH.round(newW / (windowWidth / 100.0));\n                            var deltaHRatio = MATH.round(newH / (windowHeight / 100.0));\n                            var absDeltaW = abs(deltaW);\n                            var absDeltaH = abs(deltaH);\n                            var absDeltaWRatio = abs(deltaWRatio);\n                            var absDeltaHRatio = abs(deltaHRatio);\n                            var newDPR = getWindowDPR();\n\n                            var deltaIsBigger = absDeltaW > 2 && absDeltaH > 2;\n                            var difference = !differenceIsBiggerThanOne(absDeltaWRatio, absDeltaHRatio);\n                            var dprChanged = newDPR !== windowDpr && windowDpr > 0;\n                            var isZoom = deltaIsBigger && difference && dprChanged;\n                            var oldScrollbarSize = _base.nativeScrollbarSize;\n                            var newScrollbarSize;\n\n                            if (isZoom) {\n                                bodyElement.append(scrollbarDummyElement);\n                                newScrollbarSize = _base.nativeScrollbarSize = calcNativeScrollbarSize(scrollbarDummyElement[0]);\n                                scrollbarDummyElement.remove();\n                                if(oldScrollbarSize.x !== newScrollbarSize.x || oldScrollbarSize.y !== newScrollbarSize.y) {\n                                    FRAMEWORK.each(INSTANCES(), function () {\n                                        if(INSTANCES(this))\n                                            INSTANCES(this).update('zoom');\n                                    });\n                                }\n                            }\n\n                            windowWidth = newW;\n                            windowHeight = newH;\n                            windowDpr = newDPR;\n                        }\n                    };\n\n                    function differenceIsBiggerThanOne(valOne, valTwo) {\n                        var absValOne = abs(valOne);\n                        var absValTwo = abs(valTwo);\n                        return !(absValOne === absValTwo || absValOne + 1 === absValTwo || absValOne - 1 === absValTwo);\n                    }\n\n                    function getWindowDPR() {\n                        var dDPI = window.screen.deviceXDPI || 0;\n                        var sDPI = window.screen.logicalXDPI || 1;\n                        return window.devicePixelRatio || (dDPI / sDPI);\n                    }\n\n                    FRAMEWORK(window).on('resize', onResize);\n                })();\n\n                function calcNativeScrollbarSize(measureElement) {\n                    return {\n                        x: measureElement[LEXICON.oH] - measureElement[LEXICON.cH],\n                        y: measureElement[LEXICON.oW] - measureElement[LEXICON.cW]\n                    };\n                }\n            }\n\n            /**\n             * The object which manages the auto update loop for all OverlayScrollbars objects. This object is initialized only once: if the first OverlayScrollbars object gets initialized.\n             * @constructor\n             */\n            function OverlayScrollbarsAutoUpdateLoop(globals) {\n                var _base = this;\n                var _inArray = FRAMEWORK.inArray;\n                var _getNow = COMPATIBILITY.now;\n                var _strAutoUpdate = 'autoUpdate';\n                var _strAutoUpdateInterval = _strAutoUpdate + 'Interval';\n                var _strLength = LEXICON.l;\n                var _loopingInstances = [ ];\n                var _loopingInstancesIntervalCache = [ ];\n                var _loopIsActive = false;\n                var _loopIntervalDefault = 33;\n                var _loopInterval = _loopIntervalDefault;\n                var _loopTimeOld = _getNow();\n                var _loopID;\n                \n\n                /**\n                 * The auto update loop which will run every 50 milliseconds or less if the update interval of a instance is lower than 50 milliseconds.\n                 */\n                var loop = function() {\n                    if(_loopingInstances[_strLength] > 0 && _loopIsActive) {\n                        _loopID = COMPATIBILITY.rAF()(function () {\n                            loop();\n                        });\n                        var timeNew = _getNow();\n                        var timeDelta = timeNew - _loopTimeOld;\n                        var lowestInterval;\n                        var instance;\n                        var instanceOptions;\n                        var instanceAutoUpdateAllowed;\n                        var instanceAutoUpdateInterval;\n                        var now;\n\n                        if (timeDelta > _loopInterval) {\n                            _loopTimeOld = timeNew - (timeDelta % _loopInterval);\n                            lowestInterval = _loopIntervalDefault;\n                            for(var i = 0; i < _loopingInstances[_strLength]; i++) {\n                                instance = _loopingInstances[i];\n                                if (instance !== undefined) {\n                                    instanceOptions = instance.options();\n                                    instanceAutoUpdateAllowed = instanceOptions[_strAutoUpdate];\n                                    instanceAutoUpdateInterval = MATH.max(1, instanceOptions[_strAutoUpdateInterval]);\n                                    now = _getNow();\n\n                                    if ((instanceAutoUpdateAllowed === true || instanceAutoUpdateAllowed === null) && (now - _loopingInstancesIntervalCache[i]) > instanceAutoUpdateInterval) {\n                                        instance.update('auto');\n                                        _loopingInstancesIntervalCache[i] = new Date(now += instanceAutoUpdateInterval);\n                                    }\n\n                                    lowestInterval = MATH.max(1, MATH.min(lowestInterval, instanceAutoUpdateInterval));\n                                }\n                            }\n                            _loopInterval = lowestInterval;\n                        }\n                    } else {\n                        _loopInterval = _loopIntervalDefault;\n                    }\n                };\n\n                /**\n                 * Add OverlayScrollbars instance to the auto update loop. Only successful if the instance isn't already added.\n                 * @param instance The instance which shall be updated in a loop automatically.\n                 */\n                _base.add = function(instance) {\n                    if(_inArray(instance, _loopingInstances) === -1) {\n                        _loopingInstances.push(instance);\n                        _loopingInstancesIntervalCache.push(_getNow());\n                        if (_loopingInstances[_strLength] > 0 && !_loopIsActive) {\n                            _loopIsActive = true;\n                            globals.autoUpdateLoop = _loopIsActive;\n                            loop();\n                        }\n                    }\n                };\n\n                /**\n                 * Remove OverlayScrollbars instance from the auto update loop. Only successful if the instance was added before.\n                 * @param instance The instance which shall be updated in a loop automatically.\n                 */\n                _base.remove = function(instance) {\n                    var index = _inArray(instance, _loopingInstances);\n                    if(index > -1) {\n                        //remove from loopingInstances list\n                        _loopingInstancesIntervalCache.splice(index, 1);\n                        _loopingInstances.splice(index, 1);\n\n                        //correct update loop behavior\n                        if (_loopingInstances[_strLength] === 0 && _loopIsActive) {\n                            _loopIsActive = false;\n                            globals.autoUpdateLoop = _loopIsActive;\n                            if(_loopID !== undefined) {\n                                COMPATIBILITY.cAF()(_loopID);\n                                _loopID = -1;\n                            }\n                        }\n                    }\n                };\n            }\n\n            /**\n             * A object which manages the scrollbars visibility of the target element.\n             * @param pluginTargetElement The element from which the scrollbars shall be hidden.\n             * @param options The custom options.\n             * @param extensions The custom extensions.\n             * @param globals\n             * @param autoUpdateLoop\n             * @returns {*}\n             * @constructor\n             */\n            function OverlayScrollbarsInstance(pluginTargetElement, options, extensions, globals, autoUpdateLoop) {\n                //shortcuts\n                var type = COMPATIBILITY.type;\n                var inArray = FRAMEWORK.inArray;\n                var each = FRAMEWORK.each;\n                \n                //make correct instanceof\n                var _base = new _plugin();\n                var _frameworkProto = FRAMEWORK[LEXICON.p];\n                \n                //if passed element is no HTML element: skip and return\n                if(!isHTMLElement(pluginTargetElement))\n                    return;\n                \n                //if passed element is already initialized: set passed options if there are any and return its instance\n                if(INSTANCES(pluginTargetElement)) {\n                    var inst = INSTANCES(pluginTargetElement);\n                    inst.options(options);\n                    return inst;\n                }\n\n                //globals:\n                var _nativeScrollbarIsOverlaid;\n                var _overlayScrollbarDummySize;\n                var _rtlScrollBehavior;\n                var _autoUpdateRecommended;\n                var _msieVersion;\n                var _nativeScrollbarStyling;\n                var _cssCalc;\n                var _nativeScrollbarSize;\n                var _supportTransition;\n                var _supportTransform;\n                var _supportPassiveEvents;\n                var _supportResizeObserver;\n                var _supportMutationObserver;\n                var _restrictedMeasuring;\n\n                //general readonly:\n                var _initialized;\n                var _destroyed;\n                var _isTextarea;\n                var _isBody;\n                var _documentMixed;\n                var _isTextareaHostGenerated;\n\n                //general:\n                var _isBorderBox;\n                var _sizeAutoObserverAdded;\n                var _paddingX;\n                var _paddingY;\n                var _borderX;\n                var _borderY;\n                var _marginX;\n                var _marginY;\n                var _isRTL;\n                var _sleeping;\n                var _contentBorderSize = { };\n                var _scrollHorizontalInfo = { };\n                var _scrollVerticalInfo = { };\n                var _viewportSize = { };\n                var _nativeScrollbarMinSize = { };\n\n                //naming:\n                var _strMinusHidden = '-hidden';\n                var _strMarginMinus = 'margin-';\n                var _strPaddingMinus = 'padding-';\n                var _strBorderMinus = 'border-';\n                var _strTop = 'top';\n                var _strRight = 'right';\n                var _strBottom = 'bottom';\n                var _strLeft = 'left';\n                var _strMinMinus = 'min-';\n                var _strMaxMinus = 'max-';\n                var _strWidth = 'width';\n                var _strHeight = 'height';\n                var _strFloat = 'float';\n                var _strEmpty = '';\n                var _strAuto = 'auto';\n                var _strSync = 'sync';\n                var _strScroll = 'scroll';\n                var _strHundredPercent = '100%';\n                var _strX = 'x';\n                var _strY = 'y';\n                var _strDot = '.';\n                var _strSpace = ' ';\n                var _strScrollbar = 'scrollbar';\n                var _strMinusHorizontal = '-horizontal';\n                var _strMinusVertical = '-vertical';\n                var _strScrollLeft = _strScroll + 'Left';\n                var _strScrollTop = _strScroll + 'Top';\n                var _strMouseTouchDownEvent = 'mousedown touchstart';\n                var _strMouseTouchUpEvent = 'mouseup touchend touchcancel';\n                var _strMouseTouchMoveEvent = 'mousemove touchmove';\n                var _strMouseTouchEnter = 'mouseenter';\n                var _strMouseTouchLeave = 'mouseleave';\n                var _strKeyDownEvent = 'keydown';\n                var _strKeyUpEvent = 'keyup';\n                var _strSelectStartEvent = 'selectstart';\n                var _strTransitionEndEvent = 'transitionend webkitTransitionEnd oTransitionEnd';\n                var _strResizeObserverProperty = '__overlayScrollbarsRO__';\n\n                //class names:\n                var _cassNamesPrefix = 'os-';\n                var _classNameHTMLElement = _cassNamesPrefix + 'html';\n                var _classNameHostElement = _cassNamesPrefix + 'host';\n                var _classNameHostTextareaElement = _classNameHostElement + '-textarea';\n                var _classNameHostScrollbarHorizontalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusHorizontal + _strMinusHidden;\n                var _classNameHostScrollbarVerticalHidden = _classNameHostElement + '-' + _strScrollbar + _strMinusVertical + _strMinusHidden;\n                var _classNameHostTransition = _classNameHostElement + '-transition';\n                var _classNameHostRTL = _classNameHostElement + '-rtl';\n                var _classNameHostResizeDisabled = _classNameHostElement + '-resize-disabled';\n                var _classNameHostScrolling = _classNameHostElement + '-scrolling';\n                var _classNameHostOverflow = _classNameHostElement + '-overflow';\n                var _classNameHostOverflowX = _classNameHostOverflow + '-x';\n                var _classNameHostOverflowY = _classNameHostOverflow + '-y';\n                var _classNameTextareaElement = _cassNamesPrefix + 'textarea';\n                var _classNameTextareaCoverElement = _classNameTextareaElement + '-cover';\n                var _classNamePaddingElement = _cassNamesPrefix + 'padding';\n                var _classNameViewportElement = _cassNamesPrefix + 'viewport';\n                var _classNameViewportNativeScrollbarsInvisible = _classNameViewportElement + '-native-scrollbars-invisible';\n                var _classNameViewportNativeScrollbarsOverlaid = _classNameViewportElement + '-native-scrollbars-overlaid';\n                var _classNameContentElement = _cassNamesPrefix + 'content';\n                var _classNameContentArrangeElement = _cassNamesPrefix + 'content-arrange';\n                var _classNameContentGlueElement = _cassNamesPrefix + 'content-glue';\n                var _classNameSizeAutoObserverElement = _cassNamesPrefix + 'size-auto-observer';\n                var _classNameResizeObserverElement = _cassNamesPrefix + 'resize-observer';\n                var _classNameResizeObserverItemElement = _cassNamesPrefix + 'resize-observer-item';\n                var _classNameResizeObserverItemFinalElement = _classNameResizeObserverItemElement + '-final';\n                var _classNameTextInherit = _cassNamesPrefix + 'text-inherit';\n                var _classNameScrollbar = _cassNamesPrefix + _strScrollbar;\n                var _classNameScrollbarTrack = _classNameScrollbar + '-track';\n                var _classNameScrollbarTrackOff = _classNameScrollbarTrack + '-off';\n                var _classNameScrollbarHandle = _classNameScrollbar + '-handle';\n                var _classNameScrollbarHandleOff = _classNameScrollbarHandle + '-off';\n                var _classNameScrollbarUnusable = _classNameScrollbar + '-unusable';\n                var _classNameScrollbarAutoHidden = _classNameScrollbar + '-' + _strAuto + _strMinusHidden;\n                var _classNameScrollbarCorner = _classNameScrollbar + '-corner';\n                var _classNameScrollbarCornerResize = _classNameScrollbarCorner + '-resize';\n                var _classNameScrollbarCornerResizeB = _classNameScrollbarCornerResize + '-both';\n                var _classNameScrollbarCornerResizeH = _classNameScrollbarCornerResize + _strMinusHorizontal;\n                var _classNameScrollbarCornerResizeV = _classNameScrollbarCornerResize + _strMinusVertical;\n                var _classNameScrollbarHorizontal = _classNameScrollbar + _strMinusHorizontal;\n                var _classNameScrollbarVertical = _classNameScrollbar + _strMinusVertical;\n                var _classNameDragging = _cassNamesPrefix + 'dragging';\n                var _classNameThemeNone = _cassNamesPrefix + 'theme-none';\n\n                //callbacks:\n                var _callbacksInitQeueue = [ ];\n\n                //options:\n                var _defaultOptions;\n                var _currentOptions;\n                var _currentPreparedOptions;\n\n                //extensions:\n                var _extensions = { };\n                var _extensionsPrivateMethods = 'added removed on contract';\n\n                //update\n                var _lastUpdateTime;\n                var _swallowedUpdateHints = { };\n                var _swallowedUpdateTimeout;\n                var _swallowUpdateLag = 42;\n                var _imgs = [ ];\n\n                //DOM elements:\n                var _windowElement;\n                var _documentElement;\n                var _htmlElement;\n                var _bodyElement;\n                var _targetElement;                     //the target element of this OverlayScrollbars object\n                var _hostElement;                       //the host element of this OverlayScrollbars object -> may be the same as targetElement\n                var _sizeAutoObserverElement;           //observes size auto changes\n                var _sizeObserverElement;               //observes size and padding changes\n                var _paddingElement;                    //manages the padding\n                var _viewportElement;                   //is the viewport of our scrollbar model\n                var _contentElement;                    //the element which holds the content\n                var _contentArrangeElement;             //is needed for correct sizing of the content element (only if native scrollbars are overlays)\n                var _contentGlueElement;                //has always the size of the content element\n                var _textareaCoverElement;              //only applied if target is a textarea element. Used for correct size calculation and for prevention of uncontrolled scrolling\n                var _scrollbarCornerElement;\n                var _scrollbarHorizontalElement;\n                var _scrollbarHorizontalTrackElement;\n                var _scrollbarHorizontalHandleElement;\n                var _scrollbarVerticalElement;\n                var _scrollbarVerticalTrackElement;\n                var _scrollbarVerticalHandleElement;\n                var _windowElementNative;\n                var _documentElementNative;\n                var _targetElementNative;\n                var _hostElementNative;\n                var _sizeAutoObserverElementNative;\n                var _sizeObserverElementNative;\n                var _paddingElementNative;\n                var _viewportElementNative;\n                var _contentElementNative;\n\n                //Cache:\n                var _hostSizeCache;\n                var _contentScrollSizeCache;\n                var _arrangeContentSizeCache;\n                var _hasOverflowCache;\n                var _hideOverflowCache;\n                var _widthAutoCache;\n                var _heightAutoCache;\n                var _cssMaxValueCache;\n                var _cssBoxSizingCache;\n                var _cssPaddingCache;\n                var _cssBorderCache;\n                var _cssMarginCache;\n                var _cssDirectionCache;\n                var _cssDirectionDetectedCache;\n                var _paddingAbsoluteCache;\n                var _clipAlwaysCache;\n                var _contentGlueSizeCache;\n                var _overflowBehaviorCache;\n                var _overflowAmountCache;\n                var _ignoreOverlayScrollbarHidingCache;\n                var _autoUpdateCache;\n                var _sizeAutoCapableCache;\n                var _contentElementScrollSizeChangeDetectedCache;\n                var _hostElementSizeChangeDetectedCache;\n                var _scrollbarsVisibilityCache;\n                var _scrollbarsAutoHideCache;\n                var _scrollbarsClickScrollingCache;\n                var _scrollbarsDragScrollingCache;\n                var _resizeCache;\n                var _normalizeRTLCache;\n                var _classNameCache;\n                var _oldClassName;\n                var _textareaAutoWrappingCache;\n                var _textareaInfoCache;\n                var _textareaSizeCache;\n                var _textareaDynHeightCache;\n                var _textareaDynWidthCache;\n                var _bodyMinSizeCache;\n                var _viewportScrollSizeCache;\n                var _displayIsHiddenCache;\n                var _updateAutoCache = { };\n\n                //MutationObserver:\n                var _mutationObserverHost;\n                var _mutationObserverContent;\n                var _mutationObserverHostCallback;\n                var _mutationObserverContentCallback;\n                var _mutationObserversConnected;\n                var _mutationObserverAttrsTextarea = ['wrap', 'cols', 'rows'];\n                var _mutationObserverAttrsHost = [LEXICON.i, LEXICON.c, LEXICON.s, 'open'];\n\n                //textarea:\n                var _textareaEvents;\n                var _textareaHasFocus;\n\n                //scrollbars:\n                var _scrollbarsAutoHideTimeoutId;\n                var _scrollbarsAutoHideMoveTimeoutId;\n                var _scrollbarsAutoHideDelay;\n                var _scrollbarsAutoHideNever;\n                var _scrollbarsAutoHideScroll;\n                var _scrollbarsAutoHideMove;\n                var _scrollbarsAutoHideLeave;\n                var _scrollbarsHandleHovered;\n                var _scrollbarsHandlesDefineScrollPos;\n\n                //resize\n                var _resizeReconnectMutationObserver;\n                var _resizeNone;\n                var _resizeBoth;\n                var _resizeHorizontal;\n                var _resizeVertical;\n                var _resizeOnMouseTouchDown;\n                \n                \n                //==== Passive Event Listener ====//\n\n                /**\n                 * Adds or removes a passive event listener from the given element.\n                 * @param element The element to which the event listener shall be applied or removed.\n                 * @param eventNames The name(s) of the events.\n                 * @param listener The method which shall be called.\n                 * @param remove True if the handler shall be removed, false or undefined if the handler shall be added.\n                 */\n                function setupPassiveEventListener(element, eventNames, listener, remove, notPassive) {\n                    var method = remove ? 'removeEventListener' : 'addEventListener';\n                    var events = eventNames.split(_strSpace);\n                    var i = 0;\n\n                    for (; i < events[LEXICON.l]; i++) {\n                        element[0][method](events[i], listener, { passive: !notPassive });\n                    }\n                }\n\n\n                //==== Resize Observer ====//\n\n                /**\n                 * Adds or removes a resize observer from the given element.\n                 * @param targetElement The element to which the resize observer shall be added or removed.\n                 * @param onElementResizedCallback The callback which is fired every time the resize observer registers a size change or false / undefined if the resizeObserver shall be removed.\n                 */\n                function setupResizeObserver(targetElement, onElementResizedCallback) {\n                    if(targetElement) {\n                        //add resize observer:\n                        if(onElementResizedCallback) {\n                            var constMaximum = 3333333;\n                            var resizeObserver = COMPATIBILITY.rO();\n                            var strAnimationStartEvent = 'animationstart mozAnimationStart webkitAnimationStart MSAnimationStart';\n                            var strChildNodes = 'childNodes';\n                            var callback = function () {\n                                targetElement[_strScrollTop](constMaximum)[_strScrollLeft](_isRTL ? _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum : constMaximum);\n                                onElementResizedCallback();\n                            };\n                            if (_supportResizeObserver) {\n                                var element = targetElement.append(generateDiv(_classNameResizeObserverElement + ' observed')).contents()[0];\n                                var observer = element[_strResizeObserverProperty] = new resizeObserver(callback);\n                                observer.observe(element);\n                            }\n                            else {\n                                if (_msieVersion > 9 || !_autoUpdateRecommended) {\n                                    targetElement.prepend(\n                                        generateDiv(_classNameResizeObserverElement,\n                                            generateDiv({ className : _classNameResizeObserverItemElement, dir : \"ltr\" },\n                                                generateDiv(_classNameResizeObserverItemElement,\n                                                    generateDiv(_classNameResizeObserverItemFinalElement)\n                                                ) +\n                                                generateDiv(_classNameResizeObserverItemElement,\n                                                    generateDiv({ className : _classNameResizeObserverItemFinalElement, style : 'width: 200%; height: 200%' })\n                                                )\n                                            )\n                                        )\n                                    );\n\n                                    var observerElement = targetElement[0][strChildNodes][0][strChildNodes][0];\n                                    var shrinkElement = FRAMEWORK(observerElement[strChildNodes][1]);\n                                    var expandElement = FRAMEWORK(observerElement[strChildNodes][0]);\n                                    var expandElementChild = FRAMEWORK(expandElement[0][strChildNodes][0]);\n                                    var widthCache = observerElement[LEXICON.oW];\n                                    var heightCache = observerElement[LEXICON.oH];\n                                    var isDirty;\n                                    var rAFId;\n                                    var currWidth;\n                                    var currHeight;\n                                    var factor = 2;\n                                    var nativeScrollbarSize = globals.nativeScrollbarSize; //care don't make changes to this object!!!\n                                    var reset = function () {\n                                        /*\n                                         var sizeResetWidth = observerElement[LEXICON.oW] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n                                         var sizeResetHeight = observerElement[LEXICON.oH] + nativeScrollbarSize.x * factor + nativeScrollbarSize.y * factor + _overlayScrollbarDummySize.x + _overlayScrollbarDummySize.y;\n                                         var expandChildCSS = {};\n                                         expandChildCSS[_strWidth] = sizeResetWidth;\n                                         expandChildCSS[_strHeight] = sizeResetHeight;\n                                         expandElementChild.css(expandChildCSS);\n\n\n                                         expandElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n                                         shrinkElement[_strScrollLeft](sizeResetWidth)[_strScrollTop](sizeResetHeight);\n                                         */\n                                        expandElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);\n                                        shrinkElement[_strScrollLeft](constMaximum)[_strScrollTop](constMaximum);\n                                    };\n                                    var onResized = function () {\n                                        rAFId = 0;\n                                        if (!isDirty)\n                                            return;\n\n                                        widthCache = currWidth;\n                                        heightCache = currHeight;\n                                        callback();\n                                    };\n                                    var onScroll = function (event) {\n                                        currWidth = observerElement[LEXICON.oW];\n                                        currHeight = observerElement[LEXICON.oH];\n                                        isDirty = currWidth != widthCache || currHeight != heightCache;\n\n                                        if (event && isDirty && !rAFId) {\n                                            COMPATIBILITY.cAF()(rAFId);\n                                            rAFId = COMPATIBILITY.rAF()(onResized);\n                                        }\n                                        else if(!event)\n                                            onResized();\n\n                                        reset();\n                                        if (event) {\n                                            COMPATIBILITY.prvD(event);\n                                            COMPATIBILITY.stpP(event);\n                                        }\n                                        return false;\n                                    };\n                                    var expandChildCSS = {};\n                                    var observerElementCSS = {};\n\n                                    setTopRightBottomLeft(observerElementCSS, _strEmpty, [\n                                        -((nativeScrollbarSize.y + 1) * factor),\n                                        nativeScrollbarSize.x * -factor,\n                                        nativeScrollbarSize.y * -factor,\n                                        -((nativeScrollbarSize.x + 1) * factor)\n                                    ]);\n\n                                    FRAMEWORK(observerElement).css(observerElementCSS);\n                                    expandElement.on(_strScroll, onScroll);\n                                    shrinkElement.on(_strScroll, onScroll);\n                                    targetElement.on(strAnimationStartEvent, function () {\n                                        onScroll(false);\n                                    });\n                                    //lets assume that the divs will never be that large and a constant value is enough\n                                    expandChildCSS[_strWidth] = constMaximum;\n                                    expandChildCSS[_strHeight] = constMaximum;\n                                    expandElementChild.css(expandChildCSS);\n\n                                    reset();\n                                }\n                                else {\n                                    var attachEvent = _documentElementNative.attachEvent;\n                                    var isIE = _msieVersion !== undefined;\n                                    if (attachEvent) {\n                                        targetElement.prepend(generateDiv(_classNameResizeObserverElement));\n                                        findFirst(targetElement, _strDot + _classNameResizeObserverElement)[0].attachEvent('onresize', callback);\n                                    }\n                                    else {\n                                        var obj = _documentElementNative.createElement(TYPES.o);\n                                        obj.setAttribute('tabindex', '-1');\n                                        obj.setAttribute(LEXICON.c, _classNameResizeObserverElement);\n                                        obj.onload = function () {\n                                            var wnd = this.contentDocument.defaultView;\n                                            wnd.addEventListener('resize', callback);\n                                            wnd.document.documentElement.style.display = 'none';\n                                        };\n                                        obj.type = 'text/html';\n                                        if (isIE)\n                                            targetElement.prepend(obj);\n                                        obj.data = 'about:blank';\n                                        if (!isIE)\n                                            targetElement.prepend(obj);\n                                        targetElement.on(strAnimationStartEvent, callback);\n                                    }\n                                }\n                            }\n\n                            //direction change detection:\n                            if (targetElement[0] === _sizeObserverElementNative) {\n                                var directionChanged = function () {\n                                    var dir = _hostElement.css('direction');\n                                    var css = {};\n                                    var scrollLeftValue = 0;\n                                    var result = false;\n                                    if (dir !== _cssDirectionDetectedCache) {\n                                        if (dir === 'ltr') {\n                                            css[_strLeft] = 0;\n                                            css[_strRight] = _strAuto;\n                                            scrollLeftValue = constMaximum;\n                                        }\n                                        else {\n                                            css[_strLeft] = _strAuto;\n                                            css[_strRight] = 0;\n                                            scrollLeftValue = _rtlScrollBehavior.n ? -constMaximum : _rtlScrollBehavior.i ? 0 : constMaximum;\n                                        }\n                                        _sizeObserverElement.children().eq(0).css(css);\n                                        targetElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constMaximum);\n                                        _cssDirectionDetectedCache = dir;\n                                        result = true;\n                                    }\n                                    return result;\n                                };\n                                directionChanged();\n                                targetElement.on(_strScroll, function (event) {\n                                    if (directionChanged())\n                                        update();\n                                    COMPATIBILITY.prvD(event);\n                                    COMPATIBILITY.stpP(event);\n                                    return false;\n                                });\n                            }\n                        }\n                        //remove resize observer:\n                        else {\n                            if (_supportResizeObserver) {\n                                var element = targetElement.contents()[0];\n                                var resizeObserverObj = element[_strResizeObserverProperty];\n                                if(resizeObserverObj) {\n                                    resizeObserverObj.disconnect();\n                                    delete element[_strResizeObserverProperty];\n                                }\n                            }\n                            else {\n                                remove(targetElement.children(_strDot + _classNameResizeObserverElement).eq(0));\n                            }\n                        }\n                    }\n                }\n\n                /**\n                 * Freezes or unfreezes the given resize observer.\n                 * @param targetElement The element to which the target resize observer is applied.\n                 * @param freeze True if the resize observer shall be frozen, false otherwise.\n                 \n                function freezeResizeObserver(targetElement, freeze) {\n                    if (targetElement !== undefined) {\n                        if(freeze) {\n                            if (_supportResizeObserver) {\n                                var element = targetElement.contents()[0];\n                                element[_strResizeObserverProperty].unobserve(element);\n                            }\n                            else {\n                                targetElement = targetElement.children(_strDot + _classNameResizeObserverElement).eq(0);\n                                var w = targetElement.css(_strWidth);\n                                var h = targetElement.css(_strHeight);\n                                var css = {};\n                                css[_strWidth] = w;\n                                css[_strHeight] = h;\n                                targetElement.css(css);\n                            }\n                        }\n                        else {\n                            if (_supportResizeObserver) {\n                                var element = targetElement.contents()[0];\n                                element[_strResizeObserverProperty].observe(element);\n                            }\n                            else {\n                                var css = { };\n                                css[_strHeight] = _strEmpty;\n                                css[_strWidth] = _strEmpty;\n                                targetElement.children(_strDot + _classNameResizeObserverElement).eq(0).css(css);\n                            }\n                        }\n                    }\n                }\n                */\n\n\n                //==== Mutation Observers ====//\n\n                /**\n                 * Creates MutationObservers for the host and content Element if they are supported.\n                 */\n                function createMutationObservers() {\n                    if (_supportMutationObserver) {\n                        var mutationObserverContentLag = 11;\n                        var mutationObserver = COMPATIBILITY.mO();\n                        var contentLastUpdate = COMPATIBILITY.now();\n                        var mutationTarget;\n                        var mutationAttrName;\n                        var contentTimeout;\n                        var now;\n                        var sizeAuto;\n                        var action;\n\n                        _mutationObserverHostCallback = function(mutations) {\n                            var doUpdate = false;\n                            var mutation;\n                                \n                            if (_initialized && !_sleeping) {\n                                each(mutations, function () {\n                                    mutation = this;\n                                    mutationTarget = mutation.target;\n                                    mutationAttrName = mutation.attributeName;\n\n                                    if (mutationAttrName === LEXICON.c)\n                                        doUpdate = hostClassNamesChanged(mutation.oldValue, mutationTarget.className);\n                                    else if (mutationAttrName === LEXICON.s)\n                                        doUpdate = mutation.oldValue !== mutationTarget[LEXICON.s].cssText;\n                                    else\n                                        doUpdate = true;\n\n                                    if (doUpdate)\n                                        return false;\n                                });\n\n                                if (doUpdate)\n                                    _base.update(_strAuto);\n                            }\n                            return doUpdate;\n                        };\n                        _mutationObserverContentCallback = function (mutations) {\n                            var doUpdate = false;\n                            var mutation;\n                            \n                            if (_initialized && !_sleeping) {\n                                each(mutations, function () {\n                                    mutation = this;\n                                    doUpdate = isUnknownMutation(mutation);\n                                    return !doUpdate;\n                                });\n\n                                if (doUpdate) {\n                                    now = COMPATIBILITY.now();\n                                    sizeAuto = (_heightAutoCache || _widthAutoCache);\n                                    action = function () {\n                                        if(!_destroyed) {\n                                            contentLastUpdate = now;\n\n                                            //if cols, rows or wrap attr was changed\n                                            if (_isTextarea)\n                                                textareaUpdate();\n\n                                            if (sizeAuto)\n                                                update();\n                                            else\n                                                _base.update(_strAuto);\n                                        }\n                                    };\n                                    clearTimeout(contentTimeout);\n                                    if (mutationObserverContentLag <= 0 || now - contentLastUpdate > mutationObserverContentLag || !sizeAuto)\n                                        action();\n                                    else\n                                        contentTimeout = setTimeout(action, mutationObserverContentLag);\n                                }\n                            }\n                            return doUpdate;\n                        }\n\n                        _mutationObserverHost = new mutationObserver(_mutationObserverHostCallback);\n                        _mutationObserverContent = new mutationObserver(_mutationObserverContentCallback);\n                    }\n                }\n\n                /**\n                 * Connects the MutationObservers if they are supported.\n                 */\n                function connectMutationObservers() {\n                    if (_supportMutationObserver && !_mutationObserversConnected) {\n                        _mutationObserverHost.observe(_hostElementNative, {\n                            attributes: true,\n                            attributeOldValue: true,\n                            attributeFilter: _mutationObserverAttrsHost\n                        });\n\n                        _mutationObserverContent.observe(_isTextarea ? _targetElementNative : _contentElementNative, {\n                            attributes: true,\n                            attributeOldValue: true,\n                            subtree: !_isTextarea,\n                            childList: !_isTextarea,\n                            characterData: !_isTextarea,\n                            attributeFilter: _isTextarea ? _mutationObserverAttrsTextarea : _mutationObserverAttrsHost\n                        });\n\n                        _mutationObserversConnected = true;\n                    }\n                }\n\n                /**\n                 * Disconnects the MutationObservers if they are supported.\n                 */\n                function disconnectMutationObservers() {\n                    if (_supportMutationObserver && _mutationObserversConnected) {\n                        _mutationObserverHost.disconnect();\n                        _mutationObserverContent.disconnect();\n\n                        _mutationObserversConnected = false;\n                    }\n                }\n\n               \n               //==== Events of elements ====//\n\n                /**\n                 * This method gets called every time the host element gets resized. IMPORTANT: Padding changes are detected too!!\n                 * It refreshes the hostResizedEventArgs and the hostSizeResizeCache.\n                 * If there are any size changes, the update method gets called.\n                 */\n                function hostOnResized() {\n                    if (!_sleeping) {\n                        var changed;\n                        var hostSize = {\n                            w: _sizeObserverElementNative[LEXICON.sW],\n                            h: _sizeObserverElementNative[LEXICON.sH]\n                        };\n                        \n                        changed = checkCache(hostSize, _hostElementSizeChangeDetectedCache);\n                        _hostElementSizeChangeDetectedCache = hostSize;\n                        if (changed)\n                            update({ _hostSizeChanged : true });\n                    }\n                }\n\n                /**\n                 * The mouse enter event of the host element. This event is only needed for the autoHide feature.\n                 */\n                function hostOnMouseEnter() {\n                    if (_scrollbarsAutoHideLeave)\n                        refreshScrollbarsAutoHide(true);\n                }\n\n                /**\n                 * The mouse leave event of the host element. This event is only needed for the autoHide feature.\n                 */\n                function hostOnMouseLeave() {\n                    if (_scrollbarsAutoHideLeave && !_bodyElement.hasClass(_classNameDragging))\n                        refreshScrollbarsAutoHide(false);\n                }\n\n                /**\n                 * The mouse move event of the host element. This event is only needed for the autoHide \"move\" feature.\n                 */\n                function hostOnMouseMove() {\n                    if (_scrollbarsAutoHideMove) {\n                        refreshScrollbarsAutoHide(true);\n                        clearTimeout(_scrollbarsAutoHideMoveTimeoutId);\n                        _scrollbarsAutoHideMoveTimeoutId = setTimeout(function () {\n                            if (_scrollbarsAutoHideMove && !_destroyed)\n                                refreshScrollbarsAutoHide(false);\n                        }, 100);\n                    }\n                }\n\n                 /**\n                 * Adds or removes mouse & touch events of the host element. (for handling auto-hiding of the scrollbars)\n                 * @param destroy Indicates whether the events shall be added or removed.\n                 */\n                function setupHostMouseTouchEvents(destroy) {\n                    var strOnOff = destroy ? 'off' : 'on';\n                    var setupEvent = function(target, name, listener) {\n                        if(_supportPassiveEvents)\n                            setupPassiveEventListener(target, name, listener, destroy);\n                        else\n                            target[strOnOff](name, listener);\n                    };\n\n                    if(_scrollbarsAutoHideMove && !destroy)\n                        setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);\n                    else {\n                        if(destroy)\n                            setupEvent(_hostElement, _strMouseTouchMoveEvent, hostOnMouseMove);\n                        setupEvent(_hostElement, _strMouseTouchEnter, hostOnMouseEnter);\n                        setupEvent(_hostElement, _strMouseTouchLeave, hostOnMouseLeave);\n                    }\n\n                    //if the plugin is initialized and the mouse is over the host element, make the scrollbars visible\n                    if(!_initialized && !destroy)\n                        _hostElement.one(\"mouseover\", hostOnMouseEnter);\n                }\n\n                /**\n                 * Prevents text from deselection if attached to the document element on the mousedown event of a DOM element.\n                 * @param event The select start event.\n                 */\n                function documentOnSelectStart(event) {\n                    COMPATIBILITY.prvD(event);\n                    return false;\n                }\n\n                /**\n                 * A callback which will be called after a img element has downloaded its src asynchronous.\n                 */\n                function imgOnLoad() {\n                    update({ _contentSizeChanged : true });\n                }\n\n\n                //==== Update Detection ====//\n\n                /**\n                 * Measures the min width and min height of the body element and refreshes the related cache.\n                 * @returns {boolean} True if the min width or min height has changed, false otherwise.\n                 */\n                function bodyMinSizeChanged() {\n                    var bodyMinSize = {};\n                    if (_isBody && _contentArrangeElement) {\n                        bodyMinSize.w = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strWidth));\n                        bodyMinSize.h = parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus + _strHeight));\n                        bodyMinSize.c = checkCache(bodyMinSize, _bodyMinSizeCache);\n                        bodyMinSize.f = true; //flag for \"measured at least once\"\n                    }\n                    _bodyMinSizeCache = bodyMinSize;\n                    return !!bodyMinSize.c;\n                }\n\n                /**\n                 * Returns true if the class names really changed (new class without plugin host prefix)\n                 * @param oldCassNames The old ClassName string.\n                 * @param newClassNames The new ClassName string.\n                 * @returns {boolean} True if the class names has really changed, false otherwise.\n                 */\n                function hostClassNamesChanged(oldCassNames, newClassNames) {\n                    var currClasses = (newClassNames !== undefined && newClassNames !== null) ? newClassNames.split(_strSpace) : _strEmpty;\n                    var oldClasses = (oldCassNames !== undefined && oldCassNames !== null) ? oldCassNames.split(_strSpace) : _strEmpty;\n                    if (currClasses === _strEmpty && oldClasses === _strEmpty)\n                        return false;\n                    var diff = getArrayDifferences(oldClasses, currClasses);\n                    var changed = false;\n                    var oldClassNames = _oldClassName !== undefined && _oldClassName !== null ? _oldClassName.split(_strSpace) : [_strEmpty];\n                    var currClassNames = _classNameCache !== undefined && _classNameCache !== null ? _classNameCache.split(_strSpace) : [_strEmpty];\n\n                    //remove none theme from diff list to prevent update\n                    var idx = inArray(_classNameThemeNone, diff);\n                    var curr;\n                    var i;\n                    var v;\n                    var o;\n                    var c;\n\n                    if (idx > -1)\n                        diff.splice(idx, 1);\n\n                    for (i = 0; i < diff.length; i++) {\n                        curr = diff[i];\n                        if (curr.indexOf(_classNameHostElement) !== 0) {\n                            o = true;\n                            c = true;\n                            for (v = 0; v < oldClassNames.length; v++) {\n                                if (curr === oldClassNames[v]) {\n                                    o = false;\n                                    break;\n                                }\n                            }\n                            for (v = 0; v < currClassNames.length; v++) {\n                                if (curr === currClassNames[v]) {\n                                    c = false;\n                                    break;\n                                }\n                            }\n                            if (o && c) {\n                                changed = true;\n                                break;\n                            }\n                        }\n\n                    }\n                    return changed;\n                }\n\n                /**\n                 * Returns true if the given mutation is not from a from the plugin generated element. If the target element is a textarea the mutation is always unknown.\n                 * @param mutation The mutation which shall be checked.\n                 * @returns {boolean} True if the mutation is from a unknown element, false otherwise.\n                 */\n                function isUnknownMutation(mutation) {\n                    var attributeName = mutation.attributeName;\n                    var mutationTarget = mutation.target;\n                    var mutationType = mutation.type;\n                    var strClosest = 'closest';\n\n                    if (mutationTarget === _contentElementNative)\n                        return attributeName === null;\n                    if (mutationType === 'attributes' && (attributeName === LEXICON.c || attributeName === LEXICON.s) && !_isTextarea) {\n                        //ignore className changes by the plugin\n                        if (attributeName === LEXICON.c && FRAMEWORK(mutationTarget).hasClass(_classNameHostElement))\n                            return hostClassNamesChanged(mutation.oldValue, mutationTarget.getAttribute(LEXICON.c));\n\n                        //only do it of browser support it natively\n                        if (typeof mutationTarget[strClosest] != TYPES.f)\n                            return true;\n                        if (mutationTarget[strClosest](_strDot + _classNameResizeObserverElement) !== null ||\n                            mutationTarget[strClosest](_strDot + _classNameScrollbar) !== null ||\n                            mutationTarget[strClosest](_strDot + _classNameScrollbarCorner) !== null)\n                            return false;\n                    }\n                    return true;\n                }\n\n                /**\n                 * Returns true if the content size was changed since the last time this method was called.\n                 * @returns {boolean} True if the content size was changed, false otherwise.\n                 */\n                function updateAutoContentSizeChanged() {\n                    if (_sleeping)\n                        return false;\n                    \n                    var contentMeasureElement = getContentMeasureElement();\n                    var textareaValueLength = _isTextarea && _widthAutoCache && !_textareaAutoWrappingCache ? _targetElement.val().length : 0;\n                    var setCSS = !_mutationObserversConnected && _widthAutoCache && !_isTextarea;\n                    var viewportScrollSize = { };\n                    var css = { };\n                    var float;\n                    var bodyMinSizeC;\n                    var changed;\n                    var viewportScrollSizeChanged;\n                    var contentElementScrollSize;\n\n                    //fix for https://bugzilla.mozilla.org/show_bug.cgi?id=1439305, it only works with \"clipAlways : true\"\n                    //it can work with \"clipAlways : false\" too, but I had to set the overflow of the viewportElement to hidden every time before measuring\n                    if(_restrictedMeasuring) {\n                        viewportScrollSize = {\n                            x : _viewportElementNative[LEXICON.sW],\n                            y : _viewportElementNative[LEXICON.sH]\n                        }\n                    }\n                    if (setCSS) {\n                        float = _contentElement.css(_strFloat);\n                        css[_strFloat] = _isRTL ? _strRight : _strLeft;\n                        css[_strWidth] = _strAuto;\n                        _contentElement.css(css);\n                    }\n                    contentElementScrollSize = {\n                        w: contentMeasureElement[LEXICON.sW] + textareaValueLength,\n                        h: contentMeasureElement[LEXICON.sH] + textareaValueLength\n                    };\n                    if (setCSS) {\n                        css[_strFloat] = float;\n                        css[_strWidth] = _strHundredPercent;\n                        _contentElement.css(css);\n                    }\n\n                    bodyMinSizeC = bodyMinSizeChanged();\n                    changed = checkCache(contentElementScrollSize, _contentElementScrollSizeChangeDetectedCache);\n                    viewportScrollSizeChanged = checkCache(viewportScrollSize, _viewportScrollSizeCache);\n\n                    _contentElementScrollSizeChangeDetectedCache = contentElementScrollSize;\n                    _viewportScrollSizeCache = viewportScrollSize;\n\n                    return changed || bodyMinSizeC || viewportScrollSizeChanged;\n                }\n\n                /**\n                 * Returns true when a attribute which the MutationObserver would observe has changed.  \n                 * @returns {boolean} True if one of the attributes which a MutationObserver would observe has changed, false or undefined otherwise.\n                 */\n                function meaningfulAttrsChanged() {\n                    if (_sleeping || _mutationObserversConnected)\n                        return;\n                    \n                    var changed;\n                    var elem;\n                    var curr;\n                    var cache;\n                    var checks = [\n                        {\n                            _elem: _hostElement, \n                            _props : _mutationObserverAttrsHost.concat(':visible')\n                        },\n                        {\n                            _elem: _isTextarea ? _targetElement : undefined, \n                            _props : _mutationObserverAttrsTextarea\n                        }\n                    ];\n                    \n                    each(checks, function(index, check) { \n                        elem = check._elem;\n                        if(elem) {\n                            each(check._props, function(index, prop) { \n                                curr = prop.charAt(0) === ':' ? elem.is(prop) : elem.attr(prop);\n                                cache = _updateAutoCache[prop];\n                                \n                                changed = changed || checkCache(curr, cache);\n                                \n                                _updateAutoCache[prop] = curr;\n                            });\n                        }\n                    });\n                    \n                    return changed;\n                }\n\n                /**\n                 * Checks is a CSS Property of a child element is affecting the scroll size of the content.\n                 * @param propertyName The CSS property name.\n                 * @returns {boolean} True if the property is affecting the content scroll size, false otherwise.\n                 */\n                function isSizeAffectingCSSProperty(propertyName) {\n                    if (!_initialized)\n                        return true;\n                    var flexGrow = 'flex-grow';\n                    var flexShrink = 'flex-shrink';\n                    var flexBasis = 'flex-basis';\n                    var affectingPropsX = [\n                        _strWidth,\n                        _strMinMinus + _strWidth,\n                        _strMaxMinus + _strWidth,\n                        _strMarginMinus + _strLeft,\n                        _strMarginMinus + _strRight,\n                        _strLeft,\n                        _strRight,\n                        'font-weight',\n                        'word-spacing',\n                        flexGrow,\n                        flexShrink,\n                        flexBasis\n                    ];\n                    var affectingPropsXContentBox = [\n                        _strPaddingMinus + _strLeft,\n                        _strPaddingMinus + _strRight,\n                        _strBorderMinus + _strLeft + _strWidth,\n                        _strBorderMinus + _strRight + _strWidth\n                    ];\n                    var affectingPropsY = [\n                        _strHeight,\n                        _strMinMinus + _strHeight,\n                        _strMaxMinus + _strHeight,\n                        _strMarginMinus + _strTop,\n                        _strMarginMinus + _strBottom,\n                        _strTop,\n                        _strBottom,\n                        'line-height',\n                        flexGrow,\n                        flexShrink,\n                        flexBasis\n                    ];\n                    var affectingPropsYContentBox = [\n                        _strPaddingMinus + _strTop,\n                        _strPaddingMinus + _strBottom,\n                        _strBorderMinus + _strTop + _strWidth,\n                        _strBorderMinus + _strBottom + _strWidth\n                    ];\n                    var _strS = 's';\n                    var _strVS = 'v-s';\n                    var checkX = _overflowBehaviorCache.x === _strS || _overflowBehaviorCache.x === _strVS;\n                    var checkY = _overflowBehaviorCache.y === _strS || _overflowBehaviorCache.y === _strVS;\n                    var sizeIsAffected = false;\n                    var checkPropertyName = function (arr, name) {\n                        for (var i = 0; i < arr[LEXICON.l]; i++) {\n                            if (arr[i] === name)\n                                return true;\n                        }\n                        return false;\n                    };\n\n                    if (checkY) {\n                        sizeIsAffected = checkPropertyName(affectingPropsY, propertyName);\n                        if (!sizeIsAffected && !_isBorderBox)\n                            sizeIsAffected = checkPropertyName(affectingPropsYContentBox, propertyName);\n                    }\n                    if (checkX && !sizeIsAffected) {\n                        sizeIsAffected = checkPropertyName(affectingPropsX, propertyName);\n                        if (!sizeIsAffected && !_isBorderBox)\n                            sizeIsAffected = checkPropertyName(affectingPropsXContentBox, propertyName);\n                    }\n                    return sizeIsAffected;\n                }\n\n                \n                //==== Update ====//\n\n                /**\n                 * Updates the variables and size of the textarea element, and manages the scroll on new line or new character.\n                 */\n                function textareaUpdate() {\n                    if (!_sleeping) {\n                        var wrapAttrOff = !_textareaAutoWrappingCache;\n                        var minWidth = _viewportSize.w;\n                        var minHeight = _viewportSize.h;\n                        var css = { };\n                        var doMeasure = _widthAutoCache || wrapAttrOff;\n                        var origWidth;\n                        var width;\n                        var origHeight;\n                        var height;\n\n                        //reset min size\n                        css[_strMinMinus + _strWidth] = _strEmpty;\n                        css[_strMinMinus + _strHeight] = _strEmpty;\n\n                        //set width auto\n                        css[_strWidth] = _strAuto;\n                        _targetElement.css(css);\n\n                        //measure width\n                        origWidth = _targetElementNative[LEXICON.oW];\n                        width = doMeasure ? MATH.max(origWidth, _targetElementNative[LEXICON.sW] - 1) : 1;\n                        /*width += (_widthAutoCache ? _marginX + (!_isBorderBox ? wrapAttrOff ? 0 : _paddingX + _borderX : 0) : 0);*/\n\n                        //set measured width\n                        css[_strWidth] = _widthAutoCache ? _strAuto /*width*/ : _strHundredPercent;\n                        css[_strMinMinus + _strWidth] = _strHundredPercent;\n\n                        //set height auto\n                        css[_strHeight] = _strAuto;\n                        _targetElement.css(css);\n\n                        //measure height\n                        origHeight = _targetElementNative[LEXICON.oH];\n                        height = MATH.max(origHeight, _targetElementNative[LEXICON.sH] - 1);\n\n                        //append correct size values\n                        css[_strWidth] = width;\n                        css[_strHeight] = height;\n                        _textareaCoverElement.css(css);\n\n                        //apply min width / min height to prevent textarea collapsing\n                        css[_strMinMinus + _strWidth] = minWidth /*+ (!_isBorderBox && _widthAutoCache ? _paddingX + _borderX : 0)*/;\n                        css[_strMinMinus + _strHeight] = minHeight /*+ (!_isBorderBox && _heightAutoCache ? _paddingY + _borderY : 0)*/;\n                        _targetElement.css(css);\n\n                        return {\n                            _originalWidth: origWidth,\n                            _originalHeight: origHeight,\n                            _dynamicWidth: width,\n                            _dynamicHeight: height\n                        };\n                    }\n                }\n\n                /**\n                 * Updates the plugin and DOM to the current options.\n                 * This method should only be called if a update is 100% required.\n                 * @param updateHints A objects which contains hints for this update:\n                 * {\n                 *   _hostSizeChanged : boolean,\n                 *   _contentSizeChanged : boolean,\n                 *   _force : boolean,                             == preventSwallowing\n                 *   _changedOptions : { },                        == preventSwallowing && preventSleep\n                *  }\n                 */\n                function update(updateHints) {\n                    clearTimeout(_swallowedUpdateTimeout);\n                    updateHints = updateHints || { };\n                    _swallowedUpdateHints._hostSizeChanged |= updateHints._hostSizeChanged;\n                    _swallowedUpdateHints._contentSizeChanged |= updateHints._contentSizeChanged;\n                    _swallowedUpdateHints._force |= updateHints._force;\n                    \n                    var now = COMPATIBILITY.now();\n                    var hostSizeChanged = !!_swallowedUpdateHints._hostSizeChanged;\n                    var contentSizeChanged = !!_swallowedUpdateHints._contentSizeChanged;\n                    var force = !!_swallowedUpdateHints._force;\n                    var changedOptions = updateHints._changedOptions;    \n                    var swallow = _swallowUpdateLag > 0 && _initialized && !_destroyed && !force && !changedOptions && (now - _lastUpdateTime) < _swallowUpdateLag && (!_heightAutoCache && !_widthAutoCache);                    \n                    var displayIsHidden;\n\n                    if(swallow)\n                        _swallowedUpdateTimeout = setTimeout(update, _swallowUpdateLag);\n\n                    //abort update due to:\n                    //destroyed\n                    //swallowing\n                    //sleeping\n                    //host is hidden or has false display\n                    if (_destroyed || swallow || (_sleeping && !changedOptions) || (_initialized && !force && (displayIsHidden = _hostElement.is(':hidden'))) || _hostElement.css('display') === 'inline')\n                        return;\n\n                    _lastUpdateTime = now;\n                    _swallowedUpdateHints = { };\n                    \n                    //if scrollbar styling is possible and native scrollbars aren't overlaid the scrollbar styling will be applied which hides the native scrollbars completely.\n                    if (_nativeScrollbarStyling && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n                        //native scrollbars are hidden, so change the values to zero\n                        _nativeScrollbarSize.x = 0;\n                        _nativeScrollbarSize.y = 0;\n                    }\n                    else {\n                        //refresh native scrollbar size (in case of zoom)\n                        _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n                    }\n\n                    // Scrollbar padding is needed for firefox, because firefox hides scrollbar automatically if the size of the div is too small.\n                    // The calculation: [scrollbar size +3 *3]\n                    // (+3 because of possible decoration e.g. borders, margins etc., but only if native scrollbar is NOT a overlaid scrollbar)\n                    // (*3 because (1)increase / (2)decrease -button and (3)resize handle)\n                    _nativeScrollbarMinSize = {\n                        x: (_nativeScrollbarSize.x + (_nativeScrollbarIsOverlaid.x ? 0 : 3)) * 3,\n                        y: (_nativeScrollbarSize.y + (_nativeScrollbarIsOverlaid.y ? 0 : 3)) * 3\n                    };\n                    \n                    //changedOptions = changedOptions || { };\n                    //freezeResizeObserver(_sizeObserverElement, true);\n                    //freezeResizeObserver(_sizeAutoObserverElement, true);\n                    \n                    var checkCacheAutoForce = function () {\n                        return checkCache.apply(this, [].slice.call(arguments).concat([ force ]));\n                    };\n                    \n                    //save current scroll offset\n                    var currScroll = {\n                        x: _viewportElement[_strScrollLeft](),\n                        y: _viewportElement[_strScrollTop]()\n                    };\n\n                    var currentPreparedOptionsScrollbars = _currentPreparedOptions.scrollbars;\n                    var currentPreparedOptionsTextarea = _currentPreparedOptions.textarea;\n\n                    //scrollbars visibility:\n                    var scrollbarsVisibility = currentPreparedOptionsScrollbars.visibility;\n                    var scrollbarsVisibilityChanged = checkCacheAutoForce(scrollbarsVisibility, _scrollbarsVisibilityCache);\n\n                    //scrollbars autoHide:\n                    var scrollbarsAutoHide = currentPreparedOptionsScrollbars.autoHide;\n                    var scrollbarsAutoHideChanged = checkCacheAutoForce(scrollbarsAutoHide, _scrollbarsAutoHideCache);\n\n                    //scrollbars click scrolling\n                    var scrollbarsClickScrolling = currentPreparedOptionsScrollbars.clickScrolling;\n                    var scrollbarsClickScrollingChanged = checkCacheAutoForce(scrollbarsClickScrolling, _scrollbarsClickScrollingCache);\n\n                    //scrollbars drag scrolling\n                    var scrollbarsDragScrolling = currentPreparedOptionsScrollbars.dragScrolling;\n                    var scrollbarsDragScrollingChanged = checkCacheAutoForce(scrollbarsDragScrolling, _scrollbarsDragScrollingCache);\n\n                    //className\n                    var className = _currentPreparedOptions.className;\n                    var classNameChanged = checkCacheAutoForce(className, _classNameCache);\n\n                    //resize\n                    var resize = _currentPreparedOptions.resize;\n                    var resizeChanged = checkCacheAutoForce(resize, _resizeCache) && !_isBody; //body can't be resized since the window itself acts as resize possibility.\n\n                    //paddingAbsolute\n                    var paddingAbsolute = _currentPreparedOptions.paddingAbsolute;\n                    var paddingAbsoluteChanged = checkCacheAutoForce(paddingAbsolute, _paddingAbsoluteCache);\n\n                    //clipAlways\n                    var clipAlways = _currentPreparedOptions.clipAlways;\n                    var clipAlwaysChanged = checkCacheAutoForce(clipAlways, _clipAlwaysCache);\n\n                    //sizeAutoCapable\n                    var sizeAutoCapable = _currentPreparedOptions.sizeAutoCapable && !_isBody; //body can never be size auto, because it shall be always as big as the viewport.\n                    var sizeAutoCapableChanged = checkCacheAutoForce(sizeAutoCapable, _sizeAutoCapableCache);\n\n                    //showNativeScrollbars\n                    var ignoreOverlayScrollbarHiding = _currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars;\n                    var ignoreOverlayScrollbarHidingChanged = checkCacheAutoForce(ignoreOverlayScrollbarHiding, _ignoreOverlayScrollbarHidingCache);\n\n                    //autoUpdate\n                    var autoUpdate = _currentPreparedOptions.autoUpdate;\n                    var autoUpdateChanged = checkCacheAutoForce(autoUpdate, _autoUpdateCache);\n\n                    //overflowBehavior\n                    var overflowBehavior = _currentPreparedOptions.overflowBehavior;\n                    var overflowBehaviorChanged = checkCacheAutoForce(overflowBehavior, _overflowBehaviorCache, force);\n\n                    //dynWidth:\n                    var textareaDynWidth = currentPreparedOptionsTextarea.dynWidth;\n                    var textareaDynWidthChanged = checkCacheAutoForce(_textareaDynWidthCache, textareaDynWidth);\n\n                    //dynHeight:\n                    var textareaDynHeight = currentPreparedOptionsTextarea.dynHeight;\n                    var textareaDynHeightChanged = checkCacheAutoForce(_textareaDynHeightCache, textareaDynHeight);\n\n                    //scrollbars visibility\n                    _scrollbarsAutoHideNever = scrollbarsAutoHide === 'n';\n                    _scrollbarsAutoHideScroll = scrollbarsAutoHide === 's';\n                    _scrollbarsAutoHideMove = scrollbarsAutoHide === 'm';\n                    _scrollbarsAutoHideLeave = scrollbarsAutoHide === 'l';\n\n                    //scrollbars autoHideDelay\n                    _scrollbarsAutoHideDelay = currentPreparedOptionsScrollbars.autoHideDelay;\n\n                    //old className\n                    _oldClassName = _classNameCache;\n\n                    //resize\n                    _resizeNone = resize === 'n';\n                    _resizeBoth = resize === 'b';\n                    _resizeHorizontal = resize === 'h';\n                    _resizeVertical = resize === 'v';\n\n                    //normalizeRTL\n                    _normalizeRTLCache = _currentPreparedOptions.normalizeRTL;\n\n                    //ignore overlay scrollbar hiding\n                    ignoreOverlayScrollbarHiding = ignoreOverlayScrollbarHiding && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y);\n\n                    //refresh options cache\n                    _scrollbarsVisibilityCache = scrollbarsVisibility;\n                    _scrollbarsAutoHideCache = scrollbarsAutoHide;\n                    _scrollbarsClickScrollingCache = scrollbarsClickScrolling;\n                    _scrollbarsDragScrollingCache = scrollbarsDragScrolling;\n                    _classNameCache = className;\n                    _resizeCache = resize;\n                    _paddingAbsoluteCache = paddingAbsolute;\n                    _clipAlwaysCache = clipAlways;\n                    _sizeAutoCapableCache = sizeAutoCapable;\n                    _ignoreOverlayScrollbarHidingCache = ignoreOverlayScrollbarHiding;\n                    _autoUpdateCache = autoUpdate;\n                    _overflowBehaviorCache = extendDeep({}, overflowBehavior);\n                    _textareaDynWidthCache = textareaDynWidth;\n                    _textareaDynHeightCache = textareaDynHeight;\n                    _hasOverflowCache = _hasOverflowCache || { x: false, y: false };\n\n                    //set correct class name to the host element\n                    if (classNameChanged) {\n                        removeClass(_hostElement, _oldClassName + _strSpace + _classNameThemeNone);\n                        addClass(_hostElement, className !== undefined && className !== null && className.length > 0 ? className : _classNameThemeNone);\n                    }\n\n                    //set correct auto Update\n                    if (autoUpdateChanged) {\n                        if (autoUpdate === true) {\n                            disconnectMutationObservers();\n                            autoUpdateLoop.add(_base);\n                        }\n                        else if (autoUpdate === null) {\n                            if (_autoUpdateRecommended) {\n                                disconnectMutationObservers();\n                                autoUpdateLoop.add(_base);\n                            }\n                            else {\n                                autoUpdateLoop.remove(_base);\n                                connectMutationObservers();\n                            }\n                        }\n                        else {\n                            autoUpdateLoop.remove(_base);\n                            connectMutationObservers();\n                        }\n                    }\n\n                    //activate or deactivate size auto capability\n                    if (sizeAutoCapableChanged) {\n                        if (sizeAutoCapable) {\n                            if (!_contentGlueElement) {\n                                _contentGlueElement = FRAMEWORK(generateDiv(_classNameContentGlueElement));\n                                _paddingElement.before(_contentGlueElement);\n                            }\n                            else {\n                                _contentGlueElement.show();\n                            }\n                            if (_sizeAutoObserverAdded) {\n                                _sizeAutoObserverElement.show();\n                            }\n                            else {\n                                _sizeAutoObserverElement = FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement));\n                                _sizeAutoObserverElementNative = _sizeAutoObserverElement[0];\n\n                                _contentGlueElement.before(_sizeAutoObserverElement);\n                                var oldSize = {w: -1, h: -1};\n                                setupResizeObserver(_sizeAutoObserverElement, function () {\n                                    var newSize = {\n                                        w: _sizeAutoObserverElementNative[LEXICON.oW],\n                                        h: _sizeAutoObserverElementNative[LEXICON.oH]\n                                    };\n                                    if (checkCache(newSize, oldSize)) {\n                                        if (_initialized && (_heightAutoCache && newSize.h > 0) || (_widthAutoCache && newSize.w > 0)) {\n                                            update();\n                                        }\n                                        else if (_initialized && (!_heightAutoCache && newSize.h === 0) || (!_widthAutoCache && newSize.w === 0)) {\n                                            update();\n                                        }\n                                    }\n                                    oldSize = newSize;\n                                });\n                                _sizeAutoObserverAdded = true;\n                                //fix heightAuto detector bug if height is fixed but contentHeight is 0.\n                                //the probability this bug will ever happen is very very low, thats why its ok if we use calc which isn't supported in IE8.\n                                if (_cssCalc !== null)\n                                    _sizeAutoObserverElement.css(_strHeight, _cssCalc + '(100% + 1px)');\n                            }\n                        }\n                        else {\n                            if (_sizeAutoObserverAdded)\n                                _sizeAutoObserverElement.hide();\n                            if (_contentGlueElement)\n                                _contentGlueElement.hide();\n                        }\n                    }\n\n                    //if force, update all resizeObservers too\n                    if (force) {\n                        _sizeObserverElement.find('*').trigger(_strScroll);\n                        if (_sizeAutoObserverAdded)\n                            _sizeAutoObserverElement.find('*').trigger(_strScroll);\n                    }\n\n                    //display hidden:\n                    displayIsHidden = displayIsHidden === undefined ? _hostElement.is(':hidden') : displayIsHidden;\n                    var displayIsHiddenChanged = checkCacheAutoForce(displayIsHidden, _displayIsHiddenCache);\n\n                    //textarea AutoWrapping:\n                    var textareaAutoWrapping = _isTextarea ? _targetElement.attr('wrap') !== 'off' : false;\n                    var textareaAutoWrappingChanged = checkCacheAutoForce(textareaAutoWrapping, _textareaAutoWrappingCache);\n\n                    //detect direction:\n                    var cssDirection = _hostElement.css('direction');\n                    var cssDirectionChanged = checkCacheAutoForce(cssDirection, _cssDirectionCache);\n\n                    //detect box-sizing:\n                    var boxSizing = _hostElement.css('box-sizing');\n                    var boxSizingChanged = checkCacheAutoForce(boxSizing, _cssBoxSizingCache);\n\n                    //detect padding:\n                    var padding = {\n                        c: force,\n                        t: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strTop)),\n                        r: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strRight)),\n                        b: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strBottom)),\n                        l: parseToZeroOrNumber(_hostElement.css(_strPaddingMinus + _strLeft))\n                    };\n                    \n                    //width + height auto detecting var:\n                    var sizeAutoObserverElementBCRect;\n                    //exception occurs in IE8 sometimes (unknown exception)\n                    try {\n                        sizeAutoObserverElementBCRect = _sizeAutoObserverAdded ? _sizeAutoObserverElementNative.getBoundingClientRect() : null;\n                    } catch (ex) {\n                        return;\n                    }\n\n                    _isRTL = cssDirection === 'rtl';\n                    _isBorderBox = (boxSizing === 'border-box');\n                    var isRTLLeft = _isRTL ? _strLeft : _strRight;\n                    var isRTLRight = _isRTL ? _strRight : _strLeft;\n\n                    //detect width auto:\n                    var widthAutoResizeDetection = false;\n                    var widthAutoObserverDetection = (_sizeAutoObserverAdded && (_hostElement.css(_strFloat) !== 'none' /*|| _isTextarea */)) ? (MATH.round(sizeAutoObserverElementBCRect.right - sizeAutoObserverElementBCRect.left) === 0) && (!paddingAbsolute ? (_hostElementNative[LEXICON.cW] - _paddingX) > 0 : true) : false;\n                    if (sizeAutoCapable && !widthAutoObserverDetection) {\n                        var tmpCurrHostWidth = _hostElementNative[LEXICON.oW];\n                        var tmpCurrContentGlueWidth = _contentGlueElement.css(_strWidth);\n                        _contentGlueElement.css(_strWidth, _strAuto);\n\n                        var tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n                        _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n                        widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n                        if (!widthAutoResizeDetection) {\n                            _contentGlueElement.css(_strWidth, tmpCurrHostWidth + 1);\n                            tmpNewHostWidth = _hostElementNative[LEXICON.oW];\n                            _contentGlueElement.css(_strWidth, tmpCurrContentGlueWidth);\n                            widthAutoResizeDetection = tmpCurrHostWidth !== tmpNewHostWidth;\n                        }\n                    }\n                    var widthAuto = (widthAutoObserverDetection || widthAutoResizeDetection) && sizeAutoCapable && !displayIsHidden;\n                    var widthAutoChanged = checkCacheAutoForce(widthAuto, _widthAutoCache);\n                    var wasWidthAuto = !widthAuto && _widthAutoCache;\n\n                    //detect height auto:\n                    var heightAuto = _sizeAutoObserverAdded && sizeAutoCapable && !displayIsHidden ? (MATH.round(sizeAutoObserverElementBCRect.bottom - sizeAutoObserverElementBCRect.top) === 0) /* && (!paddingAbsolute && (_msieVersion > 9 || !_msieVersion) ? true : true) */ : false;\n                    var heightAutoChanged = checkCacheAutoForce(heightAuto, _heightAutoCache);\n                    var wasHeightAuto = !heightAuto && _heightAutoCache;\n\n                    //detect border:\n                    //we need the border only if border box and auto size\n                    var strMinusWidth = '-' + _strWidth;\n                    var updateBorderX = (widthAuto && _isBorderBox) || !_isBorderBox;\n                    var updateBorderY = (heightAuto && _isBorderBox) || !_isBorderBox;\n                    var border = {\n                        c: force,\n                        t: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strTop + strMinusWidth), true) : 0,\n                        r: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strRight + strMinusWidth), true) : 0,\n                        b: updateBorderY ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strBottom + strMinusWidth), true) : 0,\n                        l: updateBorderX ? parseToZeroOrNumber(_hostElement.css(_strBorderMinus + _strLeft + strMinusWidth), true) : 0\n                    };\n\n                    //detect margin:\n                    var margin = {\n                        c: force,\n                        t: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strTop)),\n                        r: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strRight)),\n                        b: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strBottom)),\n                        l: parseToZeroOrNumber(_hostElement.css(_strMarginMinus + _strLeft))\n                    };\n\n                    //detect css max width & height:\n                    var cssMaxValue = {\n                        h: String(_hostElement.css(_strMaxMinus + _strHeight)),\n                        w: String(_hostElement.css(_strMaxMinus + _strWidth))\n                    };\n\n                    //vars to apply correct css\n                    var contentElementCSS = { };\n                    var contentGlueElementCSS = { };\n\n                    //funcs\n                    var getHostSize = function() {\n                        //has to be clientSize because offsetSize respect borders\n                        return {\n                            w: _hostElementNative[LEXICON.cW],\n                            h: _hostElementNative[LEXICON.cH]\n                        };\n                    };\n                    var getViewportSize = function() {\n                        //viewport size is padding container because it never has padding, margin and a border\n                        //determine zoom rounding error -> sometimes scrollWidth/Height is smaller than clientWidth/Height\n                        //if this happens add the difference to the viewportSize to compensate the rounding error\n                        return {\n                            w: _paddingElementNative[LEXICON.oW] + MATH.max(0, _contentElementNative[LEXICON.cW] - _contentElementNative[LEXICON.sW]),\n                            h: _paddingElementNative[LEXICON.oH] + MATH.max(0, _contentElementNative[LEXICON.cH] - _contentElementNative[LEXICON.sH])\n                        };\n                    };\n\n                    //set info for padding\n                    var paddingAbsoluteX = _paddingX = padding.l + padding.r;\n                    var paddingAbsoluteY = _paddingY = padding.t + padding.b;\n                    paddingAbsoluteX *= paddingAbsolute ? 1 : 0;\n                    paddingAbsoluteY *= paddingAbsolute ? 1 : 0;\n                    padding.c = checkCacheAutoForce(padding, _cssPaddingCache);\n\n                    //set info for border\n                    _borderX = border.l + border.r;\n                    _borderY = border.t + border.b;\n                    border.c = checkCacheAutoForce(border, _cssBorderCache);\n\n                    //set info for margin\n                    _marginX = margin.l + margin.r;\n                    _marginY = margin.t + margin.b;\n                    margin.c = checkCacheAutoForce(margin, _cssMarginCache);\n\n                    //set info for css max value\n                    cssMaxValue.ih = parseToZeroOrNumber(cssMaxValue.h); //ih = integer height\n                    cssMaxValue.iw = parseToZeroOrNumber(cssMaxValue.w); //iw = integer width\n                    cssMaxValue.ch = cssMaxValue.h.indexOf('px') > -1; //ch = correct height\n                    cssMaxValue.cw = cssMaxValue.w.indexOf('px') > -1; //cw = correct width\n                    cssMaxValue.c = checkCacheAutoForce(cssMaxValue, _cssMaxValueCache);\n\n                    //refresh cache\n                    _displayIsHiddenCache = displayIsHidden;\n                    _textareaAutoWrappingCache = textareaAutoWrapping;\n                    _cssDirectionCache = cssDirection;\n                    _cssBoxSizingCache = boxSizing;\n                    _widthAutoCache = widthAuto;\n                    _heightAutoCache = heightAuto;\n                    _cssPaddingCache = padding;\n                    _cssBorderCache = border;\n                    _cssMarginCache = margin;\n                    _cssMaxValueCache = cssMaxValue;\n                        \n                    //IEFix direction changed\n                    if (cssDirectionChanged && _sizeAutoObserverAdded)\n                        _sizeAutoObserverElement.css(_strFloat, isRTLRight);\n\n                    //apply padding:\n                    if (padding.c || cssDirectionChanged || paddingAbsoluteChanged || widthAutoChanged || heightAutoChanged || boxSizingChanged || sizeAutoCapableChanged) {\n                        var paddingElementCSS = {};\n                        var textareaCSS = {};\n                        setTopRightBottomLeft(contentGlueElementCSS, _strMarginMinus, [-padding.t, -padding.r, -padding.b, -padding.l]);\n                        if (paddingAbsolute) {\n                            setTopRightBottomLeft(paddingElementCSS, _strEmpty, [padding.t, padding.r, padding.b, padding.l]);\n                            if (_isTextarea)\n                                setTopRightBottomLeft(textareaCSS, _strPaddingMinus);\n                            else\n                                setTopRightBottomLeft(contentElementCSS, _strPaddingMinus);\n                        }\n                        else {\n                            setTopRightBottomLeft(paddingElementCSS, _strEmpty);\n                            if (_isTextarea)\n                                setTopRightBottomLeft(textareaCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n                            else\n                                setTopRightBottomLeft(contentElementCSS, _strPaddingMinus, [padding.t, padding.r, padding.b, padding.l]);\n                        }\n                        _paddingElement.css(paddingElementCSS);\n                        _targetElement.css(textareaCSS);\n                    }\n\n                    //viewport size is padding container because it never has padding, margin and a border.\n                    _viewportSize = getViewportSize();\n\n                    //update Textarea\n                    var textareaSize = _isTextarea ? textareaUpdate() : false;\n                    var textareaSizeChanged = _isTextarea && checkCacheAutoForce(textareaSize, _textareaSizeCache);\n                    var textareaDynOrigSize = _isTextarea && textareaSize ? {\n                        w : textareaDynWidth ? textareaSize._dynamicWidth : textareaSize._originalWidth,\n                        h : textareaDynHeight ? textareaSize._dynamicHeight : textareaSize._originalHeight\n                    } : { };\n                    _textareaSizeCache = textareaSize;\n\n                    //fix height auto / width auto in cooperation with current padding & boxSizing behavior:\n                    if (heightAuto && (heightAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c)) {\n                        /*\n                        if (cssMaxValue.ch)\n                            contentElementCSS[_strMaxMinus + _strHeight] =\n                                (cssMaxValue.ch ? (cssMaxValue.ih - paddingAbsoluteY + (_isBorderBox ? -_borderY : _paddingY))\n                                : _strEmpty);\n                        */\n                        contentElementCSS[_strHeight] = _strAuto;\n                    }\n                    else if (heightAutoChanged || paddingAbsoluteChanged) {\n                        contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n                        contentElementCSS[_strHeight] = _strHundredPercent;\n                    }\n                    if (widthAuto && (widthAutoChanged || paddingAbsoluteChanged || boxSizingChanged || cssMaxValue.c || padding.c || border.c || cssDirectionChanged)) {\n                        /*\n                        if (cssMaxValue.cw)\n                            contentElementCSS[_strMaxMinus + _strWidth] =\n                                (cssMaxValue.cw ? (cssMaxValue.iw - paddingAbsoluteX + (_isBorderBox ? -_borderX : _paddingX)) +\n                                (_nativeScrollbarIsOverlaid.y ? _overlayScrollbarDummySize.y : 0)\n                                : _strEmpty);\n                        */\n                        contentElementCSS[_strWidth] = _strAuto;\n                        contentGlueElementCSS[_strMaxMinus + _strWidth] = _strHundredPercent; //IE Fix\n                    }\n                    else if (widthAutoChanged || paddingAbsoluteChanged) {\n                        contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n                        contentElementCSS[_strWidth] = _strHundredPercent;\n                        contentElementCSS[_strFloat] = _strEmpty;\n                        contentGlueElementCSS[_strMaxMinus + _strWidth] = _strEmpty; //IE Fix\n                    }\n                    if (widthAuto) {\n                        if (!cssMaxValue.cw)\n                            contentElementCSS[_strMaxMinus + _strWidth] = _strEmpty;\n                        //textareaDynOrigSize.w || _strAuto :: doesnt works because applied margin will shift width\n                        contentGlueElementCSS[_strWidth] = _strAuto;\n\n                        contentElementCSS[_strWidth] = _strAuto;\n                        contentElementCSS[_strFloat] = isRTLRight;\n                    }\n                    else {\n                        contentGlueElementCSS[_strWidth] = _strEmpty;\n                    }\n                    if (heightAuto) {\n                        if (!cssMaxValue.ch)\n                            contentElementCSS[_strMaxMinus + _strHeight] = _strEmpty;\n                        //textareaDynOrigSize.h || _contentElementNative[LEXICON.cH] :: use for anti scroll jumping\n                        contentGlueElementCSS[_strHeight] = textareaDynOrigSize.h || _contentElementNative[LEXICON.cH];\n                    }\n                    else {\n                        contentGlueElementCSS[_strHeight] = _strEmpty;\n                    }\n                    if (sizeAutoCapable)\n                        _contentGlueElement.css(contentGlueElementCSS);\n                    _contentElement.css(contentElementCSS);\n\n                    //CHECKPOINT HERE ~\n                    contentElementCSS = {};\n                    contentGlueElementCSS = {};\n\n                    //if [content(host) client / scroll size, or target element direction, or content(host) max-sizes] changed, or force is true\n                    if (hostSizeChanged || contentSizeChanged || textareaSizeChanged || cssDirectionChanged || boxSizingChanged || paddingAbsoluteChanged || widthAutoChanged || widthAuto || heightAutoChanged || heightAuto || cssMaxValue.c || ignoreOverlayScrollbarHidingChanged || overflowBehaviorChanged || clipAlwaysChanged || resizeChanged || scrollbarsVisibilityChanged || scrollbarsAutoHideChanged || scrollbarsDragScrollingChanged || scrollbarsClickScrollingChanged || textareaDynWidthChanged || textareaDynHeightChanged || textareaAutoWrappingChanged) {\n                        var strOverflow = 'overflow';\n                        var strOverflowX = strOverflow + '-x';\n                        var strOverflowY = strOverflow + '-y';\n                        var strHidden = 'hidden';\n                        var strVisible = 'visible';\n                        //decide whether the content overflow must get hidden for correct overflow measuring, it !MUST! be always hidden if the height is auto\n                        var hideOverflow4CorrectMeasuring = _restrictedMeasuring ?\n                        (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) || //it must be hidden if native scrollbars are overlaid\n                        (_viewportSize.w < _nativeScrollbarMinSize.y || _viewportSize.h < _nativeScrollbarMinSize.x) || //it must be hidden if host-element is too small\n                        heightAuto || displayIsHiddenChanged //it must be hidden if height is auto or display was changed\n                            : heightAuto; //if there is not the restricted Measuring bug, it must be hidden if the height is auto\n\n                        //Reset the viewport (very important for natively overlaid scrollbars and zoom change\n                        //don't change the overflow prop as it is very expensive and affects performance !A LOT!\n                        var viewportElementResetCSS = { };\n                        var resetXTmp = _hasOverflowCache.y && _hideOverflowCache.ys && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.y ? _viewportElement.css(isRTLLeft) : -_nativeScrollbarSize.y) : 0;\n                        var resetBottomTmp = _hasOverflowCache.x && _hideOverflowCache.xs && !ignoreOverlayScrollbarHiding && !_nativeScrollbarStyling ? (_nativeScrollbarIsOverlaid.x ? _viewportElement.css(_strBottom) : -_nativeScrollbarSize.x) : 0;\n                        setTopRightBottomLeft(viewportElementResetCSS, _strEmpty);\n                        _viewportElement.css(viewportElementResetCSS);\n                        if(hideOverflow4CorrectMeasuring)\n                            _contentElement.css(strOverflow, strHidden);\n\n                        //measure several sizes:\n                        var contentMeasureElement = getContentMeasureElement();\n                        //in Firefox content element has to have overflow hidden, else element margins aren't calculated properly, this element prevents this bug, but only if scrollbars aren't overlaid\n                        var contentMeasureElementGuaranty = _restrictedMeasuring && !hideOverflow4CorrectMeasuring ? _viewportElementNative : contentMeasureElement;\n                        var contentSize = {\n                            //use clientSize because natively overlaidScrollbars add borders\n                            w: textareaDynOrigSize.w || contentMeasureElement[LEXICON.cW],\n                            h: textareaDynOrigSize.h || contentMeasureElement[LEXICON.cH]\n                        };\n                        var scrollSize = {\n                            w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n                            h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n                        };\n\n                        //apply the correct viewport style and measure viewport size\n                        viewportElementResetCSS[_strBottom] = wasHeightAuto ? _strEmpty : resetBottomTmp;\n                        viewportElementResetCSS[isRTLLeft] = wasWidthAuto ? _strEmpty : resetXTmp;\n                        _viewportElement.css(viewportElementResetCSS);\n                        _viewportSize = getViewportSize();\n\n                        //measure and correct several sizes\n                        var hostSize = getHostSize();\n                        var contentGlueSize = {\n                            //client/scrollSize + AbsolutePadding -> because padding is only applied to the paddingElement if its absolute, so you have to add it manually\n                            //hostSize is clientSize -> so padding should be added manually, right? FALSE! Because content glue is inside hostElement, so we don't have to worry about padding\n                            w: MATH.max((widthAuto ? contentSize.w : scrollSize.w) + paddingAbsoluteX, hostSize.w),\n                            h: MATH.max((heightAuto ? contentSize.h : scrollSize.h) + paddingAbsoluteY, hostSize.h)\n                        };\n                        contentGlueSize.c = checkCacheAutoForce(contentGlueSize, _contentGlueSizeCache);\n                        _contentGlueSizeCache = contentGlueSize;\n\n                        //apply correct contentGlue size\n                        if (sizeAutoCapable) {\n                            //size contentGlue correctly to make sure the element has correct size if the sizing switches to auto\n                            if (contentGlueSize.c || (heightAuto || widthAuto)) {\n                                contentGlueElementCSS[_strWidth] = contentGlueSize.w;\n                                contentGlueElementCSS[_strHeight] = contentGlueSize.h;\n\n                                //textarea-sizes are already calculated correctly at this point\n                                if(!_isTextarea) {\n                                    contentSize = {\n                                        //use clientSize because natively overlaidScrollbars add borders\n                                        w: contentMeasureElement[LEXICON.cW],\n                                        h: contentMeasureElement[LEXICON.cH]\n                                    };\n                                }\n                            }\n                            var textareaCoverCSS = {};\n                            var setContentGlueElementCSSfunction = function(horizontal) {\n                                var scrollbarVars = getScrollbarVars(horizontal);\n                                var wh = scrollbarVars._w_h;\n                                var strWH = scrollbarVars._width_height;\n                                var autoSize = horizontal ? widthAuto : heightAuto;\n                                var borderSize = horizontal ? _borderX : _borderY;\n                                var paddingSize = horizontal ? _paddingX : _paddingY;\n                                var marginSize = horizontal ? _marginX : _marginY;\n                                var maxSize = contentGlueElementCSS[strWH] + (_isBorderBox ? borderSize : -paddingSize);\n\n                                //make contentGlue size -1 if element is not auto sized, to make sure that a resize event happens when the element shrinks\n                                if (!autoSize || (!autoSize && border.c))\n                                    contentGlueElementCSS[strWH] = hostSize[wh] - (_isBorderBox ? 0 : paddingSize + borderSize) - 1 - marginSize;\n\n                                //if size is auto and host is same size as max size, make content glue size +1 to make sure size changes will be detected\n                                if (autoSize && cssMaxValue['c' + wh] && cssMaxValue['i' + wh] === maxSize)\n                                    contentGlueElementCSS[strWH] = maxSize + (_isBorderBox ? 0 : paddingSize) + 1;\n\n                                //if size is auto and host is smaller than size as min size, make content glue size -1 to make sure size changes will be detected (this is only needed if padding is 0)\n                                if (autoSize && (contentSize[wh] < _viewportSize[wh]) && (horizontal && _isTextarea ? !textareaAutoWrapping : true)) {\n                                    if (_isTextarea)\n                                        textareaCoverCSS[strWH] = parseToZeroOrNumber(_textareaCoverElement.css(strWH)) - 1;\n                                    contentGlueElementCSS[strWH] -= 1;\n                                }\n\n                                //make sure content glue size is at least 1\n                                if (contentSize[wh] > 0)\n                                    contentGlueElementCSS[strWH] = MATH.max(1, contentGlueElementCSS[strWH]);\n                            };\n                            setContentGlueElementCSSfunction(true);\n                            setContentGlueElementCSSfunction(false);\n\n                            if (_isTextarea)\n                                _textareaCoverElement.css(textareaCoverCSS);\n                            _contentGlueElement.css(contentGlueElementCSS);\n                        }\n                        if (widthAuto)\n                            contentElementCSS[_strWidth] = _strHundredPercent;\n                        if (widthAuto && !_isBorderBox && !_mutationObserversConnected)\n                            contentElementCSS[_strFloat] = 'none';\n\n                        //apply and reset content style\n                        _contentElement.css(contentElementCSS);\n                        contentElementCSS = {};\n\n                        //measure again, but this time all correct sizes:\n                        var contentScrollSize = {\n                            w: MATH.max(contentMeasureElement[LEXICON.sW], contentMeasureElementGuaranty[LEXICON.sW]),\n                            h: MATH.max(contentMeasureElement[LEXICON.sH], contentMeasureElementGuaranty[LEXICON.sH])\n                        };\n                        contentScrollSize.c = contentSizeChanged = checkCacheAutoForce(contentScrollSize, _contentScrollSizeCache);\n                        _contentScrollSizeCache = contentScrollSize;\n\n                        //remove overflow hidden to restore overflow\n                        if(hideOverflow4CorrectMeasuring)\n                            _contentElement.css(strOverflow, _strEmpty);\n                        \n                        //refresh viewport size after correct measuring\n                        _viewportSize = getViewportSize();\n\n                        hostSize = getHostSize();\n                        hostSizeChanged = checkCacheAutoForce(hostSize, _hostSizeCache);\n                        _hostSizeCache = hostSize;\n\n                        var hideOverflowForceTextarea = _isTextarea && (_viewportSize.w === 0 || _viewportSize.h === 0);\n                        var previousOverflow = _overflowAmountCache;\n                        var overflowBehaviorIsVS = { };\n                        var overflowBehaviorIsVH = { };\n                        var overflowBehaviorIsS = { };\n                        var overflowAmount = { };\n                        var hasOverflow = { };\n                        var hideOverflow = { };\n                        var canScroll = { };\n                        var viewportRect = _paddingElementNative.getBoundingClientRect();\n                        var setOverflowVariables = function(horizontal) {\n                            var scrollbarVars = getScrollbarVars(horizontal);\n                            var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n                            var xyI = scrollbarVarsInverted._x_y;\n                            var xy = scrollbarVars._x_y;\n                            var wh = scrollbarVars._w_h;\n                            var widthHeight = scrollbarVars._width_height;\n                            var scrollMax = _strScroll + scrollbarVars._Left_Top + 'Max';\n                            var fractionalOverflowAmount = viewportRect[widthHeight] ? MATH.abs(viewportRect[widthHeight] - _viewportSize[wh]) : 0;\n                            overflowBehaviorIsVS[xy] = overflowBehavior[xy] === 'v-s';\n                            overflowBehaviorIsVH[xy] = overflowBehavior[xy] === 'v-h';\n                            overflowBehaviorIsS[xy] = overflowBehavior[xy] === 's';\n                            overflowAmount[xy] = MATH.max(0, MATH.round((contentScrollSize[wh] - _viewportSize[wh]) * 100) / 100);\n                            overflowAmount[xy] *= (hideOverflowForceTextarea || (_viewportElementNative[scrollMax] === 0 && fractionalOverflowAmount > 0 && fractionalOverflowAmount < 1)) ? 0 : 1;\n                            hasOverflow[xy] = overflowAmount[xy] > 0;\n\n                            //hideOverflow:\n                            //x || y : true === overflow is hidden by \"overflow: scroll\" OR \"overflow: hidden\"\n                            //xs || ys : true === overflow is hidden by \"overflow: scroll\"\n                            hideOverflow[xy] = overflowBehaviorIsVS[xy] || overflowBehaviorIsVH[xy] ? (hasOverflow[xyI] && !overflowBehaviorIsVS[xyI] && !overflowBehaviorIsVH[xyI]) : hasOverflow[xy];\n                            hideOverflow[xy + 's'] = hideOverflow[xy] ? (overflowBehaviorIsS[xy] || overflowBehaviorIsVS[xy]) : false;\n\n                            canScroll[xy] = hasOverflow[xy] && hideOverflow[xy + 's'];\n                        };\n                        setOverflowVariables(true);\n                        setOverflowVariables(false);\n\n                        overflowAmount.c = checkCacheAutoForce(overflowAmount, _overflowAmountCache);\n                        _overflowAmountCache = overflowAmount;\n                        hasOverflow.c = checkCacheAutoForce(hasOverflow, _hasOverflowCache);\n                        _hasOverflowCache = hasOverflow;\n                        hideOverflow.c = checkCacheAutoForce(hideOverflow, _hideOverflowCache);\n                        _hideOverflowCache = hideOverflow;\n\n                        //if native scrollbar is overlay at x OR y axis, prepare DOM\n                        if (_nativeScrollbarIsOverlaid.x || _nativeScrollbarIsOverlaid.y) {\n                            var borderDesign = 'px solid transparent';\n                            var contentArrangeElementCSS = { };\n                            var arrangeContent = { };\n                            var arrangeChanged = force;\n                            var setContentElementCSS;\n\n                            if (hasOverflow.x || hasOverflow.y) {\n                                arrangeContent.w = _nativeScrollbarIsOverlaid.y && hasOverflow.y ? contentScrollSize.w + _overlayScrollbarDummySize.y : _strEmpty;\n                                arrangeContent.h = _nativeScrollbarIsOverlaid.x && hasOverflow.x ? contentScrollSize.h + _overlayScrollbarDummySize.x : _strEmpty;\n                                arrangeChanged = checkCacheAutoForce(arrangeContent, _arrangeContentSizeCache);\n                                _arrangeContentSizeCache = arrangeContent;\n                            }\n\n                            if (hasOverflow.c || hideOverflow.c || contentScrollSize.c || cssDirectionChanged || widthAutoChanged || heightAutoChanged || widthAuto || heightAuto || ignoreOverlayScrollbarHidingChanged) {\n                                contentElementCSS[_strMarginMinus + isRTLRight] = contentElementCSS[_strBorderMinus + isRTLRight] = _strEmpty;\n                                setContentElementCSS = function(horizontal) {\n                                    var scrollbarVars = getScrollbarVars(horizontal);\n                                    var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n                                    var xy = scrollbarVars._x_y;\n                                    var strDirection = horizontal ? _strBottom : isRTLLeft;\n                                    var invertedAutoSize = horizontal ? heightAuto : widthAuto;\n\n                                    if (_nativeScrollbarIsOverlaid[xy] && hasOverflow[xy] && hideOverflow[xy + 's']) {\n                                        contentElementCSS[_strMarginMinus + strDirection] = invertedAutoSize ? (ignoreOverlayScrollbarHiding ? _strEmpty : _overlayScrollbarDummySize[xy]) : _strEmpty;\n                                        contentElementCSS[_strBorderMinus + strDirection] = ((horizontal ? !invertedAutoSize : true) && !ignoreOverlayScrollbarHiding) ? (_overlayScrollbarDummySize[xy] + borderDesign) : _strEmpty;\n                                    }\n                                    else {\n                                        arrangeContent[scrollbarVarsInverted._w_h] =\n                                        contentElementCSS[_strMarginMinus + strDirection] =\n                                        contentElementCSS[_strBorderMinus + strDirection] = _strEmpty;\n                                        arrangeChanged = true;\n                                    }\n                                };\n\n                                if (_nativeScrollbarStyling) {\n                                    if (ignoreOverlayScrollbarHiding) \n                                        removeClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n                                    else\n                                        addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n                                }\n                                else {\n                                    setContentElementCSS(true);\n                                    setContentElementCSS(false);\n                                }\n                            }\n                            if (ignoreOverlayScrollbarHiding) {\n                                arrangeContent.w = arrangeContent.h = _strEmpty;\n                                arrangeChanged = true;\n                            }\n                            if (arrangeChanged && !_nativeScrollbarStyling) {\n                                contentArrangeElementCSS[_strWidth] = hideOverflow.y ? arrangeContent.w : _strEmpty;\n                                contentArrangeElementCSS[_strHeight] = hideOverflow.x ? arrangeContent.h : _strEmpty;\n\n                                if (!_contentArrangeElement) {\n                                    _contentArrangeElement = FRAMEWORK(generateDiv(_classNameContentArrangeElement));\n                                    _viewportElement.prepend(_contentArrangeElement);\n                                }\n                                _contentArrangeElement.css(contentArrangeElementCSS);\n                            }\n                            _contentElement.css(contentElementCSS);\n                        }\n\n                        var viewportElementCSS = {};\n                        var paddingElementCSS = {};\n                        var setViewportCSS;\n                        if (hostSizeChanged || hasOverflow.c || hideOverflow.c || contentScrollSize.c || overflowBehaviorChanged || boxSizingChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged || clipAlwaysChanged || heightAutoChanged) {\n                            viewportElementCSS[isRTLRight] = _strEmpty;\n                            setViewportCSS = function(horizontal) {\n                                var scrollbarVars = getScrollbarVars(horizontal);\n                                var scrollbarVarsInverted = getScrollbarVars(!horizontal);\n                                var xy = scrollbarVars._x_y;\n                                var XY = scrollbarVars._X_Y;\n                                var strDirection = horizontal ? _strBottom : isRTLLeft;\n\n                                var reset = function () {\n                                    viewportElementCSS[strDirection] = _strEmpty;\n                                    _contentBorderSize[scrollbarVarsInverted._w_h] = 0;\n                                };\n                                if (hasOverflow[xy] && hideOverflow[xy + 's']) {\n                                    viewportElementCSS[strOverflow + XY] = _strScroll;\n                                    if (ignoreOverlayScrollbarHiding || _nativeScrollbarStyling) {\n                                        reset();\n                                    }\n                                    else {\n                                        viewportElementCSS[strDirection] =  -(_nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[xy] : _nativeScrollbarSize[xy]);\n                                        _contentBorderSize[scrollbarVarsInverted._w_h] = _nativeScrollbarIsOverlaid[xy] ? _overlayScrollbarDummySize[scrollbarVarsInverted._x_y] : 0;\n                                    }\n                                } else {\n                                    viewportElementCSS[strOverflow + XY] = _strEmpty;\n                                    reset();\n                                }\n                            };\n                            setViewportCSS(true);\n                            setViewportCSS(false);\n                            \n                            // if the scroll container is too small and if there is any overflow with no overlay scrollbar (and scrollbar styling isn't possible), \n                            // make viewport element greater in size (Firefox hide Scrollbars fix)\n                            // because firefox starts hiding scrollbars on too small elements\n                            // with this behavior the overflow calculation may be incorrect or the scrollbars would appear suddenly\n                            // https://bugzilla.mozilla.org/show_bug.cgi?id=292284\n                            if (!_nativeScrollbarStyling \n                                && (_viewportSize.h < _nativeScrollbarMinSize.x || _viewportSize.w < _nativeScrollbarMinSize.y)\n                                && ((hasOverflow.x && hideOverflow.x && !_nativeScrollbarIsOverlaid.x) || (hasOverflow.y && hideOverflow.y && !_nativeScrollbarIsOverlaid.y))) {\n                                viewportElementCSS[_strPaddingMinus + _strTop] = _nativeScrollbarMinSize.x;\n                                viewportElementCSS[_strMarginMinus + _strTop] = -_nativeScrollbarMinSize.x;\n\n                                viewportElementCSS[_strPaddingMinus + isRTLRight] = _nativeScrollbarMinSize.y;\n                                viewportElementCSS[_strMarginMinus + isRTLRight] = -_nativeScrollbarMinSize.y;\n                            }\n                            else {\n                                viewportElementCSS[_strPaddingMinus + _strTop] =\n                                viewportElementCSS[_strMarginMinus + _strTop] =\n                                viewportElementCSS[_strPaddingMinus + isRTLRight] =\n                                viewportElementCSS[_strMarginMinus + isRTLRight] = _strEmpty;\n                            }\n                            viewportElementCSS[_strPaddingMinus + isRTLLeft] =\n                            viewportElementCSS[_strMarginMinus + isRTLLeft] = _strEmpty;\n\n                            //if there is any overflow (x OR y axis) and this overflow shall be hidden, make overflow hidden, else overflow visible\n                            if ((hasOverflow.x && hideOverflow.x) || (hasOverflow.y && hideOverflow.y) || hideOverflowForceTextarea) {\n                                //only hide if is Textarea\n                                if (_isTextarea && hideOverflowForceTextarea) {\n                                    paddingElementCSS[strOverflowX] =\n                                    paddingElementCSS[strOverflowY] = strHidden;\n                                }\n                            }\n                            else {\n                                if (!clipAlways || (overflowBehaviorIsVH.x || overflowBehaviorIsVS.x || overflowBehaviorIsVH.y || overflowBehaviorIsVS.y)) {\n                                    //only un-hide if Textarea\n                                    if (_isTextarea) {\n                                        paddingElementCSS[strOverflowX] =\n                                        paddingElementCSS[strOverflowY] = _strEmpty;\n                                    }\n                                    viewportElementCSS[strOverflowX] =\n                                    viewportElementCSS[strOverflowY] = strVisible;\n                                }\n                            }\n\n                            _paddingElement.css(paddingElementCSS);\n                            _viewportElement.css(viewportElementCSS);\n                            viewportElementCSS = { };\n\n                            //force soft redraw in webkit because without the scrollbars will may appear because DOM wont be redrawn under special conditions\n                            if ((hasOverflow.c || boxSizingChanged || widthAutoChanged || heightAutoChanged) && !(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)) {\n                                var elementStyle = _contentElementNative[LEXICON.s];\n                                var dump;\n                                elementStyle.webkitTransform = 'scale(1)';\n                                elementStyle.display = 'run-in';\n                                dump = _contentElementNative[LEXICON.oH];\n                                elementStyle.display = _strEmpty; //|| dump; //use dump to prevent it from deletion if minify\n                                elementStyle.webkitTransform = _strEmpty;\n                            }\n                            /*\n                            //force hard redraw in webkit if native overlaid scrollbars shall appear\n                            if (ignoreOverlayScrollbarHidingChanged && ignoreOverlayScrollbarHiding) {\n                                _hostElement.hide();\n                                var dump = _hostElementNative[LEXICON.oH];\n                                _hostElement.show();\n                            }\n                            */\n                        }\n\n                        //change to direction RTL and width auto Bugfix in Webkit\n                        //without this fix, the DOM still thinks the scrollbar is LTR and thus the content is shifted to the left\n                        contentElementCSS = {};\n                        if (cssDirectionChanged || widthAutoChanged || heightAutoChanged) {\n                            if (_isRTL && widthAuto) {\n                                var floatTmp = _contentElement.css(_strFloat);\n                                var posLeftWithoutFloat = MATH.round(_contentElement.css(_strFloat, _strEmpty).css(_strLeft, _strEmpty).position().left);\n                                _contentElement.css(_strFloat, floatTmp);\n                                var posLeftWithFloat = MATH.round(_contentElement.position().left);\n\n                                if (posLeftWithoutFloat !== posLeftWithFloat)\n                                    contentElementCSS[_strLeft] = posLeftWithoutFloat;\n                            }\n                            else {\n                                contentElementCSS[_strLeft] = _strEmpty;\n                            }\n                        }\n                        _contentElement.css(contentElementCSS);\n\n                        //handle scroll position\n                        if (_isTextarea && contentSizeChanged) {\n                            var textareaInfo = getTextareaInfo();\n                            if (textareaInfo) {\n                                var textareaRowsChanged = _textareaInfoCache === undefined ? true : textareaInfo._rows !== _textareaInfoCache._rows;\n                                var cursorRow = textareaInfo._cursorRow;\n                                var cursorCol = textareaInfo._cursorColumn;\n                                var widestRow = textareaInfo._widestRow;\n                                var lastRow = textareaInfo._rows;\n                                var lastCol = textareaInfo._columns;\n                                var cursorPos = textareaInfo._cursorPosition;\n                                var cursorMax = textareaInfo._cursorMax;\n                                var cursorIsLastPosition = (cursorPos >= cursorMax && _textareaHasFocus);\n                                var textareaScrollAmount = {\n                                    x: (!textareaAutoWrapping && (cursorCol === lastCol && cursorRow === widestRow)) ? _overflowAmountCache.x : -1,\n                                    y: (textareaAutoWrapping ? cursorIsLastPosition || textareaRowsChanged && (previousOverflow !== undefined ? (currScroll.y === previousOverflow.y) : false) : (cursorIsLastPosition || textareaRowsChanged) && cursorRow === lastRow) ? _overflowAmountCache.y : -1\n                                };\n                                currScroll.x = textareaScrollAmount.x > -1 ? (_isRTL && _normalizeRTLCache && _rtlScrollBehavior.i ? 0 : textareaScrollAmount.x) : currScroll.x; //if inverted, scroll to 0 -> normalized this means to max scroll offset.\n                                currScroll.y = textareaScrollAmount.y > -1 ? textareaScrollAmount.y : currScroll.y;\n                            }\n                            _textareaInfoCache = textareaInfo;\n                        }\n                        if (_isRTL && _rtlScrollBehavior.i && _nativeScrollbarIsOverlaid.y && hasOverflow.x && _normalizeRTLCache)\n                            currScroll.x += _contentBorderSize.w || 0;\n                        if(widthAuto)\n                            _hostElement[_strScrollLeft](0);\n                        if(heightAuto)\n                            _hostElement[_strScrollTop](0);\n                        _viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);\n\n                        //scrollbars management:\n                        var scrollbarsVisibilityVisible = scrollbarsVisibility === 'v';\n                        var scrollbarsVisibilityHidden = scrollbarsVisibility === 'h';\n                        var scrollbarsVisibilityAuto = scrollbarsVisibility === 'a';\n\n                        var showScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, true, canScroll.x);\n                        var showScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, true, canScroll.y);\n                        var hideScrollbarH = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, true, false, canScroll.x);\n                        var hideScrollbarV = COMPATIBILITY.bind(refreshScrollbarAppearance, 0, false, false, canScroll.y);\n\n                        //manage class name which indicates scrollable overflow\n                        if (hideOverflow.x || hideOverflow.y)\n                            addClass(_hostElement, _classNameHostOverflow);\n                        else\n                            removeClass(_hostElement, _classNameHostOverflow);\n                        if (hideOverflow.x)\n                            addClass(_hostElement, _classNameHostOverflowX);\n                        else\n                            removeClass(_hostElement, _classNameHostOverflowX);\n                        if (hideOverflow.y)\n                            addClass(_hostElement, _classNameHostOverflowY);\n                        else\n                            removeClass(_hostElement, _classNameHostOverflowY);\n\n                        //add or remove rtl class name for styling purposes\n                        if (cssDirectionChanged) {\n                            if (_isRTL)\n                                addClass(_hostElement, _classNameHostRTL);\n                            else\n                                removeClass(_hostElement, _classNameHostRTL);\n                        }\n\n                        //manage the resize feature (CSS3 resize \"polyfill\" for this plugin)\n                        if (_isBody)\n                            addClass(_hostElement, _classNameHostResizeDisabled);\n                        if (resizeChanged) {\n                            var setupCornerEvents = function(remove) {\n                                if(_supportPassiveEvents)\n                                    setupPassiveEventListener(_scrollbarCornerElement, _strMouseTouchDownEvent, _resizeOnMouseTouchDown, remove, true);\n                                else\n                                    _scrollbarCornerElement[remove ? 'off' : 'on'](_strMouseTouchDownEvent, _resizeOnMouseTouchDown);\n                            };\n                            removeClass(_scrollbarCornerElement, [ \n                                    _classNameScrollbarCornerResize,\n                                    _classNameScrollbarCornerResizeB,\n                                    _classNameScrollbarCornerResizeH,\n                                    _classNameScrollbarCornerResizeV].join(_strSpace));\n                            if (_resizeNone) {\n                                addClass(_hostElement, _classNameHostResizeDisabled);\n                                setupCornerEvents(true);\n                            }\n                            else {\n                                removeClass(_hostElement, _classNameHostResizeDisabled);\n                                addClass(_scrollbarCornerElement, _classNameScrollbarCornerResize);\n                                if (_resizeBoth)\n                                    addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeB);\n                                else if (_resizeHorizontal)\n                                    addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeH);\n                                else if (_resizeVertical)\n                                    addClass(_scrollbarCornerElement, _classNameScrollbarCornerResizeV);\n\n                                setupCornerEvents(true);\n                                setupCornerEvents();\n                            }\n                        }\n\n                        //manage the scrollbars general visibility + the scrollbar interactivity (unusable class name)\n                        if (scrollbarsVisibilityChanged || overflowBehaviorChanged || hideOverflow.c || hasOverflow.c || ignoreOverlayScrollbarHidingChanged) {\n                            if (ignoreOverlayScrollbarHiding) {\n                                if (ignoreOverlayScrollbarHidingChanged) {\n                                    removeClass(_hostElement, _classNameHostScrolling);\n                                    if (ignoreOverlayScrollbarHiding) {\n                                        hideScrollbarH();\n                                        hideScrollbarV();\n                                    }\n                                }\n                            }\n                            else if (scrollbarsVisibilityAuto) {\n                                if (canScroll.x)\n                                    showScrollbarH();\n                                else\n                                    hideScrollbarH();\n\n                                if (canScroll.y)\n                                    showScrollbarV();\n                                else\n                                    hideScrollbarV();\n                            }\n                            else if (scrollbarsVisibilityVisible) {\n                                showScrollbarH();\n                                showScrollbarV();\n                            }\n                            else if (scrollbarsVisibilityHidden) {\n                                hideScrollbarH();\n                                hideScrollbarV();\n                            }\n                        }\n\n                        //manage the scrollbars auto hide feature (auto hide them after specific actions)\n                        if (scrollbarsAutoHideChanged || ignoreOverlayScrollbarHidingChanged) {\n                            if (_scrollbarsAutoHideLeave || _scrollbarsAutoHideMove) {\n                                setupHostMouseTouchEvents(true);\n                                setupHostMouseTouchEvents();\n                            }\n                            else {\n                                setupHostMouseTouchEvents(true);\n                            }\n\n                            if (_scrollbarsAutoHideNever)\n                                refreshScrollbarsAutoHide(true);\n                            else\n                                refreshScrollbarsAutoHide(false, true);\n                        }\n\n                        //manage scrollbars handle length & offset - don't remove!\n                        if (hostSizeChanged || overflowAmount.c || heightAutoChanged || widthAutoChanged || resizeChanged || boxSizingChanged || paddingAbsoluteChanged || ignoreOverlayScrollbarHidingChanged || cssDirectionChanged) {\n                            refreshScrollbarHandleLength(true);\n                            refreshScrollbarHandleOffset(true);\n                            refreshScrollbarHandleLength(false);\n                            refreshScrollbarHandleOffset(false);\n                        }\n\n                        //manage interactivity\n                        if (scrollbarsClickScrollingChanged)\n                            refreshScrollbarsInteractive(true, scrollbarsClickScrolling);\n                        if (scrollbarsDragScrollingChanged)\n                            refreshScrollbarsInteractive(false, scrollbarsDragScrolling);\n\n                        //callbacks:\n                        if (cssDirectionChanged) {\n                            dispatchCallback(\"onDirectionChanged\", {\n                                isRTL: _isRTL,\n                                dir: cssDirection\n                            });\n                        }\n                        if (hostSizeChanged) {\n                            dispatchCallback(\"onHostSizeChanged\", {\n                                width: _hostSizeCache.w,\n                                height: _hostSizeCache.h\n                            });\n                        }\n                        if (contentSizeChanged) {\n                            dispatchCallback(\"onContentSizeChanged\", {\n                                width: _contentScrollSizeCache.w,\n                                height: _contentScrollSizeCache.h\n                            });\n                        }\n                        if (hasOverflow.c || hideOverflow.c) {\n                            dispatchCallback(\"onOverflowChanged\", {\n                                x: hasOverflow.x,\n                                y: hasOverflow.y,\n                                xScrollable: hideOverflow.xs,\n                                yScrollable: hideOverflow.ys,\n                                clipped: hideOverflow.x || hideOverflow.y\n                            });\n                        }\n                        if (overflowAmount.c) {\n                            dispatchCallback(\"onOverflowAmountChanged\", {\n                                x: overflowAmount.x,\n                                y: overflowAmount.y\n                            });\n                        }\n                    }\n\n                    //fix body min size\n                    if (_isBody && _bodyMinSizeCache && (_hasOverflowCache.c || _bodyMinSizeCache.c)) {\n                        //its possible that no min size was measured until now, because the content arrange element was just added now, in this case, measure now the min size.\n                        if (!_bodyMinSizeCache.f)\n                            bodyMinSizeChanged();\n                        if (_nativeScrollbarIsOverlaid.y && _hasOverflowCache.x)\n                            _contentElement.css(_strMinMinus + _strWidth, _bodyMinSizeCache.w + _overlayScrollbarDummySize.y);\n                        if (_nativeScrollbarIsOverlaid.x && _hasOverflowCache.y)\n                            _contentElement.css(_strMinMinus + _strHeight, _bodyMinSizeCache.h + _overlayScrollbarDummySize.x);\n                        _bodyMinSizeCache.c = false;\n                    }\n\n                    //freezeResizeObserver(_sizeObserverElement, false);\n                    //freezeResizeObserver(_sizeAutoObserverElement, false);\n\n                    dispatchCallback(\"onUpdated\", { forced: force });\n                }\n\n                \n                //==== Options ====//\n\n                /**\n                 * Sets new options but doesn't call the update method.\n                 * @param newOptions The object which contains the new options.\n                 * @returns {*} A object which contains the changed options.\n                 */\n                function setOptions(newOptions) {\n                    var validatedOpts = _pluginsOptions._validate(newOptions, _pluginsOptions._template, true, _currentOptions)\n\n                    _currentOptions = extendDeep({}, _currentOptions, validatedOpts._default);\n                    _currentPreparedOptions = extendDeep({}, _currentPreparedOptions, validatedOpts._prepared);\n                    \n                    return validatedOpts._prepared;\n                }\n\n\n                //==== Structure ====//\n\n                /**\n                 * Builds or destroys the wrapper and helper DOM elements.\n                 * @param destroy Indicates whether the DOM shall be build or destroyed.\n                 */\n                function setupStructureDOM(destroy) {\n                    var adoptAttrs = _currentPreparedOptions.textarea.inheritedAttrs;\n                    var adoptAttrsMap = { };\n                    var applyAdoptedAttrs = function() {\n                        var applyAdoptedAttrsElm = destroy ? _targetElement : _hostElement;\n                        each(adoptAttrsMap, function(k, v) {\n                            if(type(v) == TYPES.s) {\n                                if(k == LEXICON.c)\n                                    applyAdoptedAttrsElm.addClass(v);\n                                else\n                                    applyAdoptedAttrsElm.attr(k, v);\n                            }\n                        });\n                    };\n                    var hostElementClassNames = [\n                        _classNameHostElement,\n                        _classNameHostTextareaElement,\n                        _classNameHostResizeDisabled,\n                        _classNameHostRTL,\n                        _classNameHostScrollbarHorizontalHidden,\n                        _classNameHostScrollbarVerticalHidden,\n                        _classNameHostTransition,\n                        _classNameHostScrolling,\n                        _classNameHostOverflow,\n                        _classNameHostOverflowX,\n                        _classNameHostOverflowY,\n                        _classNameThemeNone,\n                        _classNameTextareaElement,\n                        _classNameTextInherit,\n                        _classNameCache].join(_strSpace);\n                    adoptAttrs = type(adoptAttrs) == TYPES.s ? adoptAttrs.split(' ') : adoptAttrs;\n                    if(type(adoptAttrs) == TYPES.a) {\n                        each(adoptAttrs, function(i, v) {\n                            if(type(v) == TYPES.s)\n                                adoptAttrsMap[v] = destroy ? _hostElement.attr(v) : _targetElement.attr(v);\n                        });\n                    }\n\n                    if(!destroy) {\n                        if (_isTextarea) {\n                            var hostElementCSS = {};\n                            var parent = _targetElement.parent();\n                            _isTextareaHostGenerated = !(parent.hasClass(_classNameHostTextareaElement) && parent.children()[LEXICON.l] === 1);\n\n                            if (!_currentPreparedOptions.sizeAutoCapable) {\n                                hostElementCSS[_strWidth] = _targetElement.css(_strWidth);\n                                hostElementCSS[_strHeight] = _targetElement.css(_strHeight);\n                            }\n                            if(_isTextareaHostGenerated)\n                                _targetElement.wrap(generateDiv(_classNameHostTextareaElement));\n\n                            _hostElement = _targetElement.parent();\n                            _hostElement.css(hostElementCSS)\n                                .wrapInner(generateDiv(_classNameContentElement + _strSpace + _classNameTextInherit))\n                                .wrapInner(generateDiv(_classNameViewportElement + _strSpace + _classNameTextInherit))\n                                .wrapInner(generateDiv(_classNamePaddingElement + _strSpace + _classNameTextInherit));\n                            _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\n                            _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\n                            _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\n                            _textareaCoverElement = FRAMEWORK(generateDiv(_classNameTextareaCoverElement));\n                            _contentElement.prepend(_textareaCoverElement);\n\n                            addClass(_targetElement, _classNameTextareaElement + _strSpace + _classNameTextInherit);\n\n                            if(_isTextareaHostGenerated)\n                                applyAdoptedAttrs();\n                        }\n                        else {\n                            _hostElement = _targetElement;\n                            _hostElement.wrapInner(generateDiv(_classNameContentElement))\n                                .wrapInner(generateDiv(_classNameViewportElement))\n                                .wrapInner(generateDiv(_classNamePaddingElement));\n                            _contentElement = findFirst(_hostElement, _strDot + _classNameContentElement);\n                            _viewportElement = findFirst(_hostElement, _strDot + _classNameViewportElement);\n                            _paddingElement = findFirst(_hostElement, _strDot + _classNamePaddingElement);\n\n                            addClass(_targetElement, _classNameHostElement);\n                        }\n                        \n                        if (_nativeScrollbarStyling)\n                            addClass(_viewportElement, _classNameViewportNativeScrollbarsInvisible);\n                        if(_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y)\n                            addClass(_viewportElement, _classNameViewportNativeScrollbarsOverlaid);\n                        if (_isBody)\n                            addClass(_htmlElement, _classNameHTMLElement);\n\n                        _sizeObserverElement = FRAMEWORK(generateDiv('os-resize-observer-host'));\n                        _hostElement.prepend(_sizeObserverElement);\n\n                        _sizeObserverElementNative = _sizeObserverElement[0];\n                        _hostElementNative = _hostElement[0];\n                        _paddingElementNative = _paddingElement[0];\n                        _viewportElementNative = _viewportElement[0];\n                        _contentElementNative = _contentElement[0];\n                    }\n                    else {\n                        _contentElement.contents()\n                            .unwrap()\n                            .unwrap()\n                            .unwrap();\n\n                        removeClass(_hostElement, hostElementClassNames);\n                        if (_isTextarea) {\n                            _targetElement.removeAttr(LEXICON.s);\n\n                            if(_isTextareaHostGenerated)\n                                applyAdoptedAttrs();\n\n                            removeClass(_targetElement, hostElementClassNames);\n                            remove(_textareaCoverElement);\n\n                            if(_isTextareaHostGenerated) {\n                                _targetElement.unwrap();\n                                remove(_hostElement);\n                            }\n                            else {\n                                addClass(_hostElement, _classNameHostTextareaElement);\n                            }\n                        }\n                        else {\n                            removeClass(_targetElement, _classNameHostElement);\n                        }\n\n                        if (_isBody)\n                            removeClass(_htmlElement, _classNameHTMLElement);\n\n                        remove(_sizeObserverElement);\n                    }\n                }\n\n                /**\n                 * Adds or removes all wrapper elements interactivity events.\n                 * @param destroy Indicates whether the Events shall be added or removed.\n                 */\n                function setupStructureEvents(destroy) {\n                    var textareaKeyDownRestrictedKeyCodes = [\n                        112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123,    //F1 to F12\n                        33, 34,                                                   //page up, page down\n                        37, 38, 39, 40,                                           //left, up, right, down arrows\n                        16, 17, 18, 19, 20, 144                                   //Shift, Ctrl, Alt, Pause, CapsLock, NumLock\n                    ];\n                    var textareaKeyDownKeyCodesList = [ ];\n                    var textareaUpdateIntervalID;\n                    var scrollStopDelay = 175;\n                    var scrollStopTimeoutId;\n                    var strOnOff = destroy ? 'off' : 'on';\n                    var updateTextarea;\n                    var viewportOnScroll;\n\n                    if(!destroy && _isTextarea) {\n                        _textareaEvents = { };\n                        updateTextarea = function(doClearInterval) {\n                            textareaUpdate();\n                            _base.update(_strAuto);\n                            if(doClearInterval)\n                                clearInterval(textareaUpdateIntervalID);\n                        };\n                        _textareaEvents[_strScroll] = function(event) {\n                            _targetElement[_strScrollLeft](_rtlScrollBehavior.i && _normalizeRTLCache ? 9999999 : 0);\n                            _targetElement[_strScrollTop](0);\n                            COMPATIBILITY.prvD(event);\n                            COMPATIBILITY.stpP(event);\n                            return false;\n                        };\n                        _textareaEvents['drop'] = function() {\n                            setTimeout(function () {\n                                if(!_destroyed)\n                                    updateTextarea();\n                            }, 50);\n                        };\n                        _textareaEvents['focus'] = function() {\n                            _textareaHasFocus = true;\n                        };\n                        _textareaEvents['focusout'] = function() {\n                            _textareaHasFocus = false;\n                            textareaKeyDownKeyCodesList = [ ];\n                            updateTextarea(true);\n                        };\n                        if (_msieVersion > 9 || !_autoUpdateRecommended) {\n                            _textareaEvents['input'] = function textareaOnInput() {\n                                updateTextarea();\n                            }\n                        }\n                        else {\n                            _textareaEvents[_strKeyDownEvent] = function textareaOnKeyDown(event) {\n                                var keyCode = event.keyCode;\n                                if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)\n                                    return;\n                                if (!textareaKeyDownKeyCodesList.length) {\n                                    updateTextarea();\n                                    textareaUpdateIntervalID = setInterval(updateTextarea, 1000 / 60);\n                                }\n                                if (inArray(keyCode, textareaKeyDownKeyCodesList) === -1)\n                                    textareaKeyDownKeyCodesList.push(keyCode);\n                            };\n                            _textareaEvents[_strKeyUpEvent] = function(event) {\n                                var keyCode = event.keyCode;\n                                var index = inArray(keyCode, textareaKeyDownKeyCodesList);\n\n                                if (inArray(keyCode, textareaKeyDownRestrictedKeyCodes) > -1)\n                                    return;\n                                if (index > -1)\n                                    textareaKeyDownKeyCodesList.splice(index, 1);\n                                if (!textareaKeyDownKeyCodesList.length)\n                                    updateTextarea(true);\n                            };\n                        }\n                    }\n\n                    if (_isTextarea) {\n                        each(_textareaEvents, function(key, value) {\n                            _targetElement[strOnOff](key, value);\n                        });\n                    }\n                    else {\n                        _contentElement[strOnOff](_strTransitionEndEvent, function (event) {\n                            if (_autoUpdateCache === true)\n                                return;\n                            event = event.originalEvent || event;\n                            if (isSizeAffectingCSSProperty(event.propertyName))\n                                _base.update(_strAuto);\n                        });\n                    }\n\n                    if(!destroy) {\n                        viewportOnScroll = function(event) {\n                            if (!_sleeping) {\n                                if (scrollStopTimeoutId !== undefined)\n                                    clearTimeout(scrollStopTimeoutId);\n                                else {\n                                    if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n                                        refreshScrollbarsAutoHide(true);\n\n                                    if (!nativeOverlayScrollbarsAreActive())\n                                        addClass(_hostElement, _classNameHostScrolling);\n\n                                    dispatchCallback(\"onScrollStart\", event);\n                                }\n\n                                //if a scrollbars handle gets dragged, the mousemove event is responsible for refreshing the handle offset\n                                //because if CSS scroll-snap is used, the handle offset gets only refreshed on every snap point\n                                //this looks laggy & clunky, it looks much better if the offset refreshes with the mousemove\n                                if(!_scrollbarsHandlesDefineScrollPos) {\n                                    refreshScrollbarHandleOffset(true);\n                                    refreshScrollbarHandleOffset(false);\n                                }\n                                dispatchCallback(\"onScroll\", event);\n\n                                scrollStopTimeoutId = setTimeout(function () {\n                                    if(!_destroyed) {\n                                        //OnScrollStop:\n                                        clearTimeout(scrollStopTimeoutId);\n                                        scrollStopTimeoutId = undefined;\n\n                                        if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n                                            refreshScrollbarsAutoHide(false);\n\n                                        if (!nativeOverlayScrollbarsAreActive())\n                                            removeClass(_hostElement, _classNameHostScrolling);\n\n                                        dispatchCallback(\"onScrollStop\", event);\n                                    }\n                                }, scrollStopDelay);\n                            }\n                        };\n\n                        if (_supportPassiveEvents)\n                            setupPassiveEventListener(_viewportElement, _strScroll, viewportOnScroll);\n                        else\n                            _viewportElement.on(_strScroll, viewportOnScroll);\n                    }\n                }\n\n\n\n                //==== Scrollbars ====//\n\n                /**\n                 * Builds or destroys all scrollbar DOM elements (scrollbar, track, handle)\n                 * @param destroy Indicates whether the DOM shall be build or destroyed.\n                 */\n                function setupScrollbarsDOM(destroy) {\n                    if(!destroy) {\n                        _scrollbarHorizontalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarHorizontal));\n                        _scrollbarHorizontalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));\n                        _scrollbarHorizontalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));\n                        _scrollbarVerticalElement = FRAMEWORK(generateDiv(_classNameScrollbar + _strSpace + _classNameScrollbarVertical));\n                        _scrollbarVerticalTrackElement = FRAMEWORK(generateDiv(_classNameScrollbarTrack));\n                        _scrollbarVerticalHandleElement = FRAMEWORK(generateDiv(_classNameScrollbarHandle));\n\n                        _scrollbarHorizontalElement.append(_scrollbarHorizontalTrackElement);\n                        _scrollbarHorizontalTrackElement.append(_scrollbarHorizontalHandleElement);\n                        _scrollbarVerticalElement.append(_scrollbarVerticalTrackElement);\n                        _scrollbarVerticalTrackElement.append(_scrollbarVerticalHandleElement);\n\n                        _paddingElement.after(_scrollbarVerticalElement);\n                        _paddingElement.after(_scrollbarHorizontalElement);\n                    }\n                    else {\n                        remove(_scrollbarHorizontalElement);\n                        remove(_scrollbarVerticalElement);\n                    }\n                }\n\n                /**\n                 * Initializes all scrollbar interactivity events. (track and handle dragging, clicking, scrolling)\n                 * @param isHorizontal True if the target scrollbar is the horizontal scrollbar, false if the target scrollbar is the vertical scrollbar.\n                 */\n                function setupScrollbarEvents(isHorizontal) {\n                    var scrollbarVars = getScrollbarVars(isHorizontal);\n                    var scrollbarVarsInfo = scrollbarVars._info;\n                    var insideIFrame = _windowElementNative.top !== _windowElementNative;\n                    var xy = scrollbarVars._x_y;\n                    var XY = scrollbarVars._X_Y;\n                    var scroll = _strScroll + scrollbarVars._Left_Top;\n                    var strActive = 'active';\n                    var strSnapHandle = 'snapHandle';\n                    var scrollDurationFactor = 1;\n                    var increaseDecreaseScrollAmountKeyCodes = [ 16, 17 ]; //shift, ctrl\n                    var trackTimeout;\n                    var mouseDownScroll;\n                    var mouseDownOffset;\n                    var mouseDownInvertedScale;\n                    \n                    function setupEvent(element, eventNames, listener) {\n                        var collected = type(eventNames) == TYPES.a && type(listener) == TYPES.a;\n                        var i = 0;\n                        \n                        if(collected) {\n                            for (; i < eventNames[LEXICON.l]; i++)\n                                setupEvent(element, eventNames[i], listener[i]);\n                        }\n                        else {\n                            if(_supportPassiveEvents)\n                                setupPassiveEventListener(element, eventNames, listener, false, true);\n                            else\n                                element.on(eventNames, listener);\n                        }\n                    }\n                    function getPointerPosition(event) {\n                        return _msieVersion && insideIFrame ? event['screen' + XY] : COMPATIBILITY.page(event)[xy]; //use screen coordinates in EDGE & IE because the page values are incorrect in frames.\n                    }\n                    function getPreparedScrollbarsOption(name) {\n                        return _currentPreparedOptions.scrollbars[name];\n                    }\n                    function increaseTrackScrollAmount() {\n                        scrollDurationFactor = 0.5;\n                    }\n                    function decreaseTrackScrollAmount() {\n                        scrollDurationFactor = 1;\n                    }\n                    function documentKeyDown(event) {\n                        if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n                            increaseTrackScrollAmount();\n                    }\n                    function documentKeyUp(event) {\n                        if (inArray(event.keyCode, increaseDecreaseScrollAmountKeyCodes) > -1)\n                            decreaseTrackScrollAmount();\n                    }\n                    function onMouseTouchDownContinue(event) {\n                        var originalEvent = event.originalEvent || event;\n                        var isTouchEvent = originalEvent.touches !== undefined;\n                        return _sleeping || _destroyed || nativeOverlayScrollbarsAreActive() || !_scrollbarsDragScrollingCache || (isTouchEvent && !getPreparedScrollbarsOption('touchSupport')) ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n                    }\n                    function documentDragMove(event) {\n                        if(onMouseTouchDownContinue(event)) {\n                            var trackLength = scrollbarVarsInfo._trackLength;\n                            var handleLength = scrollbarVarsInfo._handleLength;\n                            var scrollRange = scrollbarVarsInfo._maxScroll;\n                            var scrollRaw = (getPointerPosition(event) - mouseDownOffset) * mouseDownInvertedScale;\n                            var scrollDeltaPercent = scrollRaw / (trackLength - handleLength);\n                            var scrollDelta = (scrollRange * scrollDeltaPercent);\n                            scrollDelta = isFinite(scrollDelta) ? scrollDelta : 0;\n                            if (_isRTL && isHorizontal && !_rtlScrollBehavior.i)\n                                scrollDelta *= -1;\n\n                            _viewportElement[scroll](MATH.round(mouseDownScroll + scrollDelta));\n\n                            if(_scrollbarsHandlesDefineScrollPos)\n                                refreshScrollbarHandleOffset(isHorizontal, mouseDownScroll + scrollDelta);\n\n                            if (!_supportPassiveEvents)\n                                COMPATIBILITY.prvD(event);\n                        }\n                        else\n                            documentMouseTouchUp(event);\n                    }\n                    function documentMouseTouchUp(event) {\n                        event = event || event.originalEvent;\n\n                        _documentElement.off(_strMouseTouchMoveEvent, documentDragMove)\n                            .off(_strMouseTouchUpEvent, documentMouseTouchUp)\n                            .off(_strKeyDownEvent, documentKeyDown)\n                            .off(_strKeyUpEvent, documentKeyUp)\n                            .off(_strSelectStartEvent, documentOnSelectStart);\n\n                        if(_scrollbarsHandlesDefineScrollPos)\n                            refreshScrollbarHandleOffset(isHorizontal, true);\n\n                        _scrollbarsHandlesDefineScrollPos = false;\n                        removeClass(_bodyElement, _classNameDragging);\n                        removeClass(scrollbarVars._handle, strActive);\n                        removeClass(scrollbarVars._track, strActive);\n                        removeClass(scrollbarVars._scrollbar, strActive);\n\n                        mouseDownScroll = undefined;\n                        mouseDownOffset = undefined;\n                        mouseDownInvertedScale = 1;\n\n                        decreaseTrackScrollAmount();\n\n                        if (trackTimeout !== undefined) {\n                            _base.scrollStop();\n                            clearTimeout(trackTimeout);\n                            trackTimeout = undefined;\n                        }\n\n                        if(event) {\n                            var rect = _hostElementNative.getBoundingClientRect();\n                            var mouseInsideHost = event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;\n\n                            //if mouse is outside host element\n                            if (!mouseInsideHost)\n                                hostOnMouseLeave();\n\n                            if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n                                refreshScrollbarsAutoHide(false);\n                        }\n                    }\n                    function onHandleMouseTouchDown(event) {\n                        if (onMouseTouchDownContinue(event))\n                            onHandleMouseTouchDownAction(event);\n                    }\n                    function onHandleMouseTouchDownAction(event) {\n                        mouseDownScroll = _viewportElement[scroll]();\n                        mouseDownScroll = isNaN(mouseDownScroll) ? 0 : mouseDownScroll;\n                        if (_isRTL && isHorizontal && !_rtlScrollBehavior.n || !_isRTL)\n                            mouseDownScroll = mouseDownScroll < 0 ? 0 : mouseDownScroll;\n\n                        mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n                        mouseDownOffset = getPointerPosition(event);\n\n                        _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n                        addClass(_bodyElement, _classNameDragging);\n                        addClass(scrollbarVars._handle, strActive);\n                        addClass(scrollbarVars._scrollbar, strActive);\n\n                        _documentElement.on(_strMouseTouchMoveEvent, documentDragMove)\n                            .on(_strMouseTouchUpEvent, documentMouseTouchUp)\n                            .on(_strSelectStartEvent, documentOnSelectStart);\n\n                        if(_msieVersion || !_documentMixed)\n                            COMPATIBILITY.prvD(event);\n                        COMPATIBILITY.stpP(event);\n                    }\n                    function onTrackMouseTouchDown(event) {\n                        if (onMouseTouchDownContinue(event)) {\n                            var scrollDistance = MATH.round(_viewportSize[scrollbarVars._w_h]);\n                            var trackOffset = scrollbarVars._track.offset()[scrollbarVars._left_top];\n                            var ctrlKey = event.ctrlKey;\n                            var instantScroll = event.shiftKey;\n                            var instantScrollTransition = instantScroll && ctrlKey;\n                            var isFirstIteration = true;\n                            var easing = 'linear';\n                            var decreaseScroll;\n                            var finishedCondition;\n                            var scrollActionFinsished = function(transition) {\n                                if(_scrollbarsHandlesDefineScrollPos)\n                                    refreshScrollbarHandleOffset(isHorizontal, transition);\n                            };\n                            var scrollActionInstantFinished = function() {\n                                scrollActionFinsished();\n                                onHandleMouseTouchDownAction(event);\n                            };\n                            var scrollAction = function () {\n                                if(!_destroyed) {\n                                    var mouseOffset = (mouseDownOffset - trackOffset) * mouseDownInvertedScale;\n                                    var handleOffset = scrollbarVarsInfo._handleOffset;\n                                    var trackLength = scrollbarVarsInfo._trackLength;\n                                    var handleLength = scrollbarVarsInfo._handleLength;\n                                    var scrollRange = scrollbarVarsInfo._maxScroll;\n                                    var currScroll = scrollbarVarsInfo._currentScroll;\n                                    var scrollDuration = 270 * scrollDurationFactor;\n                                    var timeoutDelay = isFirstIteration ? MATH.max(400, scrollDuration) : scrollDuration;\n                                    var instantScrollPosition = scrollRange * ((mouseOffset - (handleLength / 2)) / (trackLength - handleLength)); // 100% * positionPercent\n                                    var rtlIsNormal = _isRTL && isHorizontal && ((!_rtlScrollBehavior.i && !_rtlScrollBehavior.n) || _normalizeRTLCache);\n                                    var decreaseScrollCondition = rtlIsNormal ? handleOffset < mouseOffset : handleOffset > mouseOffset;\n                                    var scrollObj = { };\n                                    var animationObj = {\n                                        easing : easing,\n                                        step : function(now) {\n                                            if(_scrollbarsHandlesDefineScrollPos) {\n                                                _viewportElement[scroll](now); //https://github.com/jquery/jquery/issues/4340\n                                                refreshScrollbarHandleOffset(isHorizontal, now);\n                                            }\n                                        }\n                                    };\n                                    instantScrollPosition = isFinite(instantScrollPosition) ? instantScrollPosition : 0;\n                                    instantScrollPosition = _isRTL && isHorizontal && !_rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n\n                                    //_base.scrollStop();\n\n                                    if(instantScroll) {\n                                        _viewportElement[scroll](instantScrollPosition); //scroll instantly to new position\n                                        if(instantScrollTransition) {\n                                            //get the scroll position after instant scroll (in case CSS Snap Points are used) to get the correct snapped scroll position\n                                            //and the animation stops at the correct point\n                                            instantScrollPosition = _viewportElement[scroll]();\n                                            //scroll back to the position before instant scrolling so animation can be performed\n                                            _viewportElement[scroll](currScroll);\n\n                                            instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.i ? (scrollRange - instantScrollPosition) : instantScrollPosition;\n                                            instantScrollPosition = rtlIsNormal && _rtlScrollBehavior.n ? -instantScrollPosition : instantScrollPosition;\n\n                                            scrollObj[xy] = instantScrollPosition;\n                                            _base.scroll(scrollObj, extendDeep(animationObj, {\n                                                duration : 130,\n                                                complete : scrollActionInstantFinished\n                                            }));\n                                        }\n                                        else\n                                            scrollActionInstantFinished();\n                                    }\n                                    else {\n                                        decreaseScroll = isFirstIteration ? decreaseScrollCondition : decreaseScroll;\n                                        finishedCondition = rtlIsNormal\n                                            ? (decreaseScroll ? handleOffset + handleLength >= mouseOffset : handleOffset <= mouseOffset)\n                                            : (decreaseScroll ? handleOffset <= mouseOffset : handleOffset + handleLength >= mouseOffset);\n\n                                        if (finishedCondition) {\n                                            clearTimeout(trackTimeout);\n                                            _base.scrollStop();\n                                            trackTimeout = undefined;\n                                            scrollActionFinsished(true);\n                                        }\n                                        else {\n                                            trackTimeout = setTimeout(scrollAction, timeoutDelay);\n\n                                            scrollObj[xy] = (decreaseScroll ? '-=' : '+=') + scrollDistance;\n                                            _base.scroll(scrollObj, extendDeep(animationObj, {\n                                                duration: scrollDuration\n                                            }));\n                                        }\n                                        isFirstIteration = false;\n                                    }\n                                }\n                            };\n                            if (ctrlKey)\n                                increaseTrackScrollAmount();\n\n                            mouseDownInvertedScale = getHostElementInvertedScale()[xy];\n                            mouseDownOffset = COMPATIBILITY.page(event)[xy];\n\n                            _scrollbarsHandlesDefineScrollPos = !getPreparedScrollbarsOption(strSnapHandle);\n                            addClass(_bodyElement, _classNameDragging);\n                            addClass(scrollbarVars._track, strActive);\n                            addClass(scrollbarVars._scrollbar, strActive);\n\n                            _documentElement.on(_strMouseTouchUpEvent, documentMouseTouchUp)\n                                .on(_strKeyDownEvent, documentKeyDown)\n                                .on(_strKeyUpEvent, documentKeyUp)\n                                .on(_strSelectStartEvent, documentOnSelectStart);\n\n                            scrollAction();\n                            COMPATIBILITY.prvD(event);\n                            COMPATIBILITY.stpP(event);\n                        }\n                    }\n                    function onTrackMouseTouchEnter(event) {\n                        //make sure both scrollbars will stay visible if one scrollbar is hovered if autoHide is \"scroll\" or \"move\".\n                        _scrollbarsHandleHovered = true;\n                        if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n                            refreshScrollbarsAutoHide(true);\n                    }\n                    function onTrackMouseTouchLeave(event) {\n                        _scrollbarsHandleHovered = false;\n                        if (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove)\n                            refreshScrollbarsAutoHide(false);\n                    }\n                    function onScrollbarMouseTouchDown(event) {\n                        COMPATIBILITY.stpP(event);\n                    }\n                    \n                    setupEvent(scrollbarVars._handle, \n                        _strMouseTouchDownEvent, \n                        onHandleMouseTouchDown);\n                    setupEvent(scrollbarVars._track,\n                        [_strMouseTouchDownEvent, _strMouseTouchEnter, _strMouseTouchLeave], \n                        [onTrackMouseTouchDown, onTrackMouseTouchEnter, onTrackMouseTouchLeave]);\n                    setupEvent(scrollbarVars._scrollbar, \n                        _strMouseTouchDownEvent, \n                        onScrollbarMouseTouchDown);\n\n                    if (_supportTransition) {\n                        scrollbarVars._scrollbar.on(_strTransitionEndEvent, function(event) {\n                            if (event.target !== scrollbarVars._scrollbar[0])\n                                return;\n                            refreshScrollbarHandleLength(isHorizontal);\n                            refreshScrollbarHandleOffset(isHorizontal);\n                        });\n                    }\n                }\n\n                /**\n                 * Shows or hides the given scrollbar and applied a class name which indicates if the scrollbar is scrollable or not.\n                 * @param isHorizontal True if the horizontal scrollbar is the target, false if the vertical scrollbar is the target.\n                 * @param shallBeVisible True if the scrollbar shall be shown, false if hidden.\n                 * @param canScroll True if the scrollbar is scrollable, false otherwise.\n                 */\n                function refreshScrollbarAppearance(isHorizontal, shallBeVisible, canScroll) {\n                    var scrollbarClassName = isHorizontal ? _classNameHostScrollbarHorizontalHidden : _classNameHostScrollbarVerticalHidden;\n                    var scrollbarElement = isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement;\n\n                    if (shallBeVisible)\n                        removeClass(_hostElement, scrollbarClassName);\n                    else\n                        addClass(_hostElement, scrollbarClassName);\n\n                    if (canScroll)\n                        removeClass(scrollbarElement, _classNameScrollbarUnusable);\n                    else\n                        addClass(scrollbarElement, _classNameScrollbarUnusable);\n                }\n\n                /**\n                 * Autoshows / autohides both scrollbars with.\n                 * @param shallBeVisible True if the scrollbars shall be autoshown (only the case if they are hidden by a autohide), false if the shall be auto hidden.\n                 * @param delayfree True if the scrollbars shall be hidden without a delay, false or undefined otherwise.\n                 */\n                function refreshScrollbarsAutoHide(shallBeVisible, delayfree) {\n                    clearTimeout(_scrollbarsAutoHideTimeoutId);\n                    if (shallBeVisible) {\n                        //if(_hasOverflowCache.x && _hideOverflowCache.xs)\n                        removeClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n                        //if(_hasOverflowCache.y && _hideOverflowCache.ys)\n                        removeClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n                    }\n                    else {\n                        var anyActive;\n                        var strActive = 'active';\n                        var hide = function () {\n                            if (!_scrollbarsHandleHovered && !_destroyed) {\n                                anyActive = _scrollbarHorizontalHandleElement.hasClass(strActive) || _scrollbarVerticalHandleElement.hasClass(strActive);\n                                if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n                                    addClass(_scrollbarHorizontalElement, _classNameScrollbarAutoHidden);\n                                if (!anyActive && (_scrollbarsAutoHideScroll || _scrollbarsAutoHideMove || _scrollbarsAutoHideLeave))\n                                    addClass(_scrollbarVerticalElement, _classNameScrollbarAutoHidden);\n                            }\n                        };\n                        if (_scrollbarsAutoHideDelay > 0 && delayfree !== true)\n                            _scrollbarsAutoHideTimeoutId = setTimeout(hide, _scrollbarsAutoHideDelay);\n                        else\n                            hide();\n                    }\n                }\n\n                /**\n                 * Refreshes the handle length of the given scrollbar.\n                 * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n                 */\n                function refreshScrollbarHandleLength(isHorizontal) {\n                    var handleCSS = {};\n                    var scrollbarVars = getScrollbarVars(isHorizontal);\n                    var scrollbarVarsInfo = scrollbarVars._info;\n                    var digit = 1000000;\n                    //get and apply intended handle length\n                    var handleRatio = MATH.min(1, (_hostSizeCache[scrollbarVars._w_h] - (_paddingAbsoluteCache ? (isHorizontal ? _paddingX : _paddingY) : 0)) / _contentScrollSizeCache[scrollbarVars._w_h]);\n                    handleCSS[scrollbarVars._width_height] = (MATH.floor(handleRatio * 100 * digit) / digit) + \"%\"; //the last * digit / digit is for flooring to the 4th digit\n\n                    if (!nativeOverlayScrollbarsAreActive())\n                        scrollbarVars._handle.css(handleCSS);\n\n                    //measure the handle length to respect min & max length\n                    scrollbarVarsInfo._handleLength = scrollbarVars._handle[0]['offset' + scrollbarVars._Width_Height];\n                    scrollbarVarsInfo._handleLengthRatio = handleRatio;\n                }\n\n                /**\n                 * Refreshes the handle offset of the given scrollbar.\n                 * @param isHorizontal True if the horizontal scrollbar handle shall be refreshed, false if the vertical one shall be refreshed.\n                 * @param scrollOrTransition The scroll position of the given scrollbar axis to which the handle shall be moved or a boolean which indicates whether a transition shall be applied. If undefined or boolean if the current scroll-offset is taken. (if isHorizontal ? scrollLeft : scrollTop)\n                 */\n                function refreshScrollbarHandleOffset(isHorizontal, scrollOrTransition) {\n                    var transition = type(scrollOrTransition) == TYPES.b;\n                    var transitionDuration = 250;\n                    var isRTLisHorizontal = _isRTL && isHorizontal;\n                    var scrollbarVars = getScrollbarVars(isHorizontal);\n                    var scrollbarVarsInfo = scrollbarVars._info;\n                    var strTranslateBrace = 'translate(';\n                    var strTransform = VENDORS._cssProperty('transform');\n                    var strTransition = VENDORS._cssProperty('transition');\n                    var nativeScroll = isHorizontal ? _viewportElement[_strScrollLeft]() : _viewportElement[_strScrollTop]();\n                    var currentScroll = scrollOrTransition === undefined || transition ? nativeScroll : scrollOrTransition;\n\n                    //measure the handle length to respect min & max length\n                    var handleLength = scrollbarVarsInfo._handleLength;\n                    var trackLength = scrollbarVars._track[0]['offset' + scrollbarVars._Width_Height];\n                    var handleTrackDiff = trackLength - handleLength;\n                    var handleCSS = {};\n                    var transformOffset;\n                    var translateValue;\n\n                    //DONT use the variable '_contentScrollSizeCache[scrollbarVars._w_h]' instead of '_viewportElement[0]['scroll' + scrollbarVars._Width_Height]'\n                    // because its a bit behind during the small delay when content size updates\n                    //(delay = mutationObserverContentLag, if its 0 then this var could be used)\n                    var maxScroll = (_viewportElementNative[_strScroll + scrollbarVars._Width_Height] - _viewportElementNative['client' + scrollbarVars._Width_Height]) * (_rtlScrollBehavior.n && isRTLisHorizontal ? -1 : 1); //* -1 if rtl scroll max is negative\n                    var getScrollRatio = function(base) {\n                        return isNaN(base / maxScroll) ? 0 : MATH.max(0, MATH.min(1, base / maxScroll));\n                    };\n                    var getHandleOffset = function(scrollRatio) {\n                        var offset = handleTrackDiff * scrollRatio;\n                        offset = isNaN(offset) ? 0 : offset;\n                        offset = (isRTLisHorizontal && !_rtlScrollBehavior.i) ? (trackLength - handleLength - offset) : offset;\n                        offset = MATH.max(0, offset);\n                        return offset;\n                    };\n                    var scrollRatio = getScrollRatio(nativeScroll);\n                    var unsnappedScrollRatio = getScrollRatio(currentScroll);\n                    var handleOffset = getHandleOffset(unsnappedScrollRatio);\n                    var snappedHandleOffset = getHandleOffset(scrollRatio);\n\n                    scrollbarVarsInfo._maxScroll = maxScroll;\n                    scrollbarVarsInfo._currentScroll = nativeScroll;\n                    scrollbarVarsInfo._currentScrollRatio = scrollRatio;\n\n                    if (_supportTransform) {\n                        transformOffset = isRTLisHorizontal ? -(trackLength - handleLength - handleOffset) : handleOffset; //in px\n                        //transformOffset = (transformOffset / trackLength * 100) * (trackLength / handleLength); //in %\n                        translateValue = isHorizontal ? strTranslateBrace + transformOffset + 'px, 0)' : strTranslateBrace + '0, ' + transformOffset + 'px)';\n\n                        handleCSS[strTransform] = translateValue;\n\n                        //apply or clear up transition\n                        if(_supportTransition)\n                            handleCSS[strTransition] = transition && MATH.abs(handleOffset - scrollbarVarsInfo._handleOffset) > 1 ? getCSSTransitionString(scrollbarVars._handle) + ', ' +  (strTransform + _strSpace + transitionDuration + 'ms') : _strEmpty;\n                    }\n                    else\n                        handleCSS[scrollbarVars._left_top] = handleOffset;\n\n\n                    //only apply css if offset has changed and overflow exists.\n                    if (!nativeOverlayScrollbarsAreActive()) {\n                        scrollbarVars._handle.css(handleCSS);\n\n                        //clear up transition\n                        if(_supportTransform && _supportTransition && transition) {\n                            scrollbarVars._handle.one(_strTransitionEndEvent, function() {\n                                if(!_destroyed)\n                                    scrollbarVars._handle.css(strTransition, _strEmpty);\n                            });\n                        }\n                    }\n\n                    scrollbarVarsInfo._handleOffset = handleOffset;\n                    scrollbarVarsInfo._snappedHandleOffset = snappedHandleOffset;\n                    scrollbarVarsInfo._trackLength = trackLength;\n                }\n\n                /**\n                 * Refreshes the interactivity of the given scrollbar element.\n                 * @param isTrack True if the track element is the target, false if the handle element is the target.\n                 * @param value True for interactivity false for no interactivity.\n                 */\n                function refreshScrollbarsInteractive(isTrack, value) {\n                    var action = value ? 'removeClass' : 'addClass';\n                    var element1 = isTrack ? _scrollbarHorizontalTrackElement : _scrollbarHorizontalHandleElement;\n                    var element2 = isTrack ? _scrollbarVerticalTrackElement : _scrollbarVerticalHandleElement;\n                    var className = isTrack ? _classNameScrollbarTrackOff : _classNameScrollbarHandleOff;\n\n                    element1[action](className);\n                    element2[action](className);\n                }\n\n                /**\n                 * Returns a object which is used for fast access for specific variables.\n                 * @param isHorizontal True if the horizontal scrollbar vars shall be accessed, false if the vertical scrollbar vars shall be accessed.\n                 * @returns {{wh: string, WH: string, lt: string, _wh: string, _lt: string, t: *, h: *, c: {}, s: *}}\n                 */\n                function getScrollbarVars(isHorizontal) {\n                    return {\n                        _width_height: isHorizontal ? _strWidth : _strHeight,\n                        _Width_Height: isHorizontal ? 'Width' : 'Height',\n                        _left_top: isHorizontal ? _strLeft : _strTop,\n                        _Left_Top: isHorizontal ? 'Left' : 'Top',\n                        _x_y: isHorizontal ? _strX : _strY,\n                        _X_Y: isHorizontal ? 'X' : 'Y',\n                        _w_h: isHorizontal ? 'w' : 'h',\n                        _l_t: isHorizontal ? 'l' : 't',\n                        _track: isHorizontal ? _scrollbarHorizontalTrackElement : _scrollbarVerticalTrackElement,\n                        _handle: isHorizontal ? _scrollbarHorizontalHandleElement : _scrollbarVerticalHandleElement,\n                        _scrollbar: isHorizontal ? _scrollbarHorizontalElement : _scrollbarVerticalElement,\n                        _info: isHorizontal ? _scrollHorizontalInfo : _scrollVerticalInfo\n                    };\n                }\n\n\n                //==== Scrollbar Corner ====//\n\n                /**\n                 * Builds or destroys the scrollbar corner DOM element.\n                 * @param destroy Indicates whether the DOM shall be build or destroyed.\n                 */\n                function setupScrollbarCornerDOM(destroy) {\n                    if(!destroy) {\n                         _scrollbarCornerElement = FRAMEWORK(generateDiv(_classNameScrollbarCorner));\n                        _hostElement.append(_scrollbarCornerElement);\n                    }\n                    else {\n                        remove(_scrollbarCornerElement);\n                    }\n                 }\n\n                /**\n                 * Initializes all scrollbar corner interactivity events.\n                 */\n                function setupScrollbarCornerEvents() {\n                    var insideIFrame = _windowElementNative.top !== _windowElementNative;\n                    var mouseDownPosition = { };\n                    var mouseDownSize = { };\n                    var mouseDownInvertedScale = { };\n\n                    _resizeOnMouseTouchDown = function(event) {\n                        if (onMouseTouchDownContinue(event)) {\n                            if (_mutationObserversConnected) {\n                                _resizeReconnectMutationObserver = true;\n                                disconnectMutationObservers();\n                            }\n\n                            mouseDownPosition = getCoordinates(event);\n\n                            mouseDownSize.w = _hostElementNative[LEXICON.oW] - (!_isBorderBox ? _paddingX : 0);\n                            mouseDownSize.h = _hostElementNative[LEXICON.oH] - (!_isBorderBox ? _paddingY : 0);\n                            mouseDownInvertedScale = getHostElementInvertedScale();\n\n                            _documentElement.on(_strSelectStartEvent, documentOnSelectStart)\n                                .on(_strMouseTouchMoveEvent, documentDragMove)\n                                .on(_strMouseTouchUpEvent, documentMouseTouchUp);\n\n                            addClass(_bodyElement, _classNameDragging);\n                            if (_scrollbarCornerElement.setCapture)\n                                _scrollbarCornerElement.setCapture();\n\n                            COMPATIBILITY.prvD(event);\n                            COMPATIBILITY.stpP(event);\n                        }\n                    };\n                    function documentDragMove(event) {\n                        if (onMouseTouchDownContinue(event)) {\n                            var pageOffset = getCoordinates(event);\n                            var hostElementCSS = { };\n                            if (_resizeHorizontal || _resizeBoth)\n                                hostElementCSS[_strWidth] = (mouseDownSize.w + (pageOffset.x - mouseDownPosition.x) * mouseDownInvertedScale.x);\n                            if (_resizeVertical || _resizeBoth)\n                                hostElementCSS[_strHeight] = (mouseDownSize.h + (pageOffset.y - mouseDownPosition.y) * mouseDownInvertedScale.y);\n                            _hostElement.css(hostElementCSS);\n                            COMPATIBILITY.stpP(event);\n                        }\n                        else {\n                            documentMouseTouchUp(event);\n                        }\n                    }\n                    function documentMouseTouchUp(event) {\n                        var eventIsTrusted = event !== undefined;\n\n                        _documentElement.off(_strSelectStartEvent, documentOnSelectStart)\n                            .off(_strMouseTouchMoveEvent, documentDragMove)\n                            .off(_strMouseTouchUpEvent, documentMouseTouchUp);\n\n                        removeClass(_bodyElement, _classNameDragging);\n                        if (_scrollbarCornerElement.releaseCapture)\n                            _scrollbarCornerElement.releaseCapture();\n\n                        if (eventIsTrusted) {\n                            if (_resizeReconnectMutationObserver)\n                                connectMutationObservers();\n                            _base.update(_strAuto);\n                        }\n                        _resizeReconnectMutationObserver = false;\n                    }\n                    function onMouseTouchDownContinue(event) {\n                        var originalEvent = event.originalEvent || event;\n                        var isTouchEvent = originalEvent.touches !== undefined;\n                        return _sleeping || _destroyed ? false : COMPATIBILITY.mBtn(event) === 1 || isTouchEvent;\n                    }\n                    function getCoordinates(event) {\n                        return _msieVersion && insideIFrame ? { x : event.screenX , y : event.screenY } : COMPATIBILITY.page(event);\n                    }\n                }\n\n\n                //==== Utils ====//\n\n                /**\n                 * Calls the callback with the given name. The Context of this callback is always _base (this).\n                 * @param name The name of the target which shall be called.\n                 * @param args The args with which the callback shall be called.\n                 */\n                function dispatchCallback(name, args) {\n                    if(_initialized) {\n                        var callback = _currentPreparedOptions.callbacks[name];\n                        var extensionOnName = name;\n                        var ext;\n\n                        if(extensionOnName.substr(0, 2) === 'on')\n                            extensionOnName = extensionOnName.substr(2, 1).toLowerCase() + extensionOnName.substr(3);\n\n                        if(type(callback) == TYPES.f)\n                            callback.call(_base, args);\n\n                        each(_extensions, function() {\n                            ext = this;\n                            if(type(ext.on) == TYPES.f)\n                                ext.on(extensionOnName, args);\n                        });\n                    }\n                    else if(!_destroyed)\n                        _callbacksInitQeueue.push({ n : name, a : args });\n                }\n\n                /**\n                 * Sets the \"top, right, bottom, left\" properties, with a given prefix, of the given css object.\n                 * @param targetCSSObject The css object to which the values shall be applied.\n                 * @param prefix The prefix of the \"top, right, bottom, left\" css properties. (example: 'padding-' is a valid prefix)\n                 * @param values A array of values which shall be applied to the \"top, right, bottom, left\" -properties. The array order is [top, right, bottom, left].\n                 * If this argument is undefined the value '' (empty string) will be applied to all properties.\n                 */\n                function setTopRightBottomLeft(targetCSSObject, prefix, values) {\n                    if (values === undefined)\n                        values = [_strEmpty, _strEmpty, _strEmpty, _strEmpty];\n\n                    targetCSSObject[prefix + _strTop] = values[0];\n                    targetCSSObject[prefix + _strRight] = values[1];\n                    targetCSSObject[prefix + _strBottom] = values[2];\n                    targetCSSObject[prefix + _strLeft] = values[3];\n                }\n\n                /**\n                 * Returns the computed CSS transition string from the given element.\n                 * @param element The element from which the transition string shall be returned.\n                 * @returns {string} The CSS transition string from the given element.\n                 */\n                function getCSSTransitionString(element) {\n                    var transitionStr = VENDORS._cssProperty('transition');\n                    var assembledValue = element.css(transitionStr);\n                    if(assembledValue)\n                        return assembledValue;\n                    var regExpString = '\\\\s*(' + '([^,(]+(\\\\(.+?\\\\))?)+' + ')[\\\\s,]*';\n                    var regExpMain = new RegExp(regExpString);\n                    var regExpValidate = new RegExp('^(' + regExpString + ')+$');\n                    var properties = 'property duration timing-function delay'.split(' ');\n                    var result = [ ];\n                    var strResult;\n                    var valueArray;\n                    var i = 0;\n                    var j;\n                    var splitCssStyleByComma = function(str) {\n                        strResult = [ ];\n                        if (!str.match(regExpValidate))\n                            return str;\n                        while (str.match(regExpMain)) {\n                            strResult.push(RegExp.$1);\n                            str = str.replace(regExpMain, _strEmpty);\n                        }\n\n                        return strResult;\n                    };\n                    for (; i < properties[LEXICON.l]; i++) {\n                        valueArray = splitCssStyleByComma(element.css(transitionStr + '-' + properties[i]));\n                        for (j = 0; j < valueArray[LEXICON.l]; j++)\n                            result[j] = (result[j] ? result[j] + _strSpace : _strEmpty) + valueArray[j];\n                    }\n                    return result.join(', ');\n                }\n\n                /**\n                 * Calculates the host-elements inverted scale. (invertedScale = 1 / scale)\n                 * @returns {{x: number, y: number}} The scale of the host-element.\n                 */\n                function getHostElementInvertedScale() {\n                    var rect = _paddingElementNative.getBoundingClientRect();\n                    return {\n                        x :  _supportTransform ? 1 / (MATH.round(rect.width) / _paddingElementNative[LEXICON.oW]) || 1 : 1,\n                        y :  _supportTransform ? 1 / (MATH.round(rect.height) / _paddingElementNative[LEXICON.oH]) || 1 : 1\n                    };\n                }\n\n                /**\n                 * Checks whether the given object is a HTMLElement.\n                 * @param o The object which shall be checked.\n                 * @returns {boolean} True the given object is a HTMLElement, false otherwise.\n                 */\n                function isHTMLElement(o) {\n                    var strOwnerDocument = 'ownerDocument';\n                    var strHTMLElement = 'HTMLElement';\n                    var wnd = o && o[strOwnerDocument] ? (o[strOwnerDocument].parentWindow || window) : window;\n                    return (\n                        typeof wnd[strHTMLElement] == TYPES.o ? o instanceof wnd[strHTMLElement] : //DOM2\n                        o && typeof o == TYPES.o && o !== null && o.nodeType === 1 && typeof o.nodeName == TYPES.s\n                    );\n                }\n\n                /**\n                 * Compares 2 arrays and returns the differences between them as a array.\n                 * @param a1 The first array which shall be compared.\n                 * @param a2 The second array which shall be compared.\n                 * @returns {Array} The differences between the two arrays.\n                 */\n                function getArrayDifferences(a1, a2) {\n                    var a = [ ];\n                    var diff = [ ];\n                    var i;\n                    var k;\n                    for (i = 0; i < a1.length; i++)\n                        a[a1[i]] = true;\n                    for (i = 0; i < a2.length; i++) {\n                        if (a[a2[i]])\n                            delete a[a2[i]];\n                        else\n                            a[a2[i]] = true;\n                    }\n                    for (k in a)\n                        diff.push(k);\n                    return diff;\n                }\n\n                /**\n                 * Returns Zero or the number to which the value can be parsed.\n                 * @param value The value which shall be parsed.\n                 * @param toFloat Indicates whether the number shall be parsed to a float.\n                 */\n                function parseToZeroOrNumber(value, toFloat) {\n                    var num = toFloat ? parseFloat(value) : parseInt(value, 10);\n                    return isNaN(num) ? 0 : num;\n                }\n\n                /**\n                 * Gets several information of the textarea and returns them as a object or undefined if the browser doesn't support it.\n                 * @returns {{cursorRow: Number, cursorCol, rows: Number, cols: number, wRow: number, pos: number, max : number}} or undefined if not supported.\n                 */\n                function getTextareaInfo() {\n                    //read needed values\n                    var textareaCursorPosition = _targetElementNative.selectionStart;\n                    if (textareaCursorPosition === undefined)\n                        return;\n\n                    var textareaValue = _targetElement.val();\n                    var textareaLength = textareaValue[LEXICON.l];\n                    var textareaRowSplit = textareaValue.split('\\n');\n                    var textareaLastRow = textareaRowSplit[LEXICON.l];\n                    var textareaCurrentCursorRowSplit = textareaValue.substr(0, textareaCursorPosition).split('\\n');\n                    var widestRow = 0;\n                    var textareaLastCol = 0;\n                    var cursorRow = textareaCurrentCursorRowSplit[LEXICON.l];\n                    var cursorCol = textareaCurrentCursorRowSplit[textareaCurrentCursorRowSplit[LEXICON.l] - 1][LEXICON.l];\n                    var rowCols;\n                    var i;\n\n                    //get widest Row and the last column of the textarea\n                    for (i = 0; i < textareaRowSplit[LEXICON.l]; i++) {\n                        rowCols = textareaRowSplit[i][LEXICON.l];\n                        if (rowCols > textareaLastCol) {\n                            widestRow = i + 1;\n                            textareaLastCol = rowCols;\n                        }\n                    }\n\n                    return {\n                        _cursorRow: cursorRow, //cursorRow\n                        _cursorColumn: cursorCol, //cursorCol\n                        _rows: textareaLastRow, //rows\n                        _columns: textareaLastCol, //cols\n                        _widestRow: widestRow, //wRow\n                        _cursorPosition: textareaCursorPosition, //pos\n                        _cursorMax: textareaLength //max\n                    };\n                }\n\n                /**\n                 * Determines whether native overlay scrollbars are active.\n                 * @returns {boolean} True if native overlay scrollbars are active, false otherwise.\n                 */\n                function nativeOverlayScrollbarsAreActive() {\n                    return (_ignoreOverlayScrollbarHidingCache && (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y));\n                }\n\n                /**\n                 * Gets the element which is used to measure the content size.\n                 * @returns {*} TextareaCover if target element is textarea else the ContentElement.\n                 */\n                function getContentMeasureElement() {\n                    return _isTextarea ? _textareaCoverElement[0] : _contentElementNative;\n                }\n\n                /**\n                 * Generates a string which represents a HTML div with the given classes or attributes.\n                 * @param classesOrAttrs The class of the div as string or a object which represents the attributes of the div. (The class attribute can also be written as \"className\".)\n                 * @param content The content of the div as string.\n                 * @returns {string} The concated string which represents a HTML div and its content.\n                 */\n                function generateDiv(classesOrAttrs, content) {\n                    return '<div ' + (classesOrAttrs ? type(classesOrAttrs) == TYPES.s ?\n                        'class=\"' + classesOrAttrs + '\"' :\n                            (function() {\n                                var key;\n                                var attrs = '';\n                                if(FRAMEWORK.isPlainObject(classesOrAttrs)) {\n                                    for (key in classesOrAttrs)\n                                        attrs += (key === 'className' ? 'class' : key) + '=\"' + classesOrAttrs[key] + '\" ';\n                                }\n                                return attrs;\n                            })() :\n                            _strEmpty) +\n                        '>' +\n                        (content ? content : _strEmpty) +\n                        '</div>';\n                }\n\n                /**\n                 * Gets the value of the given property from the given object.\n                 * @param obj The object from which the property value shall be got.\n                 * @param path The property of which the value shall be got.\n                 * @returns {*} Returns the value of the searched property or undefined of the property wasn't found.\n                 */\n                function getObjectPropVal(obj, path) {\n                    var splits = path.split(_strDot);\n                    var i = 0;\n                    var val;\n                    for(; i < splits.length; i++) {\n                        if(!obj[LEXICON.hOP](splits[i]))\n                            return;\n                        val = obj[splits[i]];\n                        if(i < splits.length && type(val) == TYPES.o)\n                            obj = val;\n                    }\n                    return val;\n                }\n\n                /**\n                 * Sets the value of the given property from the given object.\n                 * @param obj The object from which the property value shall be set.\n                 * @param path The property of which the value shall be set.\n                 * @param val The value of the property which shall be set.\n                 */\n                function setObjectPropVal(obj, path, val) {\n                    var splits = path.split(_strDot);\n                    var splitsLength = splits.length;\n                    var i = 0;\n                    var extendObj = { };\n                    var extendObjRoot = extendObj;\n                    for(; i < splitsLength; i++)\n                        extendObj = extendObj[splits[i]] = i + 1 < splitsLength ? { } : val;\n                    FRAMEWORK.extend(obj, extendObjRoot, true);\n                }\n\n\n                //==== Utils Cache ====//\n\n                /**\n                 * Compares two values or objects and returns true if they aren't equal.\n                 * @param current The first value or object which shall be compared.\n                 * @param cache The second value or object which shall be compared.\n                 * @param force If true the returned value is always true.\n                 * @returns {boolean} True if both values or objects aren't equal or force is true, false otherwise.\n                 */\n                function checkCache(current, cache, force) {\n                    if (force)\n                        return force;\n                    if(type(current) == TYPES.o && type(cache) == TYPES.o) {\n                        for (var prop in current) {\n                            if(prop !== 'c') {\n                                if (current[LEXICON.hOP](prop) && cache[LEXICON.hOP](prop)) {\n                                    if(checkCache(current[prop], cache[prop]))\n                                        return true;\n                                }\n                                else {\n                                    return true;\n                                }\n                            }\n                        }\n                    }\n                    else {\n                        return current !== cache;\n                    }\n                    return false;\n                }\n\n\n                //==== Shortcuts ====//\n\n                /**\n                 * jQuery extend method shortcut with a appended \"true\" as first argument.\n                 */\n                function extendDeep() {\n                    return FRAMEWORK.extend.apply(this, [ true ].concat([].slice.call(arguments)));\n                }\n\n                /**\n                 * jQuery addClass method shortcut.\n                 */\n                function addClass(el, classes) {\n                    return _frameworkProto.addClass.call(el, classes);\n                }\n\n                /**\n                 * jQuery removeClass method shortcut.\n                 */\n                function removeClass(el, classes) {\n                    return _frameworkProto.removeClass.call(el, classes);\n                }\n\n                /**\n                 * jQuery remove method shortcut.\n                 */\n                function remove(el) {\n                    return _frameworkProto.remove.call(el);\n                }\n\n                /**\n                 * Finds the first child element with the given selector of the given element.\n                 * @param el The root element from which the selector shall be valid.\n                 * @param selector The selector of the searched element.\n                 * @returns {*} The first element which is a child of the given element and matches the givens selector.\n                 */\n                function findFirst(el, selector) {\n                    return _frameworkProto.find.call(el, selector).eq(0);\n                }\n\n\n                //==== API ====//\n\n                /**\n                 * Puts the instance to sleep. It wont respond to any changes in the DOM and won't update. Scrollbar Interactivity is also disabled as well as the resize handle.\n                 * This behavior can be reset by calling the update method.\n                 */\n                _base.sleep = function () {\n                    _sleeping = true;\n                };\n\n                /**\n                 * Updates the plugin and DOM to the current options.\n                 * This method should only be called if a update is 100% required.\n                 * @param force True if every property shall be updated and the cache shall be ignored.\n                 * !INTERNAL USAGE! : force can be a string \"auto\", \"sync\" or \"zoom\" too\n                 * if \"auto\" then before a real update the content size and host element attributes gets checked, and if they changed only then the update method will be called.\n                 * if \"sync\" then the async update process (MutationObserver or UpdateLoop) gets synchronized and a corresponding update takes place if one was needed due to pending changes.\n                 * if \"zoom\" then a update takes place where it's assumed that content and host size changed\n                 * @returns {boolean|undefined} \n                 * If force is \"sync\" then a boolean is returned which indicates whether a update was needed due to pending changes.\n                 * If force is \"auto\" then a boolean is returned whether a update was needed due to attribute or size changes.\n                 * undefined otherwise.\n                 */\n                _base.update = function (force) {\n                    var attrsChanged;\n                    var contentSizeC;\n                    var isString = type(force) == TYPES.s;\n                    var imgElementSelector = 'img';\n                    var imgElementLoadEvent = 'load';\n                    var doUpdateAuto;\n                    var mutHost;\n                    var mutContent;\n                    if(isString) {\n                        if (force === _strAuto) {\n                            attrsChanged = meaningfulAttrsChanged();\n                            contentSizeC = updateAutoContentSizeChanged();\n                            doUpdateAuto = attrsChanged || contentSizeC;\n                            if (doUpdateAuto) {\n                                update({\n                                    _contentSizeChanged : contentSizeC,\n                                    _changedOptions : _initialized ? undefined : _currentPreparedOptions\n                                });\n                            }\n                        }\n                        else if (force === _strSync) {\n                            if(_mutationObserversConnected) {\n                                mutHost = _mutationObserverHostCallback(_mutationObserverHost.takeRecords());\n                                mutContent = _mutationObserverContentCallback(_mutationObserverContent.takeRecords());\n                            }\n                            else {\n                                mutHost = _base.update(_strAuto);\n                            }\n                        }\n                        else if (force === 'zoom') {\n                            update({\n                                _hostSizeChanged : true,\n                                _contentSizeChanged : true\n                            });\n                        }\n                    }\n                    else {\n                        force = _sleeping || force;\n                        _sleeping = false;\n                        if(!_base.update(_strSync) || force)\n                            update({ _force : force });\n                    }\n                    if(!_isTextarea) {\n                        _contentElement.find(imgElementSelector).each(function(i, el) {\n                            var index = COMPATIBILITY.inA(el, _imgs);\n                            if (index === -1)\n                                FRAMEWORK(el).off(imgElementLoadEvent, imgOnLoad).on(imgElementLoadEvent, imgOnLoad);\n                        });\n                    }\n                    return doUpdateAuto || mutHost || mutContent;\n                };\n\n                /**\n                 Gets or sets the current options. The update method will be called automatically if new options were set.\n                 * @param newOptions If new options are given, then the new options will be set, if new options aren't given (undefined or a not a plain object) then the current options will be returned.\n                 * @param value If new options is a property path string, then this value will be used to set the option to which the property path string leads.\n                 * @returns {*}\n                 */\n                _base.options = function (newOptions, value) {\n                    var option = { };\n                    var changedOps;\n                    \n                    //return current options if newOptions are undefined or empty\n                    if (FRAMEWORK.isEmptyObject(newOptions) || !FRAMEWORK.isPlainObject(newOptions)) {\n                        if (type(newOptions) == TYPES.s) {\n                            if (arguments.length > 1) {\n                                setObjectPropVal(option, newOptions, value);\n                                changedOps = setOptions(option);\n                            }\n                            else\n                                return getObjectPropVal(_currentOptions, newOptions);\n                        }\n                        else\n                            return _currentOptions;\n                    }\n                    else {\n                        changedOps = setOptions(newOptions);\n                    }\n                    \n                    if(!FRAMEWORK.isEmptyObject(changedOps)) {\n                        update({ _changedOptions : changedOps });\n                    }    \n                };\n\n                /**\n                 * Restore the DOM, disconnects all observers, remove all resize observers and put the instance to sleep.\n                 */\n                _base.destroy = function () {\n                    //remove this instance from auto update loop\n                    autoUpdateLoop.remove(_base);\n\n                    //disconnect all mutation observers\n                    disconnectMutationObservers();\n\n                    //remove all resize observers\n                    setupResizeObserver(_sizeObserverElement);\n                    setupResizeObserver(_sizeAutoObserverElement);\n\n                    //remove all extensions\n                    for(var extName in _extensions)\n                        _base.removeExt(extName);\n\n                    //remove all events from host element\n                    setupHostMouseTouchEvents(true);\n\n                    //remove all events from structure\n                    setupStructureEvents(true);\n\n                    //remove all helper / detection elements\n                    if (_contentGlueElement)\n                        remove(_contentGlueElement);\n                    if (_contentArrangeElement)\n                        remove(_contentArrangeElement);\n                    if (_sizeAutoObserverAdded)\n                        remove(_sizeAutoObserverElement);\n\n                    //remove all generated DOM\n                    setupScrollbarsDOM(true);\n                    setupScrollbarCornerDOM(true);\n                    setupStructureDOM(true);\n\n                    //remove all generated image load events\n                    for(var i = 0; i < _imgs[LEXICON.l]; i++)\n                        FRAMEWORK(_imgs[i]).off('load', imgOnLoad);\n                    _imgs = undefined;\n\n                    _destroyed = true;\n                    _sleeping = true;\n\n                    //remove this instance from the instances list\n                    INSTANCES(pluginTargetElement, 0);\n                    dispatchCallback(\"onDestroyed\");\n\n                    //remove all properties and methods\n                    //for (var property in _base)\n                    //    delete _base[property];\n                    //_base = undefined;\n                };\n\n                /**\n                 * Scrolls to a given position or element.\n                 * @param coordinates\n                 * 1. Can be \"coordinates\" which looks like:\n                 *    { x : ?, y : ? } OR          Object with x and y properties\n                 *    { left : ?, top : ? } OR     Object with left and top properties\n                 *    { l : ?, t : ? } OR          Object with l and t properties\n                 *    [ ?, ? ] OR                  Array where the first two element are the coordinates (first is x, second is y)\n                 *    ?                            A single value which stays for both axis\n                 *    A value can be a number, a string or a calculation.\n                 *\n                 *    Operators:\n                 *    [NONE]  The current scroll will be overwritten by the value.\n                 *    '+='    The value will be added to the current scroll offset\n                 *    '-='    The value will be subtracted from the current scroll offset\n                 *    '*='    The current scroll wil be multiplicated by the value.\n                 *    '/='    The current scroll wil be divided by the value.\n                 *\n                 *    Units:\n                 *    [NONE]  The value is the final scroll amount.                   final = (value * 1)\n                 *    'px'    Same as none\n                 *    '%'     The value is dependent on the current scroll value.     final = ((currentScrollValue / 100) * value)\n                 *    'vw'    The value is multiplicated by the viewport width.       final = (value * viewportWidth)\n                 *    'vh'    The value is multiplicated by the viewport height.      final = (value * viewportHeight)\n                 *\n                 *    example final values:\n                 *    200, '200px', '50%', '1vw', '1vh', '+=200', '/=1vw', '*=2px', '-=5vh', '+=33%', '+= 50% - 2px', '-= 1vw - 50%'\n                 *\n                 * 2. Can be a HTML or jQuery element:\n                 *    The final scroll offset is the offset (without margin) of the given HTML / jQuery element.\n                 *\n                 * 3. Can be a object with a HTML or jQuery element with additional settings:\n                 *    {\n                 *      el : [HTMLElement, jQuery element],             MUST be specified, else this object isn't valid.\n                 *      scroll : [string, array, object],               Default value is 'always'.\n                 *      block : [string, array, object],                Default value is 'begin'.\n                 *      margin : [number, boolean, array, object]       Default value is false.\n                 *    }\n                 *\n                 *    Possible scroll settings are:\n                 *    'always'      Scrolls always.\n                 *    'ifneeded'    Scrolls only if the element isnt fully in view.\n                 *    'never'       Scrolls never.\n                 *\n                 *    Possible block settings are:\n                 *    'begin'   Both axis shall be docked to the \"begin\" edge. - The element will be docked to the top and left edge of the viewport.\n                 *    'end'     Both axis shall be docked to the \"end\" edge. - The element will be docked to the bottom and right edge of the viewport. (If direction is RTL to the bottom and left edge.)\n                 *    'center'  Both axis shall be docked to \"center\". - The element will be centered in the viewport.\n                 *    'nearest' The element will be docked to the nearest edge(s).\n                 *\n                 *    Possible margin settings are: -- The actual margin of the element wont be affect, this option affects only the final scroll offset.\n                 *    [BOOLEAN]                                         If true the css margin of the element will be used, if false no margin will be used.\n                 *    [NUMBER]                                          The margin will be used for all edges.\n                 *\n                 * @param duration The duration of the scroll animation, OR a jQuery animation configuration object.\n                 * @param easing The animation easing.\n                 * @param complete The animation complete callback.\n                 * @returns {{\n                 *   position: {x: number, y: number},\n                 *   ratio: {x: number, y: number},\n                 *   max: {x: number, y: number},\n                 *   handleOffset: {x: number, y: number},\n                 *   handleLength: {x: number, y: number},\n                 *   handleLengthRatio: {x: number, y: number}, t\n                 *   rackLength: {x: number, y: number},\n                 *   isRTL: boolean,\n                 *   isRTLNormalized: boolean\n                 *  }}\n                 */\n                _base.scroll = function (coordinates, duration, easing, complete) {\n                    if (arguments.length === 0 || coordinates === undefined) {\n                        var infoX = _scrollHorizontalInfo;\n                        var infoY = _scrollVerticalInfo;\n                        var normalizeInvert = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.i;\n                        var normalizeNegate = _normalizeRTLCache && _isRTL && _rtlScrollBehavior.n;\n                        var scrollX = infoX._currentScroll;\n                        var scrollXRatio = infoX._currentScrollRatio;\n                        var maxScrollX = infoX._maxScroll;\n                        scrollXRatio = normalizeInvert ? 1 - scrollXRatio : scrollXRatio;\n                        scrollX = normalizeInvert ? maxScrollX - scrollX : scrollX;\n                        scrollX *= normalizeNegate ? -1 : 1;\n                        maxScrollX *= normalizeNegate ? -1 : 1;\n\n                        return {\n                            position : {\n                                x : scrollX,\n                                y : infoY._currentScroll\n                            },\n                            ratio : {\n                                x : scrollXRatio,\n                                y : infoY._currentScrollRatio\n                            },\n                            max : {\n                                x : maxScrollX,\n                                y : infoY._maxScroll\n                            },\n                            handleOffset : {\n                                x : infoX._handleOffset,\n                                y : infoY._handleOffset\n                            },\n                            handleLength : {\n                                x : infoX._handleLength,\n                                y : infoY._handleLength\n                            },\n                            handleLengthRatio : {\n                                x : infoX._handleLengthRatio,\n                                y : infoY._handleLengthRatio\n                            },\n                            trackLength : {\n                                x : infoX._trackLength,\n                                y : infoY._trackLength\n                            },\n                            snappedHandleOffset : {\n                                x : infoX._snappedHandleOffset,\n                                y : infoY._snappedHandleOffset\n                            },\n                            isRTL: _isRTL,\n                            isRTLNormalized: _normalizeRTLCache\n                        };\n                    }\n                    \n                    _base.update(_strSync);\n                    \n                    var normalizeRTL = _normalizeRTLCache;\n                    var coordinatesXAxisProps = [_strX, _strLeft, 'l'];\n                    var coordinatesYAxisProps = [_strY, _strTop, 't'];\n                    var coordinatesOperators = ['+=', '-=', '*=', '/='];\n                    var durationIsObject = type(duration) == TYPES.o;\n                    var completeCallback = durationIsObject ? duration.complete : complete;\n                    var i;\n                    var finalScroll = { };\n                    var specialEasing = {};\n                    var doScrollLeft;\n                    var doScrollTop;\n                    var animationOptions;\n                    var strEnd = 'end';\n                    var strBegin = 'begin';\n                    var strCenter = 'center';\n                    var strNearest = 'nearest';\n                    var strAlways = 'always';\n                    var strNever = 'never';\n                    var strIfNeeded = 'ifneeded';\n                    var strLength = LEXICON.l;\n                    var settingsAxis;\n                    var settingsScroll;\n                    var settingsBlock;\n                    var settingsMargin;\n                    var finalElement;\n                    var elementObjSettingsAxisValues = [_strX, _strY, 'xy', 'yx'];\n                    var elementObjSettingsBlockValues = [strBegin, strEnd, strCenter, strNearest];\n                    var elementObjSettingsScrollValues = [strAlways, strNever, strIfNeeded];\n                    var coordinatesIsElementObj = coordinates[LEXICON.hOP]('el');\n                    var possibleElement = coordinatesIsElementObj ? coordinates.el : coordinates;\n                    var possibleElementIsJQuery = possibleElement instanceof FRAMEWORK || JQUERY ? possibleElement instanceof JQUERY : false;\n                    var possibleElementIsHTMLElement = possibleElementIsJQuery ? false : isHTMLElement(possibleElement);\n                    var proxyCompleteCallback = type(completeCallback) != TYPES.f ? undefined : function() {\n                        if(doScrollLeft)\n                            refreshScrollbarHandleOffset(true);\n                        if(doScrollTop)\n                            refreshScrollbarHandleOffset(false);\n                        completeCallback();\n                    };\n                    var checkSettingsStringValue = function (currValue, allowedValues) {\n                        for (i = 0; i < allowedValues[strLength]; i++) {\n                            if (currValue === allowedValues[i])\n                                return true;\n                        }\n                        return false;\n                    };\n                    var getRawScroll = function (isX, coordinates) {\n                        var coordinateProps = isX ? coordinatesXAxisProps : coordinatesYAxisProps;\n                        coordinates = type(coordinates) == TYPES.s || type(coordinates) == TYPES.n ? [ coordinates, coordinates ] : coordinates;\n\n                        if (type(coordinates) == TYPES.a)\n                            return isX ? coordinates[0] : coordinates[1];\n                        else if (type(coordinates) == TYPES.o) {\n                            //decides RTL normalization \"hack\" with .n\n                            //normalizeRTL = type(coordinates.n) == TYPES.b ? coordinates.n : normalizeRTL; \n                            for (i = 0; i < coordinateProps[strLength]; i++)\n                                if (coordinateProps[i] in coordinates)\n                                    return coordinates[coordinateProps[i]];\n                        }\n                    };\n                    var getFinalScroll = function (isX, rawScroll) {\n                        var isString = type(rawScroll) == TYPES.s;\n                        var operator;\n                        var amount;\n                        var scrollInfo = isX ? _scrollHorizontalInfo : _scrollVerticalInfo;\n                        var currScroll = scrollInfo._currentScroll;\n                        var maxScroll = scrollInfo._maxScroll;\n                        var mult = ' * ';\n                        var finalValue;\n                        var isRTLisX = _isRTL && isX;\n                        var normalizeShortcuts = isRTLisX && _rtlScrollBehavior.n && !normalizeRTL;\n                        var strReplace = 'replace';\n                        var evalFunc = eval;\n                        var possibleOperator;\n                        if (isString) {\n                            //check operator\n                            if (rawScroll[strLength] > 2) {\n                                possibleOperator = rawScroll.substr(0, 2);\n                                if(inArray(possibleOperator, coordinatesOperators) > -1)\n                                    operator = possibleOperator;\n                            }\n\n                            //calculate units and shortcuts\n                            rawScroll = operator ? rawScroll.substr(2) : rawScroll;\n                            rawScroll = rawScroll\n                            [strReplace](/min/g, 0) //'min' = 0%\n                            [strReplace](/</g, 0)   //'<'   = 0%\n                            [strReplace](/max/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent)    //'max' = 100%\n                            [strReplace](/>/g, (normalizeShortcuts ? '-' : _strEmpty) + _strHundredPercent)      //'>'   = 100%\n                            [strReplace](/px/g, _strEmpty)\n                            [strReplace](/%/g, mult + (maxScroll * (isRTLisX && _rtlScrollBehavior.n ? -1 : 1) / 100.0))\n                            [strReplace](/vw/g, mult + _viewportSize.w)\n                            [strReplace](/vh/g, mult + _viewportSize.h);\n                            amount = parseToZeroOrNumber(isNaN(rawScroll) ? parseToZeroOrNumber(evalFunc(rawScroll), true).toFixed() : rawScroll);\n                        }\n                        else {\n                            amount = rawScroll;\n                        }\n\n                        if (amount !== undefined && !isNaN(amount) && type(amount) == TYPES.n) {\n                            var normalizeIsRTLisX = normalizeRTL && isRTLisX;\n                            var operatorCurrScroll = currScroll * (normalizeIsRTLisX && _rtlScrollBehavior.n ? -1 : 1);\n                            var invert = normalizeIsRTLisX && _rtlScrollBehavior.i;\n                            var negate = normalizeIsRTLisX && _rtlScrollBehavior.n;\n                            operatorCurrScroll = invert ? (maxScroll - operatorCurrScroll) : operatorCurrScroll;\n                            switch (operator) {\n                                case '+=':\n                                    finalValue = operatorCurrScroll + amount;\n                                    break;\n                                case '-=':\n                                    finalValue = operatorCurrScroll - amount;\n                                    break;\n                                case '*=':\n                                    finalValue = operatorCurrScroll * amount;\n                                    break;\n                                case '/=':\n                                    finalValue = operatorCurrScroll / amount;\n                                    break;\n                                default:\n                                    finalValue = amount;\n                                    break;\n                            }\n                            finalValue = invert ? maxScroll - finalValue : finalValue;\n                            finalValue *= negate ? -1 : 1;\n                            finalValue = isRTLisX && _rtlScrollBehavior.n ? MATH.min(0, MATH.max(maxScroll, finalValue)) : MATH.max(0, MATH.min(maxScroll, finalValue));\n                        }\n                        return finalValue === currScroll ? undefined : finalValue;\n                    };\n                    var getPerAxisValue = function (value, valueInternalType, defaultValue, allowedValues) {\n                        var resultDefault = [ defaultValue, defaultValue ];\n                        var valueType = type(value);\n                        var valueArrLength;\n                        var valueArrItem;\n\n                        //value can be [ string, or array of two strings ]\n                        if (valueType == valueInternalType) {\n                            value = [value, value];\n                        }\n                        else if (valueType == TYPES.a) {\n                            valueArrLength = value[strLength];\n                            if (valueArrLength > 2 || valueArrLength < 1)\n                                value = resultDefault;\n                            else {\n                                if (valueArrLength === 1)\n                                    value[1] = defaultValue;\n                                for (i = 0; i < valueArrLength; i++) {\n                                    valueArrItem = value[i];\n                                    if (type(valueArrItem) != valueInternalType || !checkSettingsStringValue(valueArrItem, allowedValues)) {\n                                        value = resultDefault;\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                        else if (valueType == TYPES.o)\n                            value = [ value[_strX]|| defaultValue, value[_strY] || defaultValue];\n                        else\n                            value = resultDefault;\n                        return { x : value[0], y : value[1] };\n                    };\n                    var generateMargin = function (marginTopRightBottomLeftArray) {\n                        var result = [ ];\n                        var currValue;\n                        var currValueType;\n                        var valueDirections = [ _strTop, _strRight, _strBottom, _strLeft ];\n                        for(i = 0; i < marginTopRightBottomLeftArray[strLength]; i++) {\n                            if(i === valueDirections[strLength])\n                                break;\n                            currValue = marginTopRightBottomLeftArray[i];\n                            currValueType = type(currValue);\n                            if(currValueType == TYPES.b)\n                                result.push(currValue ? parseToZeroOrNumber(finalElement.css(_strMarginMinus + valueDirections[i])) : 0);\n                            else\n                                result.push(currValueType == TYPES.n ? currValue : 0);\n                        }\n                        return result;\n                    };\n\n                    if (possibleElementIsJQuery || possibleElementIsHTMLElement) {\n                        //get settings\n                        var margin = coordinatesIsElementObj ? coordinates.margin : 0;\n                        var axis = coordinatesIsElementObj ? coordinates.axis : 0;\n                        var scroll = coordinatesIsElementObj ? coordinates.scroll : 0;\n                        var block = coordinatesIsElementObj ? coordinates.block : 0;\n                        var marginDefault = [ 0, 0, 0, 0 ];\n                        var marginType = type(margin);\n                        var marginLength;\n                        finalElement = possibleElementIsJQuery ? possibleElement : FRAMEWORK(possibleElement);\n                        if (finalElement[strLength] === 0)\n                            return;\n\n                        //margin can be [ boolean, number, array of 2, array of 4, object ]\n                        if (marginType == TYPES.n || marginType == TYPES.b)\n                            margin = generateMargin([margin, margin, margin, margin]);\n                        else if (marginType == TYPES.a) {\n                            marginLength = margin[strLength];\n                            if(marginLength === 2)\n                                margin = generateMargin([margin[0], margin[1], margin[0], margin[1]]);\n                            else if(marginLength >= 4)\n                                margin = generateMargin(margin);\n                            else\n                                margin = marginDefault;\n                        }\n                        else if (marginType == TYPES.o)\n                            margin = generateMargin([margin[_strTop], margin[_strRight], margin[_strBottom], margin[_strLeft]]);\n                        else\n                            margin = marginDefault;\n\n                        //block = type(block) === TYPES.b ? block ? [ strNearest, strBegin ] : [ strNearest, strEnd ] : block;\n                        settingsAxis = checkSettingsStringValue(axis, elementObjSettingsAxisValues) ? axis : 'xy';\n                        settingsScroll = getPerAxisValue(scroll, TYPES.s, strAlways, elementObjSettingsScrollValues);\n                        settingsBlock = getPerAxisValue(block, TYPES.s, strBegin, elementObjSettingsBlockValues);\n                        settingsMargin = margin;\n\n                        var viewportScroll = {\n                            l: _scrollHorizontalInfo._currentScroll,\n                            t: _scrollVerticalInfo._currentScroll\n                        };\n                        // use padding element instead of viewport element because padding element has never padding, margin or position applied.\n                        var viewportOffset = _paddingElement.offset();\n\n                        //get coordinates\n                        var elementOffset = finalElement.offset();\n                        var doNotScroll = {\n                            x : settingsScroll.x == strNever || settingsAxis == _strY,\n                            y : settingsScroll.y == strNever || settingsAxis == _strX\n                        };\n                        elementOffset[_strTop] -= settingsMargin[0];\n                        elementOffset[_strLeft] -= settingsMargin[3];\n                        var elementScrollCoordinates = {\n                            x: MATH.round(elementOffset[_strLeft] - viewportOffset[_strLeft] + viewportScroll.l),\n                            y: MATH.round(elementOffset[_strTop] - viewportOffset[_strTop] + viewportScroll.t)\n                        };\n                        if (_isRTL) {\n                            if (!_rtlScrollBehavior.n && !_rtlScrollBehavior.i)\n                                elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + viewportScroll.l);\n                            if (_rtlScrollBehavior.n && normalizeRTL)\n                                elementScrollCoordinates.x *= -1;\n                            if (_rtlScrollBehavior.i && normalizeRTL)\n                                elementScrollCoordinates.x = MATH.round(viewportOffset[_strLeft] - elementOffset[_strLeft] + (_scrollHorizontalInfo._maxScroll - viewportScroll.l));\n                        }\n\n                        //measuring is required\n                        if (settingsBlock.x != strBegin || settingsBlock.y != strBegin || settingsScroll.x == strIfNeeded || settingsScroll.y == strIfNeeded || _isRTL) {\n                            var measuringElm = finalElement[0];\n                            var rawElementSize = _supportTransform ? measuringElm.getBoundingClientRect() : {\n                                width : measuringElm[LEXICON.oW],\n                                height : measuringElm[LEXICON.oH]\n                            };\n                            var elementSize = {\n                                w: rawElementSize[_strWidth] + settingsMargin[3] + settingsMargin[1],\n                                h: rawElementSize[_strHeight] + settingsMargin[0] + settingsMargin[2]\n                            };\n                            var finalizeBlock = function(isX) {\n                                var vars = getScrollbarVars(isX);\n                                var wh = vars._w_h;\n                                var lt = vars._left_top;\n                                var xy = vars._x_y;\n                                var blockIsEnd = settingsBlock[xy] == (isX ? _isRTL ? strBegin : strEnd : strEnd);\n                                var blockIsCenter = settingsBlock[xy] == strCenter;\n                                var blockIsNearest = settingsBlock[xy] == strNearest;\n                                var scrollNever = settingsScroll[xy] == strNever;\n                                var scrollIfNeeded = settingsScroll[xy] == strIfNeeded;\n                                var vpSize = _viewportSize[wh];\n                                var vpOffset = viewportOffset[lt];\n                                var elSize = elementSize[wh];\n                                var elOffset = elementOffset[lt];\n                                var divide = blockIsCenter ? 2 : 1;\n                                var elementCenterOffset = elOffset + (elSize / 2);\n                                var viewportCenterOffset = vpOffset + (vpSize / 2);\n                                var isInView =\n                                    elSize <= vpSize\n                                    && elOffset >= vpOffset\n                                    && elOffset + elSize <= vpOffset + vpSize;\n\n                                if(scrollNever)\n                                    doNotScroll[xy] = true;\n                                else if(!doNotScroll[xy]) {\n                                    if (blockIsNearest || scrollIfNeeded) {\n                                        doNotScroll[xy] = scrollIfNeeded ? isInView : false;\n                                        blockIsEnd = elSize < vpSize ? elementCenterOffset > viewportCenterOffset : elementCenterOffset < viewportCenterOffset;\n                                    }\n                                    elementScrollCoordinates[xy] -= blockIsEnd || blockIsCenter ? ((vpSize / divide) - (elSize / divide)) * (isX && _isRTL && normalizeRTL ? -1 : 1) : 0;\n                                }\n                            };\n                            finalizeBlock(true);\n                            finalizeBlock(false);\n                        }\n\n                        if (doNotScroll.y)\n                            delete elementScrollCoordinates.y;\n                        if (doNotScroll.x)\n                            delete elementScrollCoordinates.x;\n\n                        coordinates = elementScrollCoordinates;\n                    }\n\n                    finalScroll[_strScrollLeft] = getFinalScroll(true, getRawScroll(true, coordinates));\n                    finalScroll[_strScrollTop] = getFinalScroll(false, getRawScroll(false, coordinates));\n                    doScrollLeft = finalScroll[_strScrollLeft] !== undefined;\n                    doScrollTop = finalScroll[_strScrollTop] !== undefined;\n\n                    if ((doScrollLeft || doScrollTop) && (duration > 0 || durationIsObject)) {\n                        if (durationIsObject) {\n                            duration.complete = proxyCompleteCallback;\n                            _viewportElement.animate(finalScroll, duration);\n                        }\n                        else {\n                            animationOptions = {\n                                duration: duration,\n                                complete: proxyCompleteCallback\n                            };\n                            if (type(easing) == TYPES.a || FRAMEWORK.isPlainObject(easing)) {\n                                specialEasing[_strScrollLeft] = easing[0] || easing.x;\n                                specialEasing[_strScrollTop] = easing[1] || easing.y;\n                                animationOptions.specialEasing = specialEasing;\n                            }\n                            else {\n                                animationOptions.easing = easing;\n                            }\n                            _viewportElement.animate(finalScroll, animationOptions);\n                        }\n                    }\n                    else {\n                        if (doScrollLeft)\n                            _viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]);\n                        if (doScrollTop)\n                            _viewportElement[_strScrollTop](finalScroll[_strScrollTop]);\n                    }\n                };\n\n                /**\n                 * Stops all scroll animations.\n                 * @returns {*} The current OverlayScrollbars instance (for chaining).\n                 */\n                _base.scrollStop = function (param1, param2, param3) {\n                    _viewportElement.stop(param1, param2, param3);\n                    return _base;\n                };\n\n                /**\n                 * Returns all relevant elements.\n                 * @param elementName The name of the element which shall be returned.\n                 * @returns {{target: *, host: *, padding: *, viewport: *, content: *, scrollbarHorizontal: {scrollbar: *, track: *, handle: *}, scrollbarVertical: {scrollbar: *, track: *, handle: *}, scrollbarCorner: *} | *}\n                 */\n                _base.getElements = function (elementName) {\n                    var obj = {\n                        target: _targetElementNative,\n                        host: _hostElementNative,\n                        padding: _paddingElementNative,\n                        viewport: _viewportElementNative,\n                        content: _contentElementNative,\n                        scrollbarHorizontal: {\n                            scrollbar: _scrollbarHorizontalElement[0],\n                            track: _scrollbarHorizontalTrackElement[0],\n                            handle: _scrollbarHorizontalHandleElement[0]\n                        },\n                        scrollbarVertical: {\n                            scrollbar: _scrollbarVerticalElement[0],\n                            track: _scrollbarVerticalTrackElement[0],\n                            handle: _scrollbarVerticalHandleElement[0]\n                        },\n                        scrollbarCorner: _scrollbarCornerElement[0]\n                    };\n                    return type(elementName) == TYPES.s ? getObjectPropVal(obj, elementName) : obj;\n                };\n\n                /**\n                 * Returns a object which describes the current state of this instance.\n                 * @param stateProperty A specific property from the state object which shall be returned.\n                 * @returns {{widthAuto, heightAuto, overflowAmount, hideOverflow, hasOverflow, contentScrollSize, viewportSize, hostSize, autoUpdate} | *}\n                 */\n                _base.getState = function (stateProperty) {\n                    function prepare(obj) {\n                        if (!FRAMEWORK.isPlainObject(obj))\n                            return obj;\n                        var extended = extendDeep({}, obj);\n                        var changePropertyName = function (from, to) {\n                            if (extended[LEXICON.hOP](from)) {\n                                extended[to] = extended[from];\n                                delete extended[from];\n                            }\n                        };\n                        changePropertyName('w', _strWidth); //change w to width\n                        changePropertyName('h', _strHeight); //change h to height\n                        delete extended.c; //delete c (the 'changed' prop)\n                        return extended;\n                    };\n                    var obj = {\n                        destroyed: !!prepare(_destroyed),\n                        sleeping: !!prepare(_sleeping),\n                        autoUpdate: prepare(!_mutationObserversConnected),\n                        widthAuto: prepare(_widthAutoCache),\n                        heightAuto: prepare(_heightAutoCache),\n                        padding: prepare(_cssPaddingCache),\n                        overflowAmount: prepare(_overflowAmountCache),\n                        hideOverflow: prepare(_hideOverflowCache),\n                        hasOverflow: prepare(_hasOverflowCache),\n                        contentScrollSize: prepare(_contentScrollSizeCache),\n                        viewportSize: prepare(_viewportSize),\n                        hostSize: prepare(_hostSizeCache),\n                        documentMixed : prepare(_documentMixed)\n                    };\n                    return type(stateProperty) == TYPES.s ? getObjectPropVal(obj, stateProperty) : obj;\n                };\n\n                /**\n                 * Gets all or specific extension instance.\n                 * @param extName The name of the extension from which the instance shall be got.\n                 * @returns {{}} The instance of the extension with the given name or undefined if the instance couldn't be found.\n                 */\n                _base.ext = function(extName) {\n                    var result;\n                    var privateMethods = _extensionsPrivateMethods.split(' ');\n                    var i = 0;\n                    if(type(extName) == TYPES.s) {\n                        if(_extensions[LEXICON.hOP](extName)) {\n                            result = extendDeep({}, _extensions[extName]);\n                            for (; i < privateMethods.length; i++)\n                                delete result[privateMethods[i]];\n                        }\n                    }\n                    else {\n                        result = { };\n                        for(i in _extensions)\n                            result[i] = extendDeep({ }, _base.ext(i));\n                    }\n                    return result;\n                };\n\n                /**\n                 * Adds a extension to this instance.\n                 * @param extName The name of the extension which shall be added.\n                 * @param extensionOptions The extension options which shall be used.\n                 * @returns {{}} The instance of the added extension or undefined if the extension couldn't be added properly.\n                 */\n                _base.addExt = function(extName, extensionOptions) {\n                    var registeredExtensionObj = _plugin.extension(extName);\n                    var instance;\n                    var instanceAdded;\n                    var instanceContract;\n                    var contractResult;\n                    var contractFulfilled = true;\n                    if(registeredExtensionObj) {\n                        if(!_extensions[LEXICON.hOP](extName)) {\n                            instance = registeredExtensionObj.extensionFactory.call(_base,\n                                extendDeep({ }, registeredExtensionObj.defaultOptions),\n                                FRAMEWORK,\n                                COMPATIBILITY);\n\n                            if (instance) {\n                                instanceContract = instance.contract;\n                                if (type(instanceContract) == TYPES.f) {\n                                    contractResult = instanceContract(window);\n                                    contractFulfilled = type(contractResult) == TYPES.b ? contractResult : contractFulfilled;\n                                }\n                                if(contractFulfilled) {\n                                    _extensions[extName] = instance;\n                                    instanceAdded = instance.added;\n                                    if(type(instanceAdded) == TYPES.f)\n                                        instanceAdded(extensionOptions);\n\n                                    return _base.ext(extName);\n                                }\n                            }\n                        }\n                        else\n                            return _base.ext(extName);\n                    }\n                    else\n                        console.warn(\"A extension with the name \\\"\" + extName + \"\\\" isn't registered.\");\n                };\n\n                /**\n                 * Removes a extension from this instance.\n                 * @param extName The name of the extension which shall be removed.\n                 * @returns {boolean} True if the extension was removed, false otherwise e.g. if the extension wasn't added before.\n                 */\n                _base.removeExt = function(extName) {\n                    var instance = _extensions[extName];\n                    var instanceRemoved;\n                    if(instance) {\n                        delete _extensions[extName];\n\n                        instanceRemoved = instance.removed;\n                        if(type(instanceRemoved) == TYPES.f)\n                            instanceRemoved();\n\n                        return true;\n                    }\n                    return false;\n                };\n\n                /**\n                 * Constructs the plugin.\n                 * @param targetElement The element to which the plugin shall be applied.\n                 * @param options The initial options of the plugin.\n                 * @param extensions The extension(s) which shall be added right after the initialization.\n                 * @returns {boolean} True if the plugin was successfully initialized, false otherwise.\n                 */\n                function construct(targetElement, options, extensions) {\n                    _defaultOptions = globals.defaultOptions;\n                    _nativeScrollbarStyling = globals.nativeScrollbarStyling;\n                    _nativeScrollbarSize = extendDeep({}, globals.nativeScrollbarSize);\n                    _nativeScrollbarIsOverlaid = extendDeep({}, globals.nativeScrollbarIsOverlaid);\n                    _overlayScrollbarDummySize = extendDeep({}, globals.overlayScrollbarDummySize);\n                    _rtlScrollBehavior = extendDeep({}, globals.rtlScrollBehavior);\n\n                    //parse & set options but don't update\n                    setOptions(extendDeep({ }, _defaultOptions, options));\n\n                    //check if the plugin hasn't to be initialized\n                    if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.x && !_currentPreparedOptions.nativeScrollbarsOverlaid.initialize) {\n                        dispatchCallback(\"onInitializationWithdrawn\");\n                        return false;\n                    }\n\n                    _cssCalc = globals.cssCalc;\n                    _msieVersion = globals.msie;\n                    _autoUpdateRecommended = globals.autoUpdateRecommended;\n                    _supportTransition = globals.supportTransition;\n                    _supportTransform = globals.supportTransform;\n                    _supportPassiveEvents = globals.supportPassiveEvents;\n                    _supportResizeObserver = globals.supportResizeObserver;\n                    _supportMutationObserver = globals.supportMutationObserver;\n                    _restrictedMeasuring = globals.restrictedMeasuring;\n                    _documentElement = FRAMEWORK(targetElement.ownerDocument);\n                    _documentElementNative = _documentElement[0];\n                    _windowElement = FRAMEWORK(_documentElementNative.defaultView || _documentElementNative.parentWindow);\n                    _windowElementNative = _windowElement[0];\n                    _htmlElement = findFirst(_documentElement, 'html');\n                    _bodyElement =  findFirst(_htmlElement, 'body');\n                    _targetElement = FRAMEWORK(targetElement);\n                    _targetElementNative = _targetElement[0];\n                    _isTextarea = _targetElement.is('textarea');\n                    _isBody = _targetElement.is('body');\n                    _documentMixed = _documentElementNative !== document;\n\n                    var initBodyScroll;\n                    if (_isBody) {\n                        initBodyScroll = {};\n                        initBodyScroll.l = MATH.max(_targetElement[_strScrollLeft](), _htmlElement[_strScrollLeft](), _windowElement[_strScrollLeft]());\n                        initBodyScroll.t = MATH.max(_targetElement[_strScrollTop](), _htmlElement[_strScrollTop](), _windowElement[_strScrollTop]());\n                    }\n\n                    //build OverlayScrollbars DOM and Events\n                    setupStructureDOM();\n                    setupStructureEvents();\n\n                    //build Scrollbars DOM and Events\n                    setupScrollbarsDOM();\n                    setupScrollbarEvents(true);\n                    setupScrollbarEvents(false);\n\n                    //build Scrollbar Corner DOM and Events\n                    setupScrollbarCornerDOM();\n                    setupScrollbarCornerEvents();\n\n                    //create mutation observers\n                    createMutationObservers();\n\n                    if(_isBody) {\n                        //apply the body scroll to handle it right in the update method\n                        _viewportElement[_strScrollLeft](initBodyScroll.l)[_strScrollTop](initBodyScroll.t);\n\n                        //set the focus on the viewport element so you dont have to click on the page to use keyboard keys (up / down / space) for scrolling\n                        if(document.activeElement == targetElement && _viewportElementNative.focus) {\n                            //set a tabindex to make the viewportElement focusable\n                            _viewportElement.attr('tabindex', '-1');\n                            _viewportElementNative.focus();\n                            /* the tabindex has to be removed due to;\n                             * If you set the tabindex attribute on an <div>, then its child content cannot be scrolled with the arrow keys unless you set tabindex on the content, too\n                             * https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n                             */\n                            _viewportElement.one(_strMouseTouchDownEvent, function() {\n                                _viewportElement.removeAttr('tabindex');\n                            });\n                        }\n                    }\n\n                    //build resize observer for the host element\n                    setupResizeObserver(_sizeObserverElement, hostOnResized);\n\n                    //update for the first time & initialize cache\n                    _base.update(_strAuto);\n\n                    //the plugin is initialized now!\n                    _initialized = true;\n                    dispatchCallback(\"onInitialized\");\n\n                    //call all callbacks which would fire before the initialized was complete\n                    each(_callbacksInitQeueue, function(index, value) { dispatchCallback(value.n, value.a); });\n                    _callbacksInitQeueue = [ ];\n\n                    //add extensions\n                    if(type(extensions) == TYPES.s)\n                        extensions = [ extensions ];\n                    if(COMPATIBILITY.isA(extensions))\n                        each(extensions, function (index, value) {_base.addExt(value); });\n                    else if(FRAMEWORK.isPlainObject(extensions))\n                        each(extensions, function (key, value) { _base.addExt(key, value); });\n\n                    //add the transition class for transitions AFTER the first update & AFTER the applied extensions (for preventing unwanted transitions)\n                    setTimeout(function () {\n                        if (_supportTransition && !_destroyed)\n                            addClass(_hostElement, _classNameHostTransition);\n                    }, 333);\n\n                    return _initialized;\n                }\n\n                if (construct(pluginTargetElement, options, extensions)) {\n                    INSTANCES(pluginTargetElement, _base);\n                    return _base;\n                }\n                _base = undefined;\n            }\n\n            /**\n             * Initializes a new OverlayScrollbarsInstance object or changes options if already initialized or returns the current instance.\n             * @param pluginTargetElements The elements to which the Plugin shall be initialized.\n             * @param options The custom options with which the plugin shall be initialized.\n             * @param extensions The extension(s) which shall be added right after initialization.\n             * @returns {*}\n             */\n            _plugin = window[PLUGINNAME] = function(pluginTargetElements, options, extensions) {\n                if(arguments[LEXICON.l] === 0)\n                    return this;\n\n                var arr = [ ];\n                var optsIsPlainObj = FRAMEWORK.isPlainObject(options);\n                var inst;\n                var result;\n\n                //pluginTargetElements is null or undefined\n                if(!pluginTargetElements)\n                    return optsIsPlainObj || !options ? result : arr;\n\n                /*\n                   pluginTargetElements will be converted to:\n                   1. A jQueryElement Array\n                   2. A HTMLElement Array\n                   3. A Array with a single HTML Element\n                   so pluginTargetElements is always a array.\n                */\n                pluginTargetElements = pluginTargetElements[LEXICON.l] != undefined ? pluginTargetElements : [ pluginTargetElements[0] || pluginTargetElements ];\n                initOverlayScrollbarsStatics();\n\n                if(pluginTargetElements[LEXICON.l] > 0) {\n                    if(optsIsPlainObj) {\n                        FRAMEWORK.each(pluginTargetElements, function (i, v) {\n                            inst = v;\n                            if(inst !== undefined)\n                                arr.push(OverlayScrollbarsInstance(inst, options, extensions, _pluginsGlobals, _pluginsAutoUpdateLoop));\n                        });\n                    }\n                    else {\n                        FRAMEWORK.each(pluginTargetElements, function(i, v) {\n                            inst = INSTANCES(v);\n                            if((options === '!' && _plugin.valid(inst)) || (COMPATIBILITY.type(options) == TYPES.f && options(v, inst)))\n                                arr.push(inst);\n                            else if(options === undefined)\n                                arr.push(inst);\n                        });\n                    }\n                    result = arr[LEXICON.l] === 1 ? arr[0] : arr;\n                }\n                return result;\n            };\n\n            /**\n             * Returns a object which contains global information about the plugin and each instance of it.\n             * The returned object is just a copy, that means that changes to the returned object won't have any effect to the original object.\n             */\n            _plugin.globals = function () {\n                initOverlayScrollbarsStatics();\n                var globals = FRAMEWORK.extend(true, { }, _pluginsGlobals);\n                delete globals['msie'];\n                return globals;\n            };\n\n            /**\n             * Gets or Sets the default options for each new plugin initialization.\n             * @param newDefaultOptions The object with which the default options shall be extended.\n             */\n            _plugin.defaultOptions = function(newDefaultOptions) {\n                initOverlayScrollbarsStatics();\n                var currDefaultOptions = _pluginsGlobals.defaultOptions;\n                if(newDefaultOptions === undefined)\n                    return FRAMEWORK.extend(true, { }, currDefaultOptions);\n\n                //set the new default options\n                _pluginsGlobals.defaultOptions = FRAMEWORK.extend(true, { }, currDefaultOptions , _pluginsOptions._validate(newDefaultOptions, _pluginsOptions._template, true, currDefaultOptions)._default);\n            };\n\n            /**\n             * Checks whether the passed instance is a non-destroyed OverlayScrollbars instance.\n             * @param osInstance The potential OverlayScrollbars instance which shall be checked.\n             * @returns {boolean} True if the passed value is a non-destroyed OverlayScrollbars instance, false otherwise.\n             */\n            _plugin.valid = function (osInstance) {\n                return osInstance instanceof _plugin && !osInstance.getState().destroyed;\n            };\n\n            /**\n             * Registers, Unregisters or returns a extension.\n             * Register: Pass the name and the extension. (defaultOptions is optional)\n             * Unregister: Pass the name and anything except a function as extension parameter.\n             * Get extension: Pass the name of the extension which shall be got.\n             * Get all extensions: Pass no arguments.\n             * @param extensionName The name of the extension which shall be registered, unregistered or returned.\n             * @param extension A function which generates the instance of the extension or anything other to remove a already registered extension.\n             * @param defaultOptions The default options which shall be used for the registered extension.\n             */\n            _plugin.extension = function(extensionName, extension, defaultOptions) {\n                var extNameTypeString = COMPATIBILITY.type(extensionName) == TYPES.s;\n                var argLen = arguments[LEXICON.l];\n                var i = 0;\n                if(argLen < 1 || !extNameTypeString) {\n                    //return a copy of all extension objects\n                    return FRAMEWORK.extend(true, { length : _pluginsExtensions[LEXICON.l] }, _pluginsExtensions);\n                }\n                else if(extNameTypeString) {\n                    if(COMPATIBILITY.type(extension) == TYPES.f) {\n                        //register extension\n                        _pluginsExtensions.push({\n                            name : extensionName,\n                            extensionFactory : extension,\n                            defaultOptions : defaultOptions\n                        });\n                    }\n                    else {\n                        for(; i < _pluginsExtensions[LEXICON.l]; i++) {\n                            if (_pluginsExtensions[i].name === extensionName) {\n                                if(argLen > 1)\n                                    _pluginsExtensions.splice(i, 1); //remove extension\n                                else\n                                    return FRAMEWORK.extend(true, { }, _pluginsExtensions[i]); //return extension with the given name\n                            }\n                        }\n                    }\n                }\n            };\n\n            return _plugin;\n        })();\n\n        if(JQUERY && JQUERY.fn) {\n            /**\n             * The jQuery initialization interface.\n             * @param options The initial options for the construction of the plugin. To initialize the plugin, this option has to be a object! If it isn't a object, the instance(s) are returned and the plugin wont be initialized.\n             * @param extensions The extension(s) which shall be added right after initialization.\n             * @returns {*} After initialization it returns the jQuery element array, else it returns the instance(s) of the elements which are selected.\n             */\n            JQUERY.fn.overlayScrollbars = function (options, extensions) {\n                var _elements = this;\n                if(JQUERY.isPlainObject(options)) {\n                    JQUERY.each(_elements, function() { PLUGIN(this, options, extensions); });\n                    return _elements;\n                }\n                else\n                    return PLUGIN(_elements, options);\n            };\n        }\n        return PLUGIN;\n    }\n));\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/overlayscrollbars/js/jquery.overlayScrollbars.js\n// module id = 13\n// module chunks = 0","/*!\r\n * Flickity fullscreen v1.1.1\r\n * Enable fullscreen view for Flickity\r\n */\r\n\r\n/*jshint browser: true, undef: true, unused: true, strict: true*/\r\n\r\n( function( window, factory ) {\r\n  // universal module definition\r\n  /*jshint strict: false */ /*globals define, module, require */\r\n  if ( typeof define == 'function' && define.amd ) {\r\n    // AMD\r\n    define( [\r\n      'flickity/js/index',\r\n    ], factory );\r\n  } else if ( typeof module == 'object' && module.exports ) {\r\n    // CommonJS\r\n    module.exports = factory(\r\n      require('flickity')\r\n    );\r\n  } else {\r\n    // browser global\r\n    factory(\r\n      window.Flickity\r\n    );\r\n  }\r\n\r\n}( window, function factory( Flickity ) {\r\n\r\n'use strict';\r\n\r\nFlickity.createMethods.push('_createFullscreen');\r\nvar proto = Flickity.prototype;\r\n\r\n\r\nproto._createFullscreen = function() {\r\n  this.isFullscreen = false;\r\n\r\n  if ( !this.options.fullscreen ) {\r\n    return;\r\n  }\r\n  // buttons\r\n  this.viewFullscreenButton = new FullscreenButton( 'view', this );\r\n  this.exitFullscreenButton = new FullscreenButton( 'exit', this );\r\n\r\n  this.on( 'activate', this._changeFullscreenActive );\r\n  this.on( 'deactivate', this._changeFullscreenActive );\r\n};\r\n\r\n// ----- activation ----- //\r\n\r\nproto._changeFullscreenActive = function() {\r\n  var childMethod = this.isActive ? 'appendChild' : 'removeChild';\r\n  this.element[ childMethod ]( this.viewFullscreenButton.element );\r\n  this.element[ childMethod ]( this.exitFullscreenButton.element );\r\n  // activate or deactivate buttons\r\n  var activeMethod = this.isActive ? 'activate' : 'deactivate';\r\n  this.viewFullscreenButton[ activeMethod ]();\r\n  this.exitFullscreenButton[ activeMethod ]();\r\n};\r\n\r\n// ----- view, exit, toggle ----- //\r\n\r\nproto.viewFullscreen = function() {\r\n  this._changeFullscreen( true );\r\n  this.focus();\r\n};\r\n\r\nproto.exitFullscreen = function() {\r\n  this._changeFullscreen( false );\r\n};\r\n\r\nproto._changeFullscreen = function( isView ) {\r\n  if ( this.isFullscreen == isView ) {\r\n    return;\r\n  }\r\n  this.isFullscreen = isView;\r\n  var classMethod = isView ? 'add' : 'remove';\r\n  document.documentElement.classList[ classMethod ]('is-flickity-fullscreen');\r\n  this.element.classList[ classMethod ]('is-fullscreen');\r\n  this.resize();\r\n  // HACK extra reposition on fullscreen for images\r\n  if ( this.isFullscreen ) {\r\n    this.reposition();\r\n  }\r\n  this.dispatchEvent( 'fullscreenChange', null, [ isView ] );\r\n};\r\n\r\nproto.toggleFullscreen = function() {\r\n  this._changeFullscreen( !this.isFullscreen );\r\n};\r\n\r\n// ----- setGallerySize ----- //\r\n\r\n// overwrite so fullscreen cells are full height\r\nvar setGallerySize = proto.setGallerySize;\r\nproto.setGallerySize = function() {\r\n  if ( !this.options.setGallerySize ) {\r\n    return;\r\n  }\r\n  if ( this.isFullscreen ) {\r\n    // remove height style on fullscreen\r\n    this.viewport.style.height = '';\r\n  } else {\r\n    // otherwise, do normal\r\n    setGallerySize.call( this );\r\n  }\r\n};\r\n\r\n// ----- keyboard ----- //\r\n\r\n// ESC key closes full screen\r\nFlickity.keyboardHandlers[27] = function() {\r\n  this.exitFullscreen();\r\n};\r\n\r\n// ----- FullscreenButton ----- //\r\n\r\nfunction FullscreenButton( name, flickity ) {\r\n  this.name = name;\r\n  this.createButton();\r\n  this.createIcon();\r\n  // events\r\n  // trigger viewFullscreen or exitFullscreen on click\r\n  this.onClick = function() {\r\n    flickity[ name + 'Fullscreen' ]();\r\n  };\r\n  this.clickHandler = this.onClick.bind( this );\r\n}\r\n\r\nFullscreenButton.prototype.createButton = function() {\r\n  var element = this.element = document.createElement('button');\r\n  element.className = 'flickity-button flickity-fullscreen-button ' +\r\n    'flickity-fullscreen-button-' + this.name;\r\n  // prevent button from submitting form\r\n  element.setAttribute( 'type', 'button' );\r\n  // set label\r\n  var label = capitalize( this.name + ' full-screen' );\r\n  element.setAttribute( 'aria-label', label );\r\n  element.title = label;\r\n};\r\n\r\nfunction capitalize( text ) {\r\n  return text[0].toUpperCase() + text.slice(1);\r\n}\r\n\r\nvar svgURI = 'http://www.w3.org/2000/svg';\r\n\r\nvar pathDirections = {\r\n  view: 'M15,20,7,28h5v4H0V20H4v5l8-8Zm5-5,8-8v5h4V0H20V4h5l-8,8Z',\r\n  exit: 'M32,3l-7,7h5v4H18V2h4V7l7-7ZM3,32l7-7v5h4V18H2v4H7L0,29Z',\r\n};\r\n\r\nFullscreenButton.prototype.createIcon = function() {\r\n  var svg = document.createElementNS( svgURI, 'svg');\r\n  svg.setAttribute( 'class', 'flickity-button-icon' );\r\n  svg.setAttribute( 'viewBox', '0 0 32 32' );\r\n  // path & direction\r\n  var path = document.createElementNS( svgURI, 'path');\r\n  var direction = pathDirections[ this.name ];\r\n  path.setAttribute( 'd', direction );\r\n  // put it together\r\n  svg.appendChild( path );\r\n  this.element.appendChild( svg );\r\n};\r\n\r\nFullscreenButton.prototype.activate = function() {\r\n  this.element.addEventListener( 'click', this.clickHandler );\r\n};\r\n\r\nFullscreenButton.prototype.deactivate = function() {\r\n  this.element.removeEventListener( 'click', this.clickHandler );\r\n};\r\n\r\nFlickity.FullscreenButton = FullscreenButton;\r\n\r\n// ----- fin ----- //\r\n\r\nreturn Flickity;\r\n\r\n}));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/flickity-fullscreen.js","/*!\n * Flickity v2.2.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2018 Metafizzy\n */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      './drag',\n      './prev-next-button',\n      './page-dots',\n      './player',\n      './add-remove-cell',\n      './lazyload'\n    ], factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('./flickity'),\n      require('./drag'),\n      require('./prev-next-button'),\n      require('./page-dots'),\n      require('./player'),\n      require('./add-remove-cell'),\n      require('./lazyload')\n    );\n  }\n\n})( window, function factory( Flickity ) {\n  /*jshint strict: false*/\n  return Flickity;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/index.js\n// module id = 15\n// module chunks = 0","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false */\n  'use strict';\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.matchesSelector = factory();\n  }\n\n}( window, function factory() {\n  'use strict';\n\n  var matchesMethod = ( function() {\n    var ElemProto = window.Element.prototype;\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0; i < prefixes.length; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  return function matchesSelector( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  };\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/desandro-matches-selector/matches-selector.js\n// module id = 16\n// module chunks = 0","// Flickity.Cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'get-size/get-size'\n    ], function( getSize ) {\n      return factory( window, getSize );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('get-size')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Cell = factory(\n      window,\n      window.getSize\n    );\n  }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n  this.element = elem;\n  this.parent = parent;\n\n  this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n  this.element.style.position = 'absolute';\n  this.element.setAttribute( 'aria-hidden', 'true' );\n  this.x = 0;\n  this.shift = 0;\n};\n\nproto.destroy = function() {\n  // reset style\n  this.unselect();\n  this.element.style.position = '';\n  var side = this.parent.originSide;\n  this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n  this.x = x;\n  this.updateTarget();\n  this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n  var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n  this.target = this.x + this.size[ marginProperty ] +\n    this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n  // render position of cell with in slider\n  var side = this.parent.originSide;\n  this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n  this.element.classList.add('is-selected');\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n  this.element.classList.remove('is-selected');\n  this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n  this.shift = shift;\n  this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n  this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/cell.js\n// module id = 17\n// module chunks = 0","// slide\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Slide = factory();\n  }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n  this.parent = parent;\n  this.isOriginLeft = parent.originSide == 'left';\n  this.cells = [];\n  this.outerWidth = 0;\n  this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n  this.cells.push( cell );\n  this.outerWidth += cell.size.outerWidth;\n  this.height = Math.max( cell.size.outerHeight, this.height );\n  // first cell stuff\n  if ( this.cells.length == 1 ) {\n    this.x = cell.x; // x comes from first cell\n    var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n    this.firstMargin = cell.size[ beginMargin ];\n  }\n};\n\nproto.updateTarget = function() {\n  var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n  var lastCell = this.getLastCell();\n  var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n  var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n  this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n  this.cells.forEach( function( cell ) {\n    cell.select();\n  });\n};\n\nproto.unselect = function() {\n  this.cells.forEach( function( cell ) {\n    cell.unselect();\n  });\n};\n\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  });\n};\n\nreturn Slide;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/slide.js\n// module id = 18\n// module chunks = 0","// animate\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'fizzy-ui-utils/utils'\n    ], function( utils ) {\n      return factory( window, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.animatePrototype = factory(\n      window,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n  if ( this.isAnimating ) {\n    return;\n  }\n\n  this.isAnimating = true;\n  this.restingFrames = 0;\n  this.animate();\n};\n\nproto.animate = function() {\n  this.applyDragForce();\n  this.applySelectedAttraction();\n\n  var previousX = this.x;\n\n  this.integratePhysics();\n  this.positionSlider();\n  this.settle( previousX );\n  // animate next frame\n  if ( this.isAnimating ) {\n    var _this = this;\n    requestAnimationFrame( function animateFrame() {\n      _this.animate();\n    });\n  }\n};\n\nproto.positionSlider = function() {\n  var x = this.x;\n  // wrap position around\n  if ( this.options.wrapAround && this.cells.length > 1 ) {\n    x = utils.modulo( x, this.slideableWidth );\n    x = x - this.slideableWidth;\n    this.shiftWrapCells( x );\n  }\n\n  this.setTranslateX( x, this.isAnimating );\n  this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n  x += this.cursorPosition;\n  // reverse if right-to-left and using transform\n  x = this.options.rightToLeft ? -x : x;\n  var translateX = this.getPositionValue( x );\n  // use 3D tranforms for hardware acceleration on iOS\n  // but use 2D when settled, for better font-rendering\n  this.slider.style.transform = is3d ?\n    'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n  var firstSlide = this.slides[0];\n  if ( !firstSlide ) {\n    return;\n  }\n  var positionX = -this.x - firstSlide.target;\n  var progress = positionX / this.slidesWidth;\n  this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n  if ( !this.cells.length ) {\n    return;\n  }\n  this.x = -this.selectedSlide.target;\n  this.velocity = 0; // stop wobble\n  this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n  if ( this.options.percentPosition ) {\n    // percent position, round to 2 digits, like 12.34%\n    return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n  } else {\n    // pixel positioning\n    return Math.round( position ) + 'px';\n  }\n};\n\nproto.settle = function( previousX ) {\n  // keep track of frames where x hasn't moved\n  if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n    this.restingFrames++;\n  }\n  // stop animating if resting for 3 or more frames\n  if ( this.restingFrames > 2 ) {\n    this.isAnimating = false;\n    delete this.isFreeScrolling;\n    // render position with translateX when settled\n    this.positionSlider();\n    this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n  }\n};\n\nproto.shiftWrapCells = function( x ) {\n  // shift before cells\n  var beforeGap = this.cursorPosition + x;\n  this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n  // shift after cells\n  var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n  this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n  for ( var i=0; i < cells.length; i++ ) {\n    var cell = cells[i];\n    var cellShift = gap > 0 ? shift : 0;\n    cell.wrapShift( cellShift );\n    gap -= cell.size.outerWidth;\n  }\n};\n\nproto._unshiftCells = function( cells ) {\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  for ( var i=0; i < cells.length; i++ ) {\n    cells[i].wrapShift( 0 );\n  }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n  this.x += this.velocity;\n  this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n  this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n  return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n  // my thanks to Steven Wittens, who simplified this math greatly\n  return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n  if ( !this.isDraggable || !this.isPointerDown ) {\n    return;\n  }\n  // change the position to drag position by applying force\n  var dragVelocity = this.dragX - this.x;\n  var dragForce = dragVelocity - this.velocity;\n  this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n  // do not attract if pointer down or no slides\n  var dragDown = this.isDraggable && this.isPointerDown;\n  if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n    return;\n  }\n  var distance = this.selectedSlide.target * -1 - this.x;\n  var force = distance * this.options.selectedAttraction;\n  this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/animate.js\n// module id = 19\n// module chunks = 0","// drag\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unidragger/unidragger',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unidragger, utils ) {\n      return factory( window, Flickity, Unidragger, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unidragger'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window,\n      window.Flickity,\n      window.Unidragger,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n  draggable: '>1',\n  dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// --------------------------  -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n  this.on( 'activate', this.onActivateDrag );\n  this.on( 'uiChange', this._uiChangeDrag );\n  this.on( 'deactivate', this.onDeactivateDrag );\n  this.on( 'cellChange', this.updateDraggable );\n  // TODO updateDraggable on resize? if groupCells & slides change\n  // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n  // #457, RubaXa/Sortable#973\n  if ( isTouch && !isTouchmoveScrollCanceled ) {\n    window.addEventListener( 'touchmove', function() {});\n    isTouchmoveScrollCanceled = true;\n  }\n};\n\nproto.onActivateDrag = function() {\n  this.handles = [ this.viewport ];\n  this.bindHandles();\n  this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n  this.unbindHandles();\n  this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n  // disable dragging if less than 2 slides. #278\n  if ( this.options.draggable == '>1' ) {\n    this.isDraggable = this.slides.length > 1;\n  } else {\n    this.isDraggable = this.options.draggable;\n  }\n  if ( this.isDraggable ) {\n    this.element.classList.add('is-draggable');\n  } else {\n    this.element.classList.remove('is-draggable');\n  }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n  this.options.draggable = true;\n  this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n  this.options.draggable = false;\n  this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n  delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    this._pointerDownDefault( event, pointer );\n    return;\n  }\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n\n  this._pointerDownPreventDefault( event );\n  this.pointerDownFocus( event );\n  // blur\n  if ( document.activeElement != this.element ) {\n    // do not blur if already focused\n    this.pointerDownBlur();\n  }\n\n  // stop if it was moving\n  this.dragX = this.x;\n  this.viewport.classList.add('is-pointer-down');\n  // track scrolling\n  this.pointerDownScroll = getScrollPosition();\n  window.addEventListener( 'scroll', this );\n\n  this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n  // track start event position\n  // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n  this.pointerDownPointer = {\n    pageX: pointer.pageX,\n    pageY: pointer.pageY,\n  };\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n  INPUT: true,\n  TEXTAREA: true,\n  SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isFocusNode ) {\n    this.focus();\n  }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n  var isTouchStart = event.type == 'touchstart';\n  var isTouchPointer = event.pointerType == 'touch';\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n    event.preventDefault();\n  }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n  delete this.isTouchScrolling;\n  this.viewport.classList.remove('is-pointer-down');\n  this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n  window.removeEventListener( 'scroll', this );\n  delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  this.dragStartPosition = this.x;\n  this.startAnimation();\n  window.removeEventListener( 'scroll', this );\n  this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  event.preventDefault();\n\n  this.previousDragX = this.dragX;\n  // reverse if right-to-left\n  var direction = this.options.rightToLeft ? -1 : 1;\n  if ( this.options.wrapAround ) {\n    // wrap around move. #589\n    moveVector.x = moveVector.x % this.slideableWidth;\n  }\n  var dragX = this.dragStartPosition + moveVector.x * direction;\n\n  if ( !this.options.wrapAround && this.slides.length ) {\n    // slow drag\n    var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n    dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n    var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n    dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n  }\n\n  this.dragX = dragX;\n\n  this.dragMoveTime = new Date();\n  this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  if ( this.options.freeScroll ) {\n    this.isFreeScrolling = true;\n  }\n  // set selectedIndex based on where flick will end up\n  var index = this.dragEndRestingSelect();\n\n  if ( this.options.freeScroll && !this.options.wrapAround ) {\n    // if free-scroll & not wrap around\n    // do not free-scroll if going outside of bounding slides\n    // so bounding slides can attract slider, and keep it in bounds\n    var restingX = this.getRestingPosition();\n    this.isFreeScrolling = -restingX > this.slides[0].target &&\n      -restingX < this.getLastSlide().target;\n  } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n    // boost selection if selected index has not changed\n    index += this.dragEndBoostSelect();\n  }\n  delete this.previousDragX;\n  // apply selection\n  // TODO refactor this, selecting here feels weird\n  // HACK, set flag so dragging stays in correct direction\n  this.isDragSelect = this.options.wrapAround;\n  this.select( index );\n  delete this.isDragSelect;\n  this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n  var restingX = this.getRestingPosition();\n  // how far away from selected slide\n  var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n  // get closet resting going up and going down\n  var positiveResting = this._getClosestResting( restingX, distance, 1 );\n  var negativeResting = this._getClosestResting( restingX, distance, -1 );\n  // use closer resting for wrap-around\n  var index = positiveResting.distance < negativeResting.distance ?\n    positiveResting.index : negativeResting.index;\n  return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n  var index = this.selectedIndex;\n  var minDistance = Infinity;\n  var condition = this.options.contain && !this.options.wrapAround ?\n    // if contain, keep going if distance is equal to minDistance\n    function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n  while ( condition( distance, minDistance ) ) {\n    // measure distance to next cell\n    index += increment;\n    minDistance = distance;\n    distance = this.getSlideDistance( -restingX, index );\n    if ( distance === null ) {\n      break;\n    }\n    distance = Math.abs( distance );\n  }\n  return {\n    distance: minDistance,\n    // selected was previous index\n    index: index - increment\n  };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n  var len = this.slides.length;\n  // wrap around if at least 2 slides\n  var isWrapAround = this.options.wrapAround && len > 1;\n  var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n  var slide = this.slides[ slideIndex ];\n  if ( !slide ) {\n    return null;\n  }\n  // add distance for wrap-around slides\n  var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n  return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n  // do not boost if no previousDragX or dragMoveTime\n  if ( this.previousDragX === undefined || !this.dragMoveTime ||\n    // or if drag was held for 100 ms\n    new Date() - this.dragMoveTime > 100 ) {\n    return 0;\n  }\n\n  var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n  var delta = this.previousDragX - this.dragX;\n  if ( distance > 0 && delta > 0 ) {\n    // boost to next if moving towards the right, and positive velocity\n    return 1;\n  } else if ( distance < 0 && delta < 0 ) {\n    // boost to previous if moving towards the left, and negative velocity\n    return -1;\n  }\n  return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n  // get clickedCell, if cell was clicked\n  var clickedCell = this.getParentCell( event.target );\n  var cellElem = clickedCell && clickedCell.element;\n  var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n  this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n  var scroll = getScrollPosition();\n  var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n  var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n  // cancel click/tap if scroll is too much\n  if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n    this._pointerDone();\n  }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  };\n}\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/drag.js\n// module id = 20\n// module chunks = 0","/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'unipointer/unipointer'\n    ], function( Unipointer ) {\n      return factory( window, Unipointer );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('unipointer')\n    );\n  } else {\n    // browser global\n    window.Unidragger = factory(\n      window,\n      window.Unipointer\n    );\n  }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n  this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n  this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  // bind each handle\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n  var touchAction = isAdd ? this._touchActionValue : '';\n  for ( var i=0; i < this.handles.length; i++ ) {\n    var handle = this.handles[i];\n    this._bindStartEvent( handle, isAdd );\n    handle[ bindMethod ]( 'click', this );\n    // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n    if ( window.PointerEvent ) {\n      handle.style.touchAction = touchAction;\n    }\n  }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n  // track start event position\n  this.pointerDownPointer = pointer;\n\n  event.preventDefault();\n  this.pointerDownBlur();\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n  TEXTAREA: true,\n  INPUT: true,\n  SELECT: true,\n  OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n  radio: true,\n  checkbox: true,\n  button: true,\n  submit: true,\n  image: true,\n  file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n  var isCursorNode = cursorNodes[ event.target.nodeName ];\n  var isClickType = clickTypes[ event.target.type ];\n  var isOkay = !isCursorNode || isClickType;\n  if ( !isOkay ) {\n    this._pointerReset();\n  }\n  return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n  var focused = document.activeElement;\n  // do not blur body for IE10, metafizzy/flickity#117\n  var canBlur = focused && focused.blur && focused != document.body;\n  if ( canBlur ) {\n    focused.blur();\n  }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n  var moveVector = {\n    x: pointer.pageX - this.pointerDownPointer.pageX,\n    y: pointer.pageY - this.pointerDownPointer.pageY\n  };\n  // start drag if pointer has moved far enough to start drag\n  if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n    this._dragStart( event, pointer );\n  }\n  return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n  if ( this.isDragging ) {\n    this._dragEnd( event, pointer );\n  } else {\n    // pointer didn't move enough for drag to start\n    this._staticClick( event, pointer );\n  }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n  this.isDragging = true;\n  // prevent clicks\n  this.isPreventingClicks = true;\n  this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n  this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n  // do not drag if not dragging yet\n  if ( !this.isDragging ) {\n    return;\n  }\n\n  this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  event.preventDefault();\n  this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n  // set flags\n  this.isDragging = false;\n  // re-enable clicking async\n  setTimeout( function() {\n    delete this.isPreventingClicks;\n  }.bind( this ) );\n\n  this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n  if ( this.isPreventingClicks ) {\n    event.preventDefault();\n  }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n    return;\n  }\n\n  this.staticClick( event, pointer );\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( event.type != 'mouseup' ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 300ms\n    setTimeout( function() {\n      delete this.isIgnoringMouseUp;\n    }.bind( this ), 400 );\n  }\n};\n\nproto.staticClick = function( event, pointer ) {\n  this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// -----  ----- //\n\nreturn Unidragger;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/unidragger/unidragger.js\n// module id = 21\n// module chunks = 0","// prev/next buttons\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unipointer'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.Unipointer,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n  this.direction = direction;\n  this.parent = parent;\n  this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n  // properties\n  this.isEnabled = true;\n  this.isPrevious = this.direction == -1;\n  var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n  this.isLeft = this.direction == leftDirection;\n\n  var element = this.element = document.createElement('button');\n  element.className = 'flickity-button flickity-prev-next-button';\n  element.className += this.isPrevious ? ' previous' : ' next';\n  // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n  element.setAttribute( 'type', 'button' );\n  // init as disabled\n  this.disable();\n\n  element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n  // create arrow\n  var svg = this.createSVG();\n  element.appendChild( svg );\n  // events\n  this.parent.on( 'select', this.update.bind( this ) );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n  this.bindStartEvent( this.element );\n  this.element.addEventListener( 'click', this );\n  // add to DOM\n  this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n  // remove from DOM\n  this.parent.element.removeChild( this.element );\n  // click events\n  this.unbindStartEvent( this.element );\n  this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n  var svg = document.createElementNS( svgURI, 'svg');\n  svg.setAttribute( 'class', 'flickity-button-icon' );\n  svg.setAttribute( 'viewBox', '0 0 100 100' );\n  var path = document.createElementNS( svgURI, 'path');\n  var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n  path.setAttribute( 'd', pathMovements );\n  path.setAttribute( 'class', 'arrow' );\n  // rotate arrow\n  if ( !this.isLeft ) {\n    path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n  }\n  svg.appendChild( path );\n  return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n  // use shape as movement if string\n  if ( typeof shape == 'string' ) {\n    return shape;\n  }\n  // create movement string\n  return 'M ' + shape.x0 + ',50' +\n    ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n    ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n    ' L ' + shape.x3 + ',50 ' +\n    ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n    ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n    ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.parent.uiChange();\n  var method = this.isPrevious ? 'previous' : 'next';\n  this.parent[ method ]();\n};\n\n// -----  ----- //\n\nPrevNextButton.prototype.enable = function() {\n  if ( this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = false;\n  this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = true;\n  this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n  // index of first or last slide, if previous or next\n  var slides = this.parent.slides;\n  // enable is wrapAround and at least 2 slides\n  if ( this.parent.options.wrapAround && slides.length > 1 ) {\n    this.enable();\n    return;\n  }\n  var lastIndex = slides.length ? slides.length - 1 : 0;\n  var boundIndex = this.isPrevious ? 0 : lastIndex;\n  var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n  this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  prevNextButtons: true,\n  arrowShape: {\n    x0: 10,\n    x1: 60, y1: 50,\n    x2: 70, y2: 40,\n    x3: 30\n  }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n  if ( !this.options.prevNextButtons ) {\n    return;\n  }\n\n  this.prevButton = new PrevNextButton( -1, this );\n  this.nextButton = new PrevNextButton( 1, this );\n\n  this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n  this.prevButton.activate();\n  this.nextButton.activate();\n  this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n  this.prevButton.deactivate();\n  this.nextButton.deactivate();\n  this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// --------------------------  -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/prev-next-button.js\n// module id = 22\n// module chunks = 0","// page dots\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('unipointer'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.Unipointer,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n  this.parent = parent;\n  this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n  // create holder element\n  this.holder = document.createElement('ol');\n  this.holder.className = 'flickity-page-dots';\n  // create dots, array of elements\n  this.dots = [];\n  // events\n  this.handleClick = this.onClick.bind( this );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n  this.setDots();\n  this.holder.addEventListener( 'click', this.handleClick );\n  this.bindStartEvent( this.holder );\n  // add to DOM\n  this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n  this.holder.removeEventListener( 'click', this.handleClick );\n  this.unbindStartEvent( this.holder );\n  // remove from DOM\n  this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n  // get difference between number of slides and number of dots\n  var delta = this.parent.slides.length - this.dots.length;\n  if ( delta > 0 ) {\n    this.addDots( delta );\n  } else if ( delta < 0 ) {\n    this.removeDots( -delta );\n  }\n};\n\nPageDots.prototype.addDots = function( count ) {\n  var fragment = document.createDocumentFragment();\n  var newDots = [];\n  var length = this.dots.length;\n  var max = length + count;\n\n  for ( var i = length; i < max; i++ ) {\n    var dot = document.createElement('li');\n    dot.className = 'dot';\n    dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n    fragment.appendChild( dot );\n    newDots.push( dot );\n  }\n\n  this.holder.appendChild( fragment );\n  this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n  // remove from this.dots collection\n  var removeDots = this.dots.splice( this.dots.length - count, count );\n  // remove from DOM\n  removeDots.forEach( function( dot ) {\n    this.holder.removeChild( dot );\n  }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n  // remove selected class on previous\n  if ( this.selectedDot ) {\n    this.selectedDot.className = 'dot';\n    this.selectedDot.removeAttribute('aria-current');\n  }\n  // don't proceed if no dots\n  if ( !this.dots.length ) {\n    return;\n  }\n  this.selectedDot = this.dots[ this.parent.selectedIndex ];\n  this.selectedDot.className = 'dot is-selected';\n  this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n  var target = event.target;\n  // only care about dot clicks\n  if ( target.nodeName != 'LI' ) {\n    return;\n  }\n\n  this.parent.uiChange();\n  var index = this.dots.indexOf( target );\n  this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n  if ( !this.options.pageDots ) {\n    return;\n  }\n  this.pageDots = new PageDots( this );\n  // events\n  this.on( 'activate', this.activatePageDots );\n  this.on( 'select', this.updateSelectedPageDots );\n  this.on( 'cellChange', this.updatePageDots );\n  this.on( 'resize', this.updatePageDots );\n  this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n  this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n  this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n  this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n  this.pageDots.deactivate();\n};\n\n// -----  ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/page-dots.js\n// module id = 23\n// module chunks = 0","// player & autoPlay\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter',\n      'fizzy-ui-utils/utils',\n      './flickity'\n    ], function( EvEmitter, utils, Flickity ) {\n      return factory( EvEmitter, utils, Flickity );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      require('ev-emitter'),\n      require('fizzy-ui-utils'),\n      require('./flickity')\n    );\n  } else {\n    // browser global\n    factory(\n      window.EvEmitter,\n      window.fizzyUIUtils,\n      window.Flickity\n    );\n  }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n  this.parent = parent;\n  this.state = 'stopped';\n  // visibility change event handler\n  this.onVisibilityChange = this.visibilityChange.bind( this );\n  this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n  if ( this.state == 'playing' ) {\n    return;\n  }\n  // do not play if page is hidden, start playing when page is visible\n  var isPageHidden = document.hidden;\n  if ( isPageHidden ) {\n    document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n    return;\n  }\n\n  this.state = 'playing';\n  // listen to visibility change\n  document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n  // start ticking\n  this.tick();\n};\n\nPlayer.prototype.tick = function() {\n  // do not tick if not playing\n  if ( this.state != 'playing' ) {\n    return;\n  }\n\n  var time = this.parent.options.autoPlay;\n  // default to 3 seconds\n  time = typeof time == 'number' ? time : 3000;\n  var _this = this;\n  // HACK: reset ticks if stopped and started within interval\n  this.clear();\n  this.timeout = setTimeout( function() {\n    _this.parent.next( true );\n    _this.tick();\n  }, time );\n};\n\nPlayer.prototype.stop = function() {\n  this.state = 'stopped';\n  this.clear();\n  // remove visibility change event\n  document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n  clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n  if ( this.state == 'playing' ) {\n    this.state = 'paused';\n    this.clear();\n  }\n};\n\nPlayer.prototype.unpause = function() {\n  // re-start play if paused\n  if ( this.state == 'paused' ) {\n    this.play();\n  }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n  var isPageHidden = document.hidden;\n  this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n  this.play();\n  document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n  this.player = new Player( this );\n\n  this.on( 'activate', this.activatePlayer );\n  this.on( 'uiChange', this.stopPlayer );\n  this.on( 'pointerDown', this.stopPlayer );\n  this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n  if ( !this.options.autoPlay ) {\n    return;\n  }\n  this.player.play();\n  this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n  this.player.play();\n};\n\nproto.stopPlayer = function() {\n  this.player.stop();\n};\n\nproto.pausePlayer = function() {\n  this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n  this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n  this.player.stop();\n  this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n  if ( !this.options.pauseAutoPlayOnHover ) {\n    return;\n  }\n  this.player.pause();\n  this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n  this.player.unpause();\n  this.element.removeEventListener( 'mouseleave', this );\n};\n\n// -----  ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/player.js\n// module id = 24\n// module chunks = 0","// add, remove cell\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n  var fragment = document.createDocumentFragment();\n  cells.forEach( function( cell ) {\n    fragment.appendChild( cell.element );\n  });\n  return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n  var cells = this._makeCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  var len = this.cells.length;\n  // default to append\n  index = index === undefined ? len : index;\n  // add cells with document fragment\n  var fragment = getCellsFragment( cells );\n  // append to slider\n  var isAppend = index == len;\n  if ( isAppend ) {\n    this.slider.appendChild( fragment );\n  } else {\n    var insertCellElement = this.cells[ index ].element;\n    this.slider.insertBefore( fragment, insertCellElement );\n  }\n  // add to this.cells\n  if ( index === 0 ) {\n    // prepend, add to start\n    this.cells = cells.concat( this.cells );\n  } else if ( isAppend ) {\n    // append, add to end\n    this.cells = this.cells.concat( cells );\n  } else {\n    // insert in this.cells\n    var endCells = this.cells.splice( index, len - index );\n    this.cells = this.cells.concat( cells ).concat( endCells );\n  }\n\n  this._sizeCells( cells );\n  this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n  this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n  this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n  var cells = this.getCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n\n  var minCellIndex = this.cells.length - 1;\n  // remove cells from collection & DOM\n  cells.forEach( function( cell ) {\n    cell.remove();\n    var index = this.cells.indexOf( cell );\n    minCellIndex = Math.min( index, minCellIndex );\n    utils.removeFrom( this.cells, cell );\n  }, this );\n\n  this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n  var cell = this.getCell( elem );\n  if ( !cell ) {\n    return;\n  }\n  cell.getSize();\n\n  var index = this.cells.indexOf( cell );\n  this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n  var prevSelectedElem = this.selectedElement;\n  this._positionCells( changedCellIndex );\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  // update selectedIndex\n  // try to maintain position & select previous selected element\n  var cell = this.getCell( prevSelectedElem );\n  if ( cell ) {\n    this.selectedIndex = this.getCellSlideIndex( cell );\n  }\n  this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n  this.emitEvent( 'cellChange', [ changedCellIndex ] );\n  // position slider\n  this.select( this.selectedIndex );\n  // do not position slider after lazy load\n  if ( isPositioningSlider ) {\n    this.positionSliderAtSelected();\n  }\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/add-remove-cell.js\n// module id = 25\n// module chunks = 0","// lazyload\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'fizzy-ui-utils/utils'\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('./flickity'),\n      require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n      window,\n      window.Flickity,\n      window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n  this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n  var lazyLoad = this.options.lazyLoad;\n  if ( !lazyLoad ) {\n    return;\n  }\n  // get adjacent cells, use lazyLoad option for adjacent count\n  var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n  var cellElems = this.getAdjacentCellElements( adjCount );\n  // get lazy images in those cells\n  var lazyImages = [];\n  cellElems.forEach( function( cellElem ) {\n    var lazyCellImages = getCellLazyImages( cellElem );\n    lazyImages = lazyImages.concat( lazyCellImages );\n  });\n  // load lazy images\n  lazyImages.forEach( function( img ) {\n    new LazyLoader( img, this );\n  }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n  // check if cell element is lazy image\n  if ( cellElem.nodeName == 'IMG' ) {\n    var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n    var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n    var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n    if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n      return [ cellElem ];\n    }\n  }\n  // select lazy images in cell\n  var lazySelector = 'img[data-flickity-lazyload], ' +\n    'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n  var imgs = cellElem.querySelectorAll( lazySelector );\n  return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n  this.img = img;\n  this.flickity = flickity;\n  this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  // get src & srcset\n  var src = this.img.getAttribute('data-flickity-lazyload') ||\n    this.img.getAttribute('data-flickity-lazyload-src');\n  var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n  // set src & serset\n  this.img.src = src;\n  if ( srcset ) {\n    this.img.setAttribute( 'srcset', srcset );\n  }\n  // remove attr\n  this.img.removeAttribute('data-flickity-lazyload');\n  this.img.removeAttribute('data-flickity-lazyload-src');\n  this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n  this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n  this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n  // unbind events\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n\n  var cell = this.flickity.getParentCell( this.img );\n  var cellElem = cell && cell.element;\n  this.flickity.cellSizeChange( cellElem );\n\n  this.img.classList.add( className );\n  this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -----  ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/flickity/js/lazyload.js\n// module id = 26\n// module chunks = 0","// txtTruncate - a jQuery plugin to truncate text\r\n// version 1.1.0\r\n// https://github.com/blakehaswell/txtTruncate\r\n//\r\n// Copyright (c) 2011-2012 Blake Haswell\r\n// Licensed under the MIT license: http://opensource.org/licenses/MIT\r\n(function ($) {\r\n\r\n    'use strict';\r\n\r\n\r\n    // Constructor\r\n    function Truncator(elem, options) {\r\n\r\n        // Cache the instance.\r\n        var self = this;\r\n\r\n        self.$elem      = $(elem);\r\n        self.lineHeight = self._getLineHeight();\r\n        self.origHeight = self.$elem.height();\r\n        self.origTxt    = self.$elem.text();\r\n\r\n        // Override default settings with passed options (if any)\r\n        self.settings   = $.extend({}, self._defaults, options || {});\r\n\r\n        self._setLines();\r\n\r\n        self.truncate();\r\n\r\n        // Text should be truncated whenever the window has been resized so that it\r\n        // works as expected on fluid layouts\r\n        var timeout;\r\n        $(window).resize(function(){\r\n\r\n            // Clear any existing timeout.\r\n            clearTimeout(timeout);\r\n\r\n            // Create a new one.\r\n            timeout = setTimeout($.proxy(self.truncate, self), 200);\r\n        });\r\n    }\r\n\r\n\r\n    Truncator.prototype = {\r\n\r\n        /**\r\n         * If the element doesn't fit in the specified number of lines then we\r\n         * collapse the element to the desired height and truncate the text.\r\n         */\r\n        hide: function () {\r\n            if (this._getCurrentLines() > this.settings.lines) {\r\n                this.$elem.animate({\r\n                    height: this.lineHeight * this.settings.lines,\r\n                }, $.proxy(this.truncate, this));\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Restores the element's original text and expands the element to take\r\n         * up the required space.\r\n         */\r\n        show: function () {\r\n\r\n            // Set the element's height to the current height to stop it from\r\n            // getting bigger when we restore the original text\r\n            this.$elem.height(this.$elem.height());\r\n\r\n            this._restoreOrigTxt();\r\n            this.$elem.animate({\r\n                height: this.origHeight,\r\n            });\r\n\r\n        },\r\n\r\n        /**\r\n         * Removes characters from the element until it fits in the specified\r\n         * number of lines.\r\n         */\r\n        truncate: function () {\r\n\r\n            // Prepare the element before calculating the lines\r\n            this._prepareElem();\r\n\r\n            var currTxt      = this._restoreOrigTxt(),\r\n                origTxtLines = this._getCurrentLines(),\r\n                charsPerLine = Math.round(currTxt.length / origTxtLines),\r\n                charsPerHalfLine = Math.round(charsPerLine / 2);\r\n\r\n            // Only continue to truncate if we have more lines than we want\r\n            if (origTxtLines > this.settings.lines) {\r\n\r\n                // If we have way more lines than we want take a guess at how\r\n                // much to cull\r\n                if (origTxtLines > this.settings.lines + 1) {\r\n\r\n                    // Given our charsPerLine value, truncate text so it's about\r\n                    // 1 line too tall\r\n                    currTxt = this._truncateElementTxt((this.settings.lines + 1) * charsPerLine);\r\n\r\n                    // If we still have way too many lines then keep removing\r\n                    // half a line of text until we only have 1 line more than\r\n                    // we want\r\n                    while (this._getCurrentLines() > this.settings.lines + 1) {\r\n                        currTxt = this._truncateElementTxt(currTxt.length - charsPerHalfLine);\r\n                    }\r\n\r\n                }\r\n\r\n                // Take off 1 character at a time until we have the number of\r\n                // lines we want.\r\n                while (this._getCurrentLines() > this.settings.lines) {\r\n\r\n                    // Due to potential weirdness where height() and lineHeight produce different values even for one line, we need to stop infinite loops.\r\n                    // If we're down to half a line and still truncating, something has gone wrong.\r\n                    if (currTxt.length == charsPerHalfLine) {\r\n                        this._recoverFromLoop(currTxt);\r\n                        break;\r\n                    }\r\n\r\n                    // Otherwise, truncate.\r\n                    currTxt = this._truncateElementTxt(currTxt.length - 1);\r\n                }\r\n            }\r\n\r\n            this._restoreElem();\r\n\r\n        },\r\n\r\n        /**\r\n         * The default settings to use if no `options` argument is provided when\r\n         * instantiating the Truncator.\r\n         */\r\n        _defaults: {\r\n            end   : '…',\r\n            lines : null,\r\n        },\r\n\r\n        /**\r\n         * Get the line height, if we're in IE and there's no unit of measurement convert it to a %\r\n         * so jQuery can calculate the right px value and IE doesn't explode.\r\n         */\r\n        _getLineHeight : function () {\r\n            var ieVal = null;\r\n\r\n            // check if IE's 'currentStyle' is available\r\n            if (document.body.currentStyle) {\r\n\r\n                // get the line height as IE reports it - note % are converted to pt\r\n                ieVal = this.$elem.get(0).currentStyle.lineHeight;\r\n\r\n                // if there's no unit of measurement\r\n                if (!ieVal.match(/px|PX|pt|PT|em|EM/)) {\r\n\r\n                    // set the lineHeight to an equivalent % so that IE reports a value\r\n                    // jQuery can work with\r\n                    this.$elem.css('line-height', (ieVal * 100) + '%');\r\n                }\r\n            }\r\n\r\n            return parseInt(this.$elem.css('line-height'), 10);\r\n        },\r\n\r\n        /**\r\n         * Determines how many \"lines\" the element takes up (based on\r\n         * its height).\r\n         */\r\n        _getCurrentLines: function () {\r\n            return Math.round(this.$elem.height() / this.lineHeight);\r\n        },\r\n\r\n        /**\r\n         * Prepares the element to be manipulated by the truncate method by\r\n         * removing CSS properties which influence height.\r\n         *\r\n         * TODO Call at the start of the truncate method and reset properties to their original value at the end?\r\n         */\r\n        _prepareElem: function () {\r\n\r\n            // Store the original CSS values so we can restore them later\r\n            this.css = {\r\n                height    : $.style(this.$elem, 'height') || 'auto',\r\n                maxHeight : this.$elem.css('max-height'),\r\n                minHeight : this.$elem.css('min-height'),\r\n            };\r\n\r\n            // Remove CSS values which influence the height of the element\r\n            this.$elem.css({\r\n                height    : 'auto',\r\n                maxHeight : 'none',\r\n                minHeight : 0,\r\n            });\r\n        },\r\n\r\n        /**\r\n         * Helps recover from infinite loops brought on by stupid discrepancies between height and line-height.\r\n         * @param string currTxt The currently displayed text.\r\n         */\r\n        _recoverFromLoop: function(currTxt){\r\n\r\n            // Grab the current height of the element (which should be the 'ideal' height).\r\n            var height = this.$elem.height();\r\n            var maxLength = this.origTxt.length;\r\n\r\n            // Now keep adding characters back until the height changes, or alternatively, we've restored all the characters.\r\n            while (height == this.$elem.height() && currTxt.length < maxLength) {\r\n                currTxt = this._truncateElementTxt(currTxt.length + 1);\r\n            }\r\n\r\n            // If the height actually changed, take off the last character we added.\r\n            if (this.$elem.height() != height) {\r\n                this._truncateElementTxt(currTxt.length - 1);\r\n            }\r\n\r\n            // If we wound up displaying everything, drop the ...\r\n            if (currTxt.length == maxLength) {\r\n                this._restoreOrigTxt();\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Restores the element's original styles.\r\n         */\r\n        _restoreElem: function () {\r\n            this.$elem.css(this.css);\r\n        },\r\n\r\n        /**\r\n         * Restores the element's original text. Return value is the\r\n         * original text.\r\n         */\r\n        _restoreOrigTxt: function () {\r\n            this.$elem.text(this.origTxt);\r\n            return this.origTxt;\r\n        },\r\n\r\n        /**\r\n         * If a number of lines hasn't been defined in the settings then we set\r\n         * the lines based on the element's `max-height` or, failing that,\r\n         * default to 1 line.\r\n         */\r\n        _setLines: function () {\r\n\r\n            // If a maximum number of lines hasn't been defined then we\r\n            // calculate it\r\n            if (!this.settings.lines) {\r\n\r\n                // If the element's max-height is greater than its line-height\r\n                // we use that to calculate the number of lines\r\n                var maxHeight = parseInt(this.$elem.css('max-height'), 10);\r\n\r\n                if (maxHeight > this.lineHeight) {\r\n                    this.settings.lines = Math.floor(maxHeight / this.lineHeight);\r\n                }\r\n\r\n                // Otherwise we'll just assume that we want to truncate to\r\n                // 1 line\r\n                else {\r\n                    this.settings.lines = 1;\r\n                }\r\n\r\n            }\r\n\r\n        },\r\n\r\n        /**\r\n         * Given a `length`, this method truncates the element's text to that\r\n         * length and adds the prepends the `end` string.\r\n         *\r\n         * Returns the truncated text (not including the `end` string).\r\n         */\r\n        _truncateElementTxt: function (length) {\r\n            var txt = this.origTxt.substring(0, length);\r\n            this.$elem.text(txt + this.settings.end);\r\n            return txt;\r\n        },\r\n\r\n    };\r\n\r\n\r\n    // jQuery plugin\r\n    $.fn.txtTruncate = function (options) {\r\n        return this.each(function () {\r\n            $(this).data('truncator', new Truncator(this, options));\r\n        });\r\n    };\r\n\r\n\r\n}(jQuery));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/jquery.txtTruncate.js","import 'bootstrap';\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/autoload/_bootstrap.js","/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n  (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, function (exports, $, Popper) { 'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        } // Disable Popper.js if we have a static display\n\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n//# sourceMappingURL=bootstrap.js.map\n\n\n\n// WEBPACK FOOTER //\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/bootstrap/dist/js/bootstrap.js","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.7\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n  if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n    timeoutDuration = 1;\n    break;\n  }\n}\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.right - result.left;\n  var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop, 10);\n    var marginLeft = parseFloat(styles.marginLeft, 10);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicity asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport'\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/popper.js/dist/esm/popper.js\n// module id = 30\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 31\n// module chunks = 0","import camelCase from './camelCase';\r\n\r\n/**\r\n * DOM-based Routing\r\n *\r\n * Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish\r\n *\r\n * The routing fires all common scripts, followed by the page specific scripts.\r\n * Add additional events for more control over timing e.g. a finalize event\r\n */\r\nclass Router {\r\n\r\n  /**\r\n   * Create a new Router\r\n   * @param {Object} routes\r\n   */\r\n  constructor(routes) {\r\n    this.routes = routes;\r\n  }\r\n\r\n  /**\r\n   * Fire Router events\r\n   * @param {string} route DOM-based route derived from body classes (`<body class=\"...\">`)\r\n   * @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.\r\n   * @param {string} [arg] Any custom argument to be passed to the event.\r\n   */\r\n  fire(route, event = 'init', arg) {\r\n    if(typeof(Event) === 'function') {\r\n      document.dispatchEvent(new CustomEvent('routed', {\r\n        bubbles: true,\r\n        detail: {\r\n          route,\r\n          fn: event,\r\n        },\r\n      }));\r\n    }\r\n\r\n    const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';\r\n    if (fire) {\r\n      this.routes[route][event](arg);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Automatically load and fire Router events\r\n   *\r\n   * Events are fired in the following order:\r\n   *  * common init\r\n   *  * page-specific init\r\n   *  * page-specific finalize\r\n   *  * common finalize\r\n   */\r\n  loadEvents() {\r\n    // Fire common init JS\r\n    this.fire('common');\r\n\r\n    // Fire page-specific init JS, and then finalize JS\r\n    document.body.className\r\n      .toLowerCase()\r\n      .replace(/-/g, '_')\r\n      .split(/\\s+/)\r\n      .map(camelCase)\r\n      .forEach((className) => {\r\n        this.fire(className);\r\n        this.fire(className, 'finalize');\r\n      });\r\n\r\n    // Fire common finalize JS\r\n    this.fire('common', 'finalize');\r\n  }\r\n}\r\n\r\nexport default Router;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/Router.js","/**\r\n * the most terrible camelizer on the internet, guaranteed!\r\n * @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD\r\n * @return {string} String converted to camel-case, e.g., camelCaseIsHard\r\n */\r\nexport default str => `${str.charAt(0).toLowerCase()}${str.replace(/[\\W_]/g, '|').split('|')\r\n  .map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\r\n  .join('')\r\n  .slice(1)}`;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/camelCase.js","export default {\r\n\tinit () {\r\n\t\t// JavaScript to be fired on all pages\r\n\t\trequire( '../components/modal' );\r\n\t\trequire( '../components/nav' );\r\n\t\trequire( '../components/headroom' );\r\n\t\trequire( '../components/cookie' );\r\n\t\trequire( '../components/filter' );\r\n\t\trequire( '../components/dropdown' );\r\n\t\trequire( '../components/picker' );\r\n\t\trequire( '../components/video' );\r\n\t\trequire( '../components/sidebar' );\r\n        require( '../components/size-guide' );\r\n\t\trequire( '../components/instagram' );\r\n\t\trequire( '../components/newsletter' );\r\n\t\trequire( '../components/unshippable' );\r\n\t\trequire( '../components/alert' );\r\n\t\trequire( '../components/category' );\r\n\t\trequire( '../components/product-selected' );\r\n\t\trequire( '../components/product' );\r\n\t\trequire( '../components/cart' );\r\n\t\trequire( '../components/language' );\r\n\t\trequire( '../components/search' );\r\n\t\trequire( '../components/checkout' );\r\n\t\trequire( '../components/scroll' );\r\n\t\trequire( '../components/backgroundSwitch' );\r\n\t\trequire( '../components/articles' );\r\n\t\trequire( '../components/language' );\r\n\t\trequire( '../components/text-banner' );\r\n\t\trequire( '../components/forms' );\r\n\t\trequire( '../components/hero' );\r\n\t\trequire( '../components/store-locator' );\r\n\t\trequire( '../components/bullet-list' );\r\n\t\trequire( '../components/bundles' );\r\n\t\trequire( '../tracking/hotjar' );\r\n\t\trequire( '../components/text-editor' );\r\n\t\trequire( '../tracking/gtag' );\r\n        require( '../components/top-banner' );\r\n\t},\r\n\tfinalize () {\r\n\t\t// JavaScript to be fired on all pages, after page specific JS is fired\r\n\t\t$( '.js-plus-item' ).plusItem();\r\n\t},\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/routes/common.js","let Alert = require('../components/alert');\r\n\r\nlet modals = {};\r\n\r\nmodals.init = function () {\r\n\tmodals.modal();\r\n\tlet alertType = modals.URL('alert')\r\n\r\n\tif (alertType != undefined) {\r\n\t\tAlert.show(alertType, 'title here', 'message here');\r\n\t}\r\n}\r\n\r\nmodals.modal = function () {\r\n\t\t$('.modal').on('shown.bs.modal', function () {\r\n\t\t\twindow.disableBodyScroll(true, '#'+ $(this).attr('id'));\r\n\t\t});\r\n\t\r\n\t\t$('.modal').on('hidden.bs.modal', function () {\r\n\t\t\twindow.disableBodyScroll(false, '#'+ $(this).attr('id'));\r\n\t\t});\r\n\r\n\t\t$('#js-newsletter-modal').on('shown.bs.modal', function () {\r\n\t\t\tdocument.documentElement.classList.add('no-scroll');\r\n\t\t});\r\n\t\r\n\t\t$('#js-newsletter-modal').on('hidden.bs.modal', function () {\r\n\t\t\tdocument.documentElement.classList.remove('no-scroll');\r\n\t\t})\r\n};\r\n\r\n\r\nmodals.URL = function(name) {\r\n\t/* eslint-disable no-useless-escape */\r\n\tname = name.replace(/[\\[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n\tlet regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n\tlet results = regex.exec(location.search);\r\n\treturn results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n}\r\n\r\nmodals.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/modal.js","let Nav = {};\r\nlet header = $('.js-header');\r\n\r\nNav.init = function () {\r\n    Nav.overlay();\r\n    Nav.dropdown();\r\n    Nav.transparency();\r\n}\r\n\r\nNav.overlay = function () {\r\n    let cartOverlay = $('.js-cart-overlay');\r\n    let navBarCollapse = $('#navbarNav');\r\n\r\n    // Cart Overlay\r\n    if (!$('body').is('.isApple, .AndroidOS')) {\r\n        cartOverlay.hover(function () {\r\n            $('body').addClass('cart-overlay');\r\n        }, function () {\r\n            $('body').removeClass('cart-overlay');\r\n        });\r\n    }\r\n\r\n    navBarCollapse.on('show.bs.collapse', function () {\r\n        $('body').addClass('nav-overlay');\r\n        document.documentElement.classList.add('no-scroll');\r\n        window.disableBodyScroll(true, '.navbar-collapse');\r\n\r\n    })\r\n\r\n    let resetMenu = $('.js-menu-dropdown, .js-menu-body, .js-submenu-dropdown, .js-submenu-body')\r\n\r\n    navBarCollapse.on('hidden.bs.collapse', function () {\r\n        $('body').removeClass('nav-overlay');\r\n        document.documentElement.classList.remove('no-scroll');\r\n        window.disableBodyScroll(false, '.navbar-collapse');\r\n        resetMenu.removeClass('show');\r\n        $('body').removeClass('first-menu second-menu');\r\n\r\n    })\r\n};\r\n\r\nNav.dropdown = function () {\r\n    // Menu Dropdown Mobile\r\n    let menuToggle = $('.js-menu-dropdown');\r\n\r\n    menuToggle.click(function () {\r\n        let thisMenu = $(this);\r\n\r\n        if (thisMenu.hasClass('show')) {\r\n            thisMenu.next('.js-menu-body').removeClass('show');\r\n            thisMenu.removeClass('show');\r\n        } else {\r\n            menuToggle.next('.js-menu-body').removeClass('show');\r\n            menuToggle.removeClass('show');\r\n            thisMenu.next('.js-menu-body').addClass('show');\r\n            thisMenu.addClass('show');\r\n\r\n            if (thisMenu.hasClass('is-full')) {\r\n                $('body').addClass('first-menu');\r\n                window.disableBodyScroll(false, '.navbar-collapse');\r\n                window.disableBodyScroll(true, '.js-menu-body');\r\n            }\r\n        }\r\n    });\r\n\r\n    let menuClose = $('.js-menu-dropdown-close');\r\n\r\n    menuClose.click(function () {\r\n        let thisMenu = $(this);\r\n        $('.js-menu-dropdown').removeClass('show');\r\n        thisMenu.closest('.js-menu-body').removeClass('show');\r\n        $('body').removeClass('first-menu');\r\n\r\n        window.disableBodyScroll(false, '.js-menu-body');\r\n        window.disableBodyScroll(true, '.navbar-collapse');\r\n    });\r\n\r\n\r\n    // Submenu Dropdown Desktop\r\n    if (window.matchMedia('(min-width: 1024px)').matches) {\r\n        let subMenuItem = $('.subnav-left-menu-item');\r\n        let subMenu = $('.subnav-left-menu');\r\n        subMenuItem.hover(\r\n            function () {\r\n                let thisMenu = $(this);\r\n                let subMenuListLength = thisMenu.find('.js-submenu-body ul li').length;\r\n                let subMenuListHeight = (subMenuListLength * 40) + 50;\r\n                subMenu.css('min-height', subMenuListHeight + 'px');\r\n                subMenuItem.addClass('not-active');\r\n                thisMenu.removeClass('not-active');\r\n            },\r\n            function () {\r\n                subMenu.attr('style', '');\r\n                subMenuItem.removeClass('not-active');\r\n            }\r\n        );\r\n    }\r\n\r\n    // Submenu Dropdown Mobile\r\n    let subMenuToggle = $('.js-submenu-dropdown');\r\n\r\n    subMenuToggle.click(function () {\r\n        let thisMenu = $(this);\r\n\r\n        if (thisMenu.hasClass('show')) {\r\n            thisMenu.next('.js-submenu-body').removeClass('show');\r\n            thisMenu.removeClass('show');\r\n        } else {\r\n            subMenuToggle.next('.js-submenu-body').removeClass('show');\r\n            subMenuToggle.removeClass('show');\r\n            thisMenu.next('.js-submenu-body').addClass('show');\r\n            thisMenu.addClass('show');\r\n            $('body').addClass('second-menu');\r\n            $('body').removeClass('first-menu');\r\n\r\n            window.disableBodyScroll(false, '.js-menu-body');\r\n            window.disableBodyScroll(true, '.js-submenu-body');\r\n        }\r\n    });\r\n\r\n    let subMenuClose = $('.js-submenu-dropdown-close');\r\n\r\n    subMenuClose.click(function () {\r\n        let thisMenu = $(this);\r\n        $('.js-submenu-dropdown').removeClass('show');\r\n        thisMenu.closest('.js-submenu-body').removeClass('show');\r\n        $('body').removeClass('second-menu');\r\n        $('body').addClass('first-menu');\r\n\r\n        window.disableBodyScroll(false, '.js-submenu-body');\r\n        window.disableBodyScroll(true, '.js-menu-body');\r\n    });\r\n\r\n    // Nav toggle\r\n    let navToggle = $('.js-nav-toggle');\r\n    let sideOverlay = $('.side-overlay');\r\n    let wpAdminbar = $('#wpadminbar');\r\n    let wpAdminbarHeight = 0;\r\n\r\n    navToggle.click(function () {\r\n\r\n        if (wpAdminbar) {\r\n            wpAdminbarHeight = wpAdminbar.innerHeight();\r\n        }\r\n\r\n        sideOverlay.css('top', (header.innerHeight() + wpAdminbarHeight) + 'px')\r\n    });\r\n\r\n};\r\n\r\nNav.transparency = function () {\r\n    if (!header.hasClass('js-nav-transparent')) {\r\n        return;\r\n    } else {\r\n        if( $('body').hasClass('home') ){\r\n            $('body').addClass('no-padding-top');\r\n        }\r\n\r\n        if( $('body').hasClass('tax-silk_category') ){\r\n            $('.text-intro-block').addClass('extend-category-bg');\r\n            $('body').addClass('no-padding-top');\r\n        }\r\n\r\n\t\tif($(window).scrollTop() < 120) {\r\n\t\t\theader.addClass('is-transparent');\r\n\t\t} else {\r\n\t\t\theader.removeClass('js-nav-transparent');\r\n\t\t}\r\n\r\n        $(window).scroll(() => {\r\n            let top_of_screen = $(window).scrollTop();\r\n            if (top_of_screen > 120) {\r\n\t\t\t\theader.removeClass('is-transparent');\r\n            } else {\r\n\t\t\t\tif(header.hasClass('js-nav-open')){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\theader.addClass('is-transparent');\r\n\t\t\t\t}\r\n\t\t\t\t\r\n            }\r\n        });\r\n\r\n\t\tconst navMouseIn = () => {\r\n\t\t\theader.addClass('js-nav-open');\r\n\t\t\tif(header.hasClass('js-nav-transparent')){\r\n\t\t\t\theader.removeClass('is-transparent');\r\n\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst navMouseOut = () => {\r\n\t\t\theader.removeClass('js-nav-open');\r\n\t\t\tif(header.hasClass('js-nav-transparent')){\r\n\t\t\t\tif($(window).scrollTop() < 120) {\r\n\t\t\t\t\theader.addClass('is-transparent');\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n        header.hover(navMouseIn, navMouseOut)\r\n    }\r\n};\r\n\r\nNav.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/nav.js","/* eslint-disable no-unused-vars */\r\nimport Headroom from '../vendor/headroom';\r\n\r\nlet headroom = {};\r\n\r\n( function($) {\r\n\r\n    headroom.init = function() {\r\n        let msg = document.getElementById( 'js-main-nav-msg' );\r\n        let nav = document.getElementById( 'js-nav-menu' );\r\n        let body = document.getElementsByTagName('body')[0];\r\n\r\n        if( msg && nav ) {\r\n            let headroom = new Headroom(nav, {\r\n                offset: msg.offsetHeight,\r\n                classes: {\r\n                    notTop: 'is-fixed-top',\r\n                },\r\n                onTop : function() {\r\n                    msg.classList.remove( 'd-none' );\r\n                    body.classList.remove( 'has-fineprint-hidden' );\r\n                },\r\n                onNotTop : function() {\r\n                    msg.classList.add( 'd-none' );\r\n                    body.classList.add( 'has-fineprint-hidden' );\r\n                },\r\n            } );\r\n\r\n            headroom.init();\r\n        }\r\n    };\r\n\r\n    headroom.init();\r\n\r\n})(jQuery);\r\n\r\nwindow.headroom = headroom;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/headroom.js","/*!\r\n * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it\r\n * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js\r\n * License: MIT\r\n */\r\n\r\n(function(root, factory) {\r\n    'use strict';\r\n\r\n    if (typeof define === 'function' && define.amd) {\r\n        // AMD. Register as an anonymous module.\r\n        define([], factory);\r\n    }\r\n    else if (typeof exports === 'object') {\r\n        // COMMONJS\r\n        module.exports = factory();\r\n    }\r\n    else {\r\n        // BROWSER\r\n        root.Headroom = factory();\r\n    }\r\n}(this, function() {\r\n    'use strict';\r\n\r\n    /* exported features */\r\n    \r\n    var features = {\r\n        bind : !!(function(){}.bind),\r\n        classList : 'classList' in document.documentElement,\r\n        rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame),\r\n    };\r\n    window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\r\n    \r\n    /**\r\n     * Handles debouncing of events via requestAnimationFrame\r\n     * @see http://www.html5rocks.com/en/tutorials/speed/animations/\r\n     * @param {Function} callback The callback to handle whichever event\r\n     */\r\n    function Debouncer (callback) {\r\n        this.callback = callback;\r\n        this.ticking = false;\r\n    }\r\n    Debouncer.prototype = {\r\n        constructor : Debouncer,\r\n    \r\n        /**\r\n         * dispatches the event to the supplied callback\r\n         * @private\r\n         */\r\n        update : function() {\r\n            this.callback && this.callback();\r\n            this.ticking = false;\r\n        },\r\n    \r\n        /**\r\n         * ensures events don't get stacked\r\n         * @private\r\n         */\r\n        requestTick : function() {\r\n            if(!this.ticking) {\r\n                requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\r\n                this.ticking = true;\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Attach this as the event listeners\r\n         */\r\n        handleEvent : function() {\r\n            this.requestTick();\r\n        },\r\n    };\r\n    /**\r\n     * Check if object is part of the DOM\r\n     * @constructor\r\n     * @param {Object} obj element to check\r\n     */\r\n    function isDOMElement(obj) {\r\n        return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\r\n    }\r\n    \r\n    /**\r\n     * Helper function for extending objects\r\n     */\r\n    function extend (object /*, objectN ... */) {\r\n        if(arguments.length <= 0) {\r\n            throw new Error('Missing arguments in extend function');\r\n        }\r\n    \r\n        var result = object || {},\r\n                key,\r\n                i;\r\n    \r\n        for (i = 1; i < arguments.length; i++) {\r\n            var replacement = arguments[i] || {};\r\n    \r\n            for (key in replacement) {\r\n                // Recurse into object except if the object is a DOM element\r\n                if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {\r\n                    result[key] = extend(result[key], replacement[key]);\r\n                }\r\n                else {\r\n                    result[key] = result[key] || replacement[key];\r\n                }\r\n            }\r\n        }\r\n    \r\n        return result;\r\n    }\r\n    \r\n    /**\r\n     * Helper function for normalizing tolerance option to object format\r\n     */\r\n    function normalizeTolerance (t) {\r\n        return t === Object(t) ? t : { down : t, up : t };\r\n    }\r\n    \r\n    /**\r\n     * UI enhancement for fixed headers.\r\n     * Hides header when scrolling down\r\n     * Shows header when scrolling up\r\n     * @constructor\r\n     * @param {DOMElement} elem the header element\r\n     * @param {Object} options options for the widget\r\n     */\r\n    function Headroom (elem, options) {\r\n        options = extend(options, Headroom.options);\r\n    \r\n        this.lastKnownScrollY = 0;\r\n        this.elem             = elem;\r\n        this.tolerance        = normalizeTolerance(options.tolerance);\r\n        this.classes          = options.classes;\r\n        this.offset           = options.offset;\r\n        this.scroller         = options.scroller;\r\n        this.initialised      = false;\r\n        this.onPin            = options.onPin;\r\n        this.onUnpin          = options.onUnpin;\r\n        this.onTop            = options.onTop;\r\n        this.onNotTop         = options.onNotTop;\r\n        this.onBottom         = options.onBottom;\r\n        this.onNotBottom      = options.onNotBottom;\r\n    }\r\n    Headroom.prototype = {\r\n        constructor : Headroom,\r\n    \r\n        /**\r\n         * Initialises the widget\r\n         */\r\n        init : function() {\r\n            if(!Headroom.cutsTheMustard) {\r\n                return;\r\n            }\r\n    \r\n            this.debouncer = new Debouncer(this.update.bind(this));\r\n            this.elem.classList.add(this.classes.initial);\r\n    \r\n            // defer event registration to handle browser\r\n            // potentially restoring previous scroll position\r\n            setTimeout(this.attachEvent.bind(this), 100);\r\n    \r\n            return this;\r\n        },\r\n    \r\n        /**\r\n         * Unattaches events and removes any classes that were added\r\n         */\r\n        destroy : function() {\r\n            var classes = this.classes;\r\n    \r\n            this.initialised = false;\r\n    \r\n            for (var key in classes) {\r\n                if(classes.hasOwnProperty(key)) {\r\n                    this.elem.classList.remove(classes[key]);\r\n                }\r\n            }\r\n    \r\n            this.scroller.removeEventListener('scroll', this.debouncer, false);\r\n        },\r\n    \r\n        /**\r\n         * Attaches the scroll event\r\n         * @private\r\n         */\r\n        attachEvent : function() {\r\n            if(!this.initialised){\r\n                this.lastKnownScrollY = this.getScrollY();\r\n                this.initialised = true;\r\n                this.scroller.addEventListener('scroll', this.debouncer, false);\r\n    \r\n                this.debouncer.handleEvent();\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Unpins the header if it's currently pinned\r\n         */\r\n        unpin : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\r\n                classList.add(classes.unpinned);\r\n                classList.remove(classes.pinned);\r\n                this.onUnpin && this.onUnpin.call(this);\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Pins the header if it's currently unpinned\r\n         */\r\n        pin : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(classList.contains(classes.unpinned)) {\r\n                classList.remove(classes.unpinned);\r\n                classList.add(classes.pinned);\r\n                this.onPin && this.onPin.call(this);\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Handles the top states\r\n         */\r\n        top : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(!classList.contains(classes.top)) {\r\n                classList.add(classes.top);\r\n                classList.remove(classes.notTop);\r\n                this.onTop && this.onTop.call(this);\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Handles the not top state\r\n         */\r\n        notTop : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(!classList.contains(classes.notTop)) {\r\n                classList.add(classes.notTop);\r\n                classList.remove(classes.top);\r\n                this.onNotTop && this.onNotTop.call(this);\r\n            }\r\n        },\r\n    \r\n        bottom : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(!classList.contains(classes.bottom)) {\r\n                classList.add(classes.bottom);\r\n                classList.remove(classes.notBottom);\r\n                this.onBottom && this.onBottom.call(this);\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Handles the not top state\r\n         */\r\n        notBottom : function() {\r\n            var classList = this.elem.classList,\r\n                classes = this.classes;\r\n    \r\n            if(!classList.contains(classes.notBottom)) {\r\n                classList.add(classes.notBottom);\r\n                classList.remove(classes.bottom);\r\n                this.onNotBottom && this.onNotBottom.call(this);\r\n            }\r\n        },\r\n    \r\n        /**\r\n         * Gets the Y scroll position\r\n         * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\r\n         * @return {Number} pixels the page has scrolled along the Y-axis\r\n         */\r\n        getScrollY : function() {\r\n            return (this.scroller.pageYOffset !== undefined)\r\n                ? this.scroller.pageYOffset\r\n                : (this.scroller.scrollTop !== undefined)\r\n                    ? this.scroller.scrollTop\r\n                    : (document.documentElement || document.body.parentNode || document.body).scrollTop;\r\n        },\r\n    \r\n        /**\r\n         * Gets the height of the viewport\r\n         * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\r\n         * @return {int} the height of the viewport in pixels\r\n         */\r\n        getViewportHeight : function () {\r\n            return window.innerHeight\r\n                || document.documentElement.clientHeight\r\n                || document.body.clientHeight;\r\n        },\r\n    \r\n        /**\r\n         * Gets the physical height of the DOM element\r\n         * @param  {Object}  elm the element to calculate the physical height of which\r\n         * @return {int}     the physical height of the element in pixels\r\n         */\r\n        getElementPhysicalHeight : function (elm) {\r\n            return Math.max(\r\n                elm.offsetHeight,\r\n                elm.clientHeight\r\n            );\r\n        },\r\n    \r\n        /**\r\n         * Gets the physical height of the scroller element\r\n         * @return {int} the physical height of the scroller element in pixels\r\n         */\r\n        getScrollerPhysicalHeight : function () {\r\n            return (this.scroller === window || this.scroller === document.body)\r\n                ? this.getViewportHeight()\r\n                : this.getElementPhysicalHeight(this.scroller);\r\n        },\r\n    \r\n        /**\r\n         * Gets the height of the document\r\n         * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\r\n         * @return {int} the height of the document in pixels\r\n         */\r\n        getDocumentHeight : function () {\r\n            var body = document.body,\r\n                documentElement = document.documentElement;\r\n    \r\n            return Math.max(\r\n                body.scrollHeight, documentElement.scrollHeight,\r\n                body.offsetHeight, documentElement.offsetHeight,\r\n                body.clientHeight, documentElement.clientHeight\r\n            );\r\n        },\r\n    \r\n        /**\r\n         * Gets the height of the DOM element\r\n         * @param  {Object}  elm the element to calculate the height of which\r\n         * @return {int}     the height of the element in pixels\r\n         */\r\n        getElementHeight : function (elm) {\r\n            return Math.max(\r\n                elm.scrollHeight,\r\n                elm.offsetHeight,\r\n                elm.clientHeight\r\n            );\r\n        },\r\n    \r\n        /**\r\n         * Gets the height of the scroller element\r\n         * @return {int} the height of the scroller element in pixels\r\n         */\r\n        getScrollerHeight : function () {\r\n            return (this.scroller === window || this.scroller === document.body)\r\n                ? this.getDocumentHeight()\r\n                : this.getElementHeight(this.scroller);\r\n        },\r\n    \r\n        /**\r\n         * determines if the scroll position is outside of document boundaries\r\n         * @param  {int}  currentScrollY the current y scroll position\r\n         * @return {bool} true if out of bounds, false otherwise\r\n         */\r\n        isOutOfBounds : function (currentScrollY) {\r\n            var pastTop  = currentScrollY < 0,\r\n                pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\r\n    \r\n            return pastTop || pastBottom;\r\n        },\r\n    \r\n        /**\r\n         * determines if the tolerance has been exceeded\r\n         * @param  {int} currentScrollY the current scroll y position\r\n         * @return {bool} true if tolerance exceeded, false otherwise\r\n         */\r\n        toleranceExceeded : function (currentScrollY, direction) {\r\n            return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];\r\n        },\r\n    \r\n        /**\r\n         * determine if it is appropriate to unpin\r\n         * @param  {int} currentScrollY the current y scroll position\r\n         * @param  {bool} toleranceExceeded has the tolerance been exceeded?\r\n         * @return {bool} true if should unpin, false otherwise\r\n         */\r\n        shouldUnpin : function (currentScrollY, toleranceExceeded) {\r\n            var scrollingDown = currentScrollY > this.lastKnownScrollY,\r\n                pastOffset = currentScrollY >= this.offset;\r\n    \r\n            return scrollingDown && pastOffset && toleranceExceeded;\r\n        },\r\n    \r\n        /**\r\n         * determine if it is appropriate to pin\r\n         * @param  {int} currentScrollY the current y scroll position\r\n         * @param  {bool} toleranceExceeded has the tolerance been exceeded?\r\n         * @return {bool} true if should pin, false otherwise\r\n         */\r\n        shouldPin : function (currentScrollY, toleranceExceeded) {\r\n            var scrollingUp  = currentScrollY < this.lastKnownScrollY,\r\n                pastOffset = currentScrollY <= this.offset;\r\n    \r\n            return (scrollingUp && toleranceExceeded) || pastOffset;\r\n        },\r\n    \r\n        /**\r\n         * Handles updating the state of the widget\r\n         */\r\n        update : function() {\r\n            var currentScrollY  = this.getScrollY(),\r\n                scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\r\n                toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\r\n    \r\n            if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\r\n                return;\r\n            }\r\n    \r\n            if (currentScrollY <= this.offset ) {\r\n                this.top();\r\n            } else {\r\n                this.notTop();\r\n            }\r\n    \r\n            if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\r\n                this.bottom();\r\n            }\r\n            else {\r\n                this.notBottom();\r\n            }\r\n    \r\n            if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {\r\n                this.unpin();\r\n            }\r\n            else if(this.shouldPin(currentScrollY, toleranceExceeded)) {\r\n                this.pin();\r\n            }\r\n    \r\n            this.lastKnownScrollY = currentScrollY;\r\n        },\r\n    };\r\n    /**\r\n     * Default options\r\n     * @type {Object}\r\n     */\r\n    Headroom.options = {\r\n        tolerance : {\r\n            up : 0,\r\n            down : 0,\r\n        },\r\n        offset : 0,\r\n        scroller: window,\r\n        classes : {\r\n            pinned : 'headroom--pinned',\r\n            unpinned : 'headroom--unpinned',\r\n            top : 'headroom--top',\r\n            notTop : 'headroom--not-top',\r\n            bottom : 'headroom--bottom',\r\n            notBottom : 'headroom--not-bottom',\r\n            initial : 'headroom',\r\n        },\r\n    };\r\n    Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\r\n\r\n    return Headroom;\r\n}));\n\n\n// WEBPACK FOOTER //\n// ./scripts/vendor/headroom.js","/* COOKIES */\r\n\r\n(function ( $ ) {\r\n\r\n\tvar siteCookie = {};\r\n\r\n\tsiteCookie.set = function( cname, cvalue, exdays ) {\r\n\t\tvar d = new Date();\r\n\t\td.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n\t\tvar expires = 'expires=' +d.toUTCString();\r\n\t\tdocument.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n\t};\r\n\r\n\tsiteCookie.get = function( cname ) {\r\n\t\tvar name = cname + '=';\r\n\t\tvar decodedCookie = decodeURIComponent(document.cookie);\r\n\t\tvar ca = decodedCookie.split(';');\r\n\r\n\t\tfor(var i = 0; i <ca.length; i++) {\r\n\t\t\tvar c = ca[i];\r\n\t\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\t\tc = c.substring(1);\r\n\t\t\t}\r\n\r\n\t\t\tif (c.indexOf(name) === 0) {\r\n\t\t\t\treturn c.substring(name.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n\tsiteCookie.init = function( wrapperID, btnClass ) {\r\n\t\tvar wrapper = $( wrapperID );\r\n\r\n\t\tif( !wrapper ) { return; }\r\n\r\n\t\tvar cookieName = wrapper.attr( 'data-cookie' );\r\n\r\n\t\t// if cookies allowed but not yet saved\r\n\t\tif( document.cookie.indexOf(cookieName) < 0 && navigator.cookieEnabled ) {\r\n\r\n\t\t\t//show cookie\r\n\t\t\twrapper.css( 'display' , 'block' );\r\n\r\n\t\t\t//init approval buttons\r\n\t\t\t// var button = wrapper.find( btnClass );\r\n\r\n\t\t\twrapper.on( 'click keydown', btnClass, function(e) {\r\n\t\t\t\tvar etype = e.type;\r\n\r\n\t\t\t\tif(etype === 'keydown' && (e.keyCode !== 13 && e.keyCode !== 32)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\t\r\n\r\n\t\t\t\tsiteCookie.set( cookieName, true, 365 );\r\n\r\n\t\t\t\twrapper.slideUp( 'slow' );\r\n\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\t$( document ).ready( function() {\r\n\t\tsiteCookie.init( '#js-cookie', '.js-cookie-approve' );\r\n\t});\r\n\r\n})( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/cookie.js","import Swiper, {Scrollbar} from '../../../../node_modules/swiper/swiper-bundle';\r\n\r\nlet supportsOrientationChange = 'onorientationchange' in window,\r\n  orientationEvent = supportsOrientationChange ? 'orientationchange' : 'resize';\r\n\r\nlet Filter = {};\r\n\r\nFilter.toggle = function () {\r\n  let openFilter = $('.js-filter-open');\r\n  let closeFilter = $('.js-filter-close');\r\n  let filterContent = $('.js-filter-collapse');\r\n\r\n  openFilter.click(function () {\r\n    filterContent.toggleClass('show');\r\n    $('body').toggleClass('filter-is-open');\r\n    if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n      window.disableBodyScroll(true, '.js-filter-collapse');\r\n    }\r\n  });\r\n\r\n  closeFilter.click(function (e) {\r\n    e.preventDefault();\r\n    filterContent.removeClass('show');\r\n    $('body').removeClass('filter-is-open');\r\n    if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n      window.disableBodyScroll(false, '.js-filter-collapse');\r\n    }\r\n  });\r\n\r\n  if ($('.product-filter')[0]) {\r\n    window.addEventListener(orientationEvent, function () {\r\n      filterContent.removeClass('show');\r\n      $('body').removeClass('filter-is-open');\r\n      if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n        window.disableBodyScroll(false, '.js-filter-collapse');\r\n      }\r\n    }, false);\r\n  }\r\n\r\n  $(document).on('click', '.js-filter-collapse .dropdown-menu', function (e) {\r\n    e.stopPropagation();\r\n  });\r\n};\r\n\r\nFilter.accordion = function () {\r\n  var toggleAccordion = $('.js-filter-accordion-toggle');\r\n\r\n  toggleAccordion.click(function () {\r\n    var thisAccordion = $(this);\r\n    if (thisAccordion.closest('.product-filter-dropdown').hasClass('show')) {\r\n      thisAccordion.closest('.product-filter-dropdown').removeClass('show')\r\n    } else {\r\n      $('.product-filter-dropdown').removeClass('show');\r\n      thisAccordion.closest('.product-filter-dropdown').addClass('show')\r\n    }\r\n  });\r\n};\r\n\r\nFilter.dropdownUpdate = function () {\r\n  if ($('.product-filter .filter-container').length === 0) {\r\n    return;\r\n  }\r\n\r\n  var $checkSelector = $('.product-filter .custom-dropdown');\r\n  var $checkBox = $('.product-filter .custom-dropdown .check-selector .custom-control-input');\r\n\r\n  $checkSelector.each(function () {\r\n    var thisSelector = $(this);\r\n    var count = thisSelector.find('.check-selector .custom-control-input:checked').length;\r\n\r\n    if (!thisSelector.hasClass('sort')) {\r\n      if (!count == 0) {\r\n        thisSelector.addClass('has-dash').find('.dropdown-toggle .check-count').text(count);\r\n      }\r\n    }\r\n  });\r\n\r\n  $checkBox.change(function () {\r\n    var countCheckedCheck = $(this).closest('.check-selector').find('.custom-control-input:checked').length;\r\n\r\n    if (!countCheckedCheck == 0) {\r\n      $(this).closest('.custom-dropdown').addClass('has-dash').find('.dropdown-toggle .check-count').text(countCheckedCheck);\r\n    } else {\r\n      $(this).closest('.custom-dropdown').removeClass('has-dash').find('.dropdown-toggle .check-count').text('');\r\n    }\r\n  });\r\n\r\n  var dropdownSelector = $('.product-filter .custom-dropdown .dropdown-menu.sort ul>li');\r\n  dropdownSelector.off('click').on('click', function () {\r\n    dropdownSelector.each(function () {\r\n      $(this).removeClass('selected');\r\n    });\r\n\r\n    $(this).addClass('selected');\r\n  });\r\n};\r\n\r\nFilter.dropdownUpdate();\r\n\r\nFilter.swiper = function() {\r\n    const categoryList = document.querySelector('.js-category-swiper');\r\n\r\n    if (!categoryList) return;\r\n\r\n    Swiper.use([Scrollbar]);\r\n    const categorySwiper = new Swiper('.js-category-swiper', {\r\n        loop: false,\r\n        slidesPerView: 'auto',\r\n        scrollbar: {\r\n            el: '.swiper-scrollbar',\r\n            draggable: true,\r\n        },\r\n    });\r\n\r\n    categorySwiper.init();\r\n};\r\n\r\nvar FilterUpdater = {};\r\n\r\n(function ($) {\r\n  Filter.toggle();\r\n  Filter.accordion();\r\n  Filter.swiper();\r\n  var form = $('#silkFilterForm'),\r\n    isSearch = $('body.search').length !== 0;\r\n\r\n  //    var initialLoad = true;\r\n\r\n  FilterUpdater.update = function (filterProducts) {\r\n\r\n    var products = $('.products .product');\r\n\r\n    if (filterProducts) {\r\n      products = filterProducts;\r\n    }\r\n\r\n    if (form.length === 0 || products.length === 0) {\r\n      return;\r\n    }\r\n\r\n    // Hide all filter items\r\n    if (isSearch) {\r\n      form.find('input[type=checkbox]').parents('li').hide();\r\n    } else {\r\n      form.find('input[type=checkbox][name=material],input[type=checkbox][name=color],input[type=checkbox][name=size],input[type=checkbox][name=model],input[type=checkbox][name=heel],input[type=checkbox][name=category]').parents('li').hide();\r\n    }\r\n\r\n    // Show only filter items that matches with the products\r\n    $.each(products, function () {\r\n      var product = $(this),\r\n        categories = product.data('category'),\r\n        materials = product.data('material'),\r\n        size = product.data('size'),\r\n        color = product.data('color'),\r\n        model = product.data('model'),\r\n        heel = product.data('heel');\r\n\r\n      // Filter categories only in search page\r\n      if (categories) {\r\n      // if (categories && isSearch) {\r\n        $.each(categories.split('|'), function () {\r\n          form.find('input[name=category][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n\r\n      if (materials) {\r\n        $.each(materials.split('|'), function () {\r\n          form.find('input[name=material][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n\r\n      if (size) {\r\n        $.each(size.toString().split('|'), function () {\r\n          form.find('input[name=size][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n\r\n      if (color) {\r\n        $.each(color.split('|'), function () {\r\n          form.find('input[name=color][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n\r\n      if (model) {\r\n        $.each(model.split('|'), function () {\r\n          form.find('input[name=model][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n\r\n      if (heel) {\r\n        $.each(heel.split('|'), function () {\r\n          form.find('input[name=heel][value=\"' + this + '\"]').parents('li').show();\r\n        });\r\n      }\r\n      /*\r\n                  console.log(\"show\");\r\n                  console.log( product.data( 'color' ) );\r\n      */\r\n      form.find('input[name=color][value=\"' + product.data('color') + '\"]').parents('li').show();\r\n      form.find('input[name=size][value=\"' + product.data('size') + '\"]').parents('li').show();\r\n      // form.find( 'input[name=category][data-name=\"' + product.data( 'category' ) + '\"]' ).parents( 'li' ).show();\r\n    });\r\n\r\n    // Hide filter group without visible items\r\n    $.each($('ul.check-selector'), function () {\r\n      var list = $(this),\r\n        visibleCount = 0;\r\n\r\n      $.each(list.children('li'), function () {\r\n        visibleCount += $(this).css('display') === 'none' ? 0 : 1;\r\n      });\r\n\r\n      if (visibleCount < 1) {\r\n        list.parents('.col-lg').hide();\r\n      } else {\r\n        list.parents('.col-lg').show();\r\n      }\r\n    });\r\n  };\r\n\r\n  FilterUpdater.update();\r\n\r\n  window.FilterUpdater = FilterUpdater;\r\n  window.Filter = Filter;\r\n})(jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/filter.js","let Dropdown = {};\r\n\r\nDropdown.init = function() {\r\n  Dropdown.overlayScroll();\r\n};\r\n\r\nDropdown.overlayScroll = function() {\r\n  $('.js-dropdown-overlay').overlayScrollbars({ });\r\n};\r\n\r\n$(window).on('load', function(){\r\n  Dropdown.init();\r\n});\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/dropdown.js","var Filter = {};\r\n\r\n//add class if certain color was detected\r\nFilter.for_color = function () {\r\n  var el = document.getElementsByClassName('js-color');\r\n  if (!el) {\r\n      return;\r\n  }\r\n  for (var i = 0; i < el.length; i++) {\r\n      var bgProp = window.getComputedStyle(el[i], null).getPropertyValue('background-color');\r\n      if (Filter.color_detector(bgProp) == 'light') {\r\n          el[i].classList.add('is-checkmark-dark');\r\n      } else {\r\n          el[i].classList.add('is-checkmark-white');\r\n      }\r\n\r\n\r\n      if (i > 10) {\r\n          break;\r\n      }\r\n  }\r\n\r\n}\r\n\r\n//color detector\r\nFilter.color_detector = function (color) {\r\n  // Variables for red, green, blue values\r\n  var r, g, b, hsp;\r\n\r\n  // Check the format of the color, HEX or RGB?\r\n  if (color.match(/^rgb/)) {\r\n\r\n      // If HEX --> store the red, green, blue values in separate variables\r\n      color = color.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+(?:\\.\\d+)?))?\\)$/);\r\n\r\n      r = color[1];\r\n      g = color[2];\r\n      b = color[3];\r\n  } else {\r\n\r\n      // If RGB --> Convert it to HEX: http://gist.github.com/983661\r\n      color = +('0x' + color.slice(1).replace(\r\n          color.length < 5 && /./g, '$&$&'));\r\n\r\n      r = color >> 16;\r\n      g = color >> 8 & 255;\r\n      b = color & 255;\r\n  }\r\n\r\n  // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html\r\n  hsp = Math.sqrt(\r\n      0.299 * (r * r) +\r\n      0.587 * (g * g) +\r\n      0.114 * (b * b)\r\n  );\r\n\r\n  // Using the HSP value, determine whether the color is light or dark\r\n  if (hsp > 127.5) {\r\n\r\n\r\n      return 'light';\r\n  } else {\r\n\r\n      return 'dark';\r\n  }\r\n}\r\n\r\nFilter.for_color();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/picker.js","/* eslint-disable no-unused-vars */\r\n\r\nimport { stokpress, stokpressViewPort } from '../util/helper';\r\n/* eslint-disable no-undef */\r\n\r\nlet Video = { refs: [] };\r\n\r\nwindow.onload = function () {\r\n\r\n\t// Youtube callbacks\r\n\twindow.onYouTubeIframeAPIReady = function () {\r\n\t\tfor ( var i = 0; i < Video.iframes.length; i++ ) {\r\n\t\t\tif ( Video.iframes[i].getAttribute( 'data-source' ) !== 'youtube' ) continue;\r\n\r\n\t\t\tlet player = new YT.Player( Video.iframes[i].id, {\r\n\t\t\t\tevents: {\r\n\t\t\t\t\t'onStateChange': ( event ) => {\r\n\t\t\t\t\t\tif ( event.data == YT.PlayerState.PLAYING ) {\r\n\t\t\t\t\t\t\tVideo.removeElement( event.target.h.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\t\t\t\tevent.target.h.style.opacity = 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t} )\r\n\r\n\t\t\tvar playVideo = Video.iframes[i].parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\tVideo.refs.push( {\r\n\t\t\t\tplayer: player,\r\n\t\t\t\telement: Video.iframes[i],\r\n\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\t\tcase 'play':\r\n\t\t\t\t\t\t\t\tplayer.playVideo();\r\n\t\t\t\t\t\t\t\tplayer.unMute();\r\n\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'pause': player.pauseVideo(); break;\r\n\t\t\t\t\t\t\tcase 'stop': player.stopVideo(); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch ( error ) {\r\n\t\t\t\t\t\tconsole.log( error.message );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.isMobile = function () {\r\n\t\treturn stokpress.isMobile() || stokpressViewPort.documentWidth().width < 720;\r\n\t};\r\n\r\n\tVideo.initializeVimeo = function ( iframes ) {\r\n\t\tif ( iframes.length === 0 ) { return; }\r\n\r\n\t\tfor ( var i = 0; i < iframes.length; i++ ) {\r\n\t\t\tif ( iframes[i].getAttribute( 'data-source' ) !== 'vimeo' ) continue;\r\n\r\n\t\t\tvar playVideo = iframes[i].parentNode.parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\tlet player = new Vimeo.Player( iframes[i] );\r\n\r\n\t\t\tVideo.refs.push( {\r\n\t\t\t\tplayer: player,\r\n\t\t\t\telement: player.element,\r\n\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\tcase 'play': player.play(); break;\r\n\t\t\t\t\t\tcase 'pause': player.pause(); break;\r\n\t\t\t\t\t\tcase 'stop': player.unload(); break;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\t// Fix issue not autoplaying on mobile\r\n\t\t\tconst playerId = player.element.dataset.id || null;\r\n\t\t\tif (playerId && player.element && player.element.dataset.autoplay) {\r\n\t\t\t\tplayer.loadVideo(playerId).then(function(id) {\r\n\t\t\t\t\tplayer.play()\r\n\t\t\t\t\tplayer.pause()\r\n\t\t\t\t\tsetTimeout(function() { player.play() }, 750)\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tplayer.on( 'play', () => {\r\n\t\t\t\tVideo.removeElement( player.element.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\tplayer.element.style.opacity = 1;\r\n\t\t\t} );\r\n\r\n\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.iframeProcess = function () {\r\n\t\tvar includeYoutubeScript = false,\r\n\t\t\tincludeVimeoScript = false;\r\n\r\n\t\tfor ( var i = 0; i < Video.iframes.length; i++ ) {\r\n\t\t\tvar source = Video.iframes[i].getAttribute( 'data-source' ),\r\n\t\t\t\tautoplay = Video.iframes[i].getAttribute( 'data-autoplay' );\r\n\r\n\t\t\tif ( ( !autoplay && !Video.isMobile() ) || Video.isMobile() ) {\r\n\t\t\t\tif ( source === 'vimeo' ) {\r\n\t\t\t\t\tincludeVimeoScript = true;\r\n\t\t\t\t} else if ( source === 'youtube' ) {\r\n\t\t\t\t\tincludeYoutubeScript = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !autoplay || ( Video.isMobile && source === 'youtube' ) )\r\n\t\t\t\t\tVideo.iframes[i].parentNode.parentNode.querySelectorAll( '.js-hide-on-play' ).forEach( ( element ) => {\r\n\t\t\t\t\t\telement.style.display = '';\r\n\t\t\t\t\t} );\r\n\t\t\t} else {\r\n\t\t\t\tVideo.iframes[i].style.opacity = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( includeVimeoScript )\r\n\t\t\tstokpress.getScript( 'https://player.vimeo.com/api/player.js', function () {\r\n\t\t\t\tVideo.initializeVimeo( Video.iframes );\r\n\t\t\t} );\r\n\r\n\t\tif ( includeYoutubeScript )\r\n\t\t\tstokpress.getScript( 'https://www.youtube.com/iframe_api' );\r\n\t};\r\n\r\n\tVideo.removeElement = function ( elToHide ) {\r\n\t\tif ( !elToHide ) { return; }\r\n\r\n\t\tArray.prototype.forEach.call( elToHide, function ( element ) {\r\n\t\t\telement.parentNode.removeChild( element );\r\n\t\t} );\r\n\t};\r\n\r\n\tVideo.init = function () {\r\n\t\tVideo.iframes = document.querySelectorAll( 'iframe.js-video-iframe' );\r\n\t\tVideo.tags = document.querySelectorAll( 'video.js-video-tag' );\r\n\r\n\t\tif ( Video.iframes.length ) {\r\n\t\t\tVideo.iframeProcess();\r\n\t\t}\r\n\r\n\t\tif ( Video.tags.length ) {\r\n\t\t\tfor ( var i = 0; i < Video.tags.length; i++ ) {\r\n\t\t\t\tlet player = Video.tags[i];\r\n\r\n\t\t\t\tVideo.refs.push( {\r\n\t\t\t\t\tplayer: player,\r\n\t\t\t\t\telement: player,\r\n\t\t\t\t\tcall: ( method ) => {\r\n\t\t\t\t\t\tswitch ( method ) {\r\n\t\t\t\t\t\t\tcase 'play': player.play(); break;\r\n\t\t\t\t\t\t\tcase 'pause': player.pause(); break;\r\n\t\t\t\t\t\t\tcase 'stop': player.load(); break;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tplayer.addEventListener( 'play', () => {\r\n\t\t\t\t\tVideo.removeElement( player.parentNode.querySelectorAll( '.js-hide-on-play' ) );\r\n\t\t\t\t\tplayer.style.zIndex = 1;\r\n\t\t\t\t} );\r\n\r\n\t\t\t\tif ( Video.tags[i].getAttribute( 'autoplay' ) ) {\r\n\t\t\t\t\tVideo.tags[i].style.zIndex = 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Play video upon clicking the play button\r\n\t\t\t\t\tvar playVideo = player.parentNode.querySelector( '.js-playvideo' );\r\n\r\n\t\t\t\t\tif ( !playVideo ) { continue; }\r\n\r\n\t\t\t\t\tplayVideo.dataset.refIndex = Video.refs.length - 1;\r\n\r\n\t\t\t\t\tplayVideo.addEventListener( 'click', function ( event ) {\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\tVideo.refs[this.dataset.refIndex].call( 'play' );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tVideo.init();\r\n}\r\n\r\nwindow.Video = Video;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/video.js","const openSidebarButtons = document.querySelectorAll('.js-open-sidebar');\r\nconst overlay = document.getElementById('js-overlay');\r\nconst closeIcons = document.querySelectorAll('.js-close-sidebar');\r\nconst body = document.querySelector('body');\r\n\r\nif (openSidebarButtons) {\r\n    openSidebarButtons.forEach(function (button) {\r\n        button.addEventListener('click', function (event) {\r\n            event.preventDefault();\r\n            const sidebarId = this.getAttribute('data-sidebar');\r\n            const sidebar = document.querySelector(sidebarId);\r\n            const sidebars = document.querySelectorAll('.sidebar');\r\n\r\n            if(sidebars.length > 0) {\r\n                sidebars.forEach(function (sidebar) {\r\n                    sidebar.classList.remove('sidebar-is-open');\r\n                });\r\n            }\r\n\r\n            if(sidebar) {\r\n                sidebar.classList.add('sidebar-is-open');\r\n                if (overlay) {\r\n                    overlay.style.display = 'block';\r\n                }\r\n                body.classList.add('sidebar-no-scroll');\r\n            }\r\n\r\n        });\r\n    });\r\n}\r\n\r\nif (closeIcons) {\r\n    closeIcons.forEach(function(icon) {\r\n        icon.addEventListener('click', function() {\r\n          const sidebar = this.closest('.sidebar');\r\n          if(sidebar) {\r\n              sidebar.classList.remove('sidebar-is-open');\r\n              if (overlay) {\r\n                  overlay.style.display = 'none';\r\n              }\r\n              body.classList.remove('sidebar-no-scroll');\r\n          }\r\n        });\r\n      });\r\n}\r\n\r\nif (overlay) {\r\n    overlay.addEventListener('click', function () {\r\n        const sidebars = document.querySelectorAll('.sidebar');\r\n\r\n        if(sidebars.length > 0) {\r\n            sidebars.forEach(function (sidebar) {\r\n                sidebar.classList.remove('sidebar-is-open');\r\n            });\r\n        }\r\n\r\n        this.style.display = 'none';\r\n        body.classList.remove('sidebar-no-scroll');\r\n    });\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sidebar.js","const measurementButtons = document.querySelectorAll('.js-measurement-guide-button');\r\nconst measurementTable = document.getElementById('measurement-table');\r\nconst defaultSizeSelected = 'data-cm';\r\n\r\nif(measurementButtons) {\r\n    measurementButtons.forEach(button => {\r\n        button.addEventListener('click', function () {\r\n          measurementButtons.forEach(btn => btn.classList.remove('is-active'));\r\n          button.classList.add('is-active');\r\n          const attribute = button.dataset.measure;\r\n          updateMeasurementTableContent(attribute);\r\n        });\r\n      });\r\n}\r\n\r\nfunction updateMeasurementTableContent(attribute) {\r\n  const rows = measurementTable.querySelectorAll('tbody tr');\r\n  rows.forEach(row => {\r\n    const cells = row.querySelectorAll('td');\r\n    cells.forEach(cell => {\r\n      cell.textContent = cell.getAttribute(attribute);\r\n    });\r\n  });\r\n}\r\n\r\nif(measurementTable) {\r\n    updateMeasurementTableContent(defaultSizeSelected);\r\n}\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/size-guide.js","var Instagram = {};\r\n\r\nfunction calculatePosition() {\r\n  var tileInfoHeight = $('.instagram-gallery .tile-block-hidden').outerHeight();\r\n  var infoHeight = $('.instagram-gallery .instagram-info').outerHeight();\r\n  var instagramInfo = $('.instagram-info-margin');\r\n\r\n  if (tileInfoHeight > infoHeight) {\r\n    instagramInfo.css({\r\n      'margin-bottom': (tileInfoHeight * -1) + 'px',\r\n      'padding-top': ( tileInfoHeight - infoHeight) + 'px',\r\n    });\r\n    $('.instagram-gallery').removeClass('is-text-overlapping');\r\n  } else {\r\n    instagramInfo.css({\r\n      'margin-bottom': (tileInfoHeight * -1) + 'px',\r\n      'padding-top': '0',\r\n    });\r\n    $('.instagram-gallery').addClass('is-text-overlapping');\r\n  }\r\n}\r\n\r\nInstagram.infoPosition = function() {\r\n  calculatePosition();\r\n\r\n  window.addEventListener('resize', window.stokpress.debounce(function () {\r\n    calculatePosition();\r\n  }, 500));\r\n};\r\n\r\nInstagram.infoPosition();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/instagram.js","import { stokpress } from '../util/helper';\r\nimport Rule from '../util/Rule';\r\n\r\nvar Alert = require( '../components/alert' );\r\n\r\nvar Newsletter = {};\r\n\r\n( function ( $ ) {\r\n\r\n\tNewsletter.updateErrorHtml = function () {\r\n\t\tvar formError = this.parentNode.querySelector( '.js-form-error' );\r\n\r\n\t\tif ( !formError ) {\r\n\t\t\tformError = this.parentNode.parentNode.querySelector( '.js-form-error' );\r\n\t\t}\r\n\r\n\t\tif ( formError && formError.innerText.length > 0 ) {\r\n\t\t\tformError.innerText = null;\r\n\t\t\tthis.classList.remove( Newsletter.elClasses.error );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.removeErrors = function ( wrapperEl ) {\r\n\t\tvar inputs = wrapperEl.querySelectorAll( 'input' );\r\n\r\n\t\tif ( inputs.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor ( var i = 0; i < inputs.length; i++ ) {\r\n\t\t\tinputs[i].addEventListener( 'focus', Newsletter.updateErrorHtml );\r\n\t\t\tinputs[i].addEventListener( 'click', Newsletter.updateErrorHtml );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.validateEmail = function ( email ) {\r\n\t\tvar re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\r\n\t\treturn re.test( email );\r\n\t};\r\n\r\n\tNewsletter.formValidation = function ( wrapperEl ) {\r\n\t\tvar errorMessages = JSON.parse( wrapperEl.getAttribute( 'data-messages' ) );\r\n\t\tvar email = wrapperEl.querySelector( 'input[name=\"esc_email\"]' );\r\n\t\tvar terms = wrapperEl.querySelector( 'input[name=\"accept_terms\"]' );\r\n\t\tvar errors = {};\r\n\r\n\t\t// Form validation\r\n\t\tif ( email.value.length === 0 ) {\r\n\t\t\terrors.email = ( errorMessages && errorMessages.required_email ) ? errorMessages.required_email : 'E-mail field is required';\r\n\t\t} else if ( !Newsletter.validateEmail( email.value ) ) {\r\n\t\t\terrors.email = ( errorMessages && errorMessages.invalid_email ) ? errorMessages.invalid_email : 'Email address is invalid';\r\n\t\t}\r\n\r\n\t\tif ( terms.checked === false ) {\r\n\t\t\terrors.terms = ( errorMessages && errorMessages.required_terms ) ? errorMessages.required_terms : 'Accept terms is required';\r\n\t\t}\r\n\r\n\t\t// Return false if no errors\r\n\t\tif ( Object.keys( errors ).length === 0 ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Display error\r\n\t\tfor ( var key in errors ) {\r\n\t\t\tvar errorEl = wrapperEl.querySelector( '.js-form-error[data-field=\"' + key + '\"]' );\r\n\t\t\tif ( errorEl ) {\r\n\t\t\t\terrorEl.innerText = errors[key];\r\n\t\t\t}\r\n\r\n\t\t\tvar elToAddClass = key === 'email' ? email : terms;\r\n\t\t\telToAddClass.classList.add( Newsletter.elClasses.error );\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t};\r\n\r\n\tNewsletter.formSubmit = function ( form ) {\r\n\t\tif ( !form ) { return; }\r\n\r\n\t\tvar formData = new FormData( form );\r\n\t\tformData.append( 'ajax', 1 );\r\n\r\n\t\tvar button = form.querySelector( 'button[type=\"submit\"]' );\r\n\t\tbutton.classList.add( Newsletter.elClasses.isLoading );\r\n\r\n\t\tvar hasErrors = Newsletter.formValidation( form );\r\n\t\tif ( hasErrors ) {\r\n\t\t\treturn setTimeout( function () {\r\n\t\t\t\tbutton.classList.remove( Newsletter.elClasses.isLoading );\r\n\t\t\t}, 500 );\r\n\t\t}\r\n\r\n\t\tvar sendData = [];\r\n\t\tformData.forEach( function ( value, key ) {\r\n\t\t\tsendData.push( encodeURIComponent( key ) + '=' + encodeURIComponent( value ) );\r\n\t\t} );\r\n\r\n\t\tvar xhr = new XMLHttpRequest();\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif ( xhr.readyState == XMLHttpRequest.DONE ) {\r\n\t\t\t\tif ( xhr.status == 200 ) {\r\n\t\t\t\t\tvar response = JSON.parse( xhr.response );\r\n\r\n\t\t\t\t\tif ( response.success ) {\r\n\t\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\t\tbutton.classList.remove( Newsletter.elClasses.isLoading );\r\n\t\t\t\t\t\t\tNewsletter.formSuccess( form );\r\n\t\t\t\t\t\t}, 500 );\r\n\r\n\t\t\t\t\t\tvar targetEl = $( form.dataset.target );\r\n\t\t\t\t\t\tif ( targetEl && targetEl.attr( 'id' ) === 'js-newsletter-modal' ) {\r\n\t\t\t\t\t\t\tvar displayTime = targetEl.data( 'display_time' );\r\n\r\n\t\t\t\t\t\t\tif ( form.dataset.success_type === 'alert' ) {\r\n\t\t\t\t\t\t\t\tdisplayTime = 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tNewsletter.forceCloseModal( targetEl, displayTime );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstokpress.setCookie( Newsletter.cookieName, true, 365 );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.open( 'POST', '/', true );\r\n\t\txhr.setRequestHeader( 'Accept', 'application/json, text/javascript, */*; q=0.01' );\r\n\t\txhr.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded;charset=UTF-8' );\r\n\r\n\t\tif ( formData.has( 'mailingList' ) ) {\r\n\t\t\tconst rule = new Rule();\r\n\r\n\t\t\trule.addSubscriber( formData.get( 'esc_email' ), formData.get( 'mailingList' ), formData.get( 'language' ) )\r\n\t\t\t\t.then( () => {\r\n\t\t\t\t\txhr.send( sendData.join( '&' ) );\r\n\t\t\t\t} );\r\n\t\t} else {\r\n\t\t\txhr.send( sendData.join( '&' ) );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.forceCloseModal = function ( el, displayTime ) {\r\n\t\tsetTimeout( function () {\r\n\t\t\tel.modal( 'hide' );\r\n\t\t}, displayTime * 1000 );\r\n\t};\r\n\r\n\tNewsletter.formSuccess = function ( form ) {\r\n\t\tvar targetContainer = document.querySelector( form.dataset.target );\r\n\t\tvar successType = form.dataset.success_type;\r\n\r\n\t\tif ( targetContainer && successType === 'success-message' ) {\r\n\t\t\tNewsletter.displaySuccessMessage( targetContainer, '.js-newsletter-success', '.js-newsletter-content' );\r\n\r\n\t\t} else if ( successType === 'alert' ) {\r\n\t\t\tAlert.show( 'success', form.dataset.alert_title, form.dataset.alert );\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\t$( '#js-alert' ).modal( 'hide' );\r\n\t\t\t}, 3000 );\r\n\t\t}\r\n\r\n\t\tNewsletter.resetForm( targetContainer, form, successType );\r\n\t};\r\n\r\n\tNewsletter.resetForm = function ( targetContainer, form, successType ) {\r\n\t\tform.querySelector( 'input[name=\"esc_email\"]' ).value = '';\r\n\t\tform.querySelector( 'input[name=\"accept_terms\"]' ).checked = false;\r\n\r\n\t\tif ( successType === 'success-message' ) {\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\tNewsletter.displaySuccessMessage( targetContainer, '.js-newsletter-content', '.js-newsletter-success' );\r\n\t\t\t}, 10000 );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.displaySuccessMessage = function ( targetContainer, toDisplayClass, toHideClass ) {\r\n\t\tif ( !targetContainer ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar contentToDisplay = targetContainer.querySelectorAll( toDisplayClass );\r\n\t\tvar contentToHide = targetContainer.querySelectorAll( toHideClass );\r\n\r\n\t\tif ( contentToHide.length > 0 ) {\r\n\t\t\tArray.prototype.forEach.call( contentToHide, function ( element ) {\r\n\t\t\t\telement.classList.add( Newsletter.elClasses.hidden );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tif ( contentToDisplay.length > 0 ) {\r\n\t\t\tArray.prototype.forEach.call( contentToDisplay, function ( element ) {\r\n\t\t\t\telement.classList.remove( Newsletter.elClasses.hidden );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.modal = function ( modal ) {\r\n\t\tif ( !modal ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tNewsletter.cookieName = modal.data( 'cookie' );\r\n\t\tvar delay = modal.data( 'delay' );\r\n\r\n\t\tif ( !stokpress.getCookie( Newsletter.cookieName ) ) {\r\n\t\t\t// Show modal\r\n\t\t\tsetTimeout( function () {\r\n\t\t\t\tmodal.modal( 'show' );\r\n\r\n\t\t\t\t$( '.newsletter-close' ).click( function () {\r\n\t\t\t\t\tstokpress.setCookie( Newsletter.cookieName, true, 365 );\r\n\t\t\t\t} );\r\n\t\t\t}, delay * 1000 );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.init = function ( mainWrapper, modalId ) {\r\n\t\tvar container = document.querySelectorAll( mainWrapper );\r\n\t\tif ( container.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Hide honeypot fields\r\n\t\t$( container ).find( 'input[name=\"esc_first_name\"],input[name=\"esc_last_name\"],input[name=\"esc_phone_number\"],input[name=\"esc_country_code\"]' ).hide();\r\n\r\n\t\tfor ( var i = 0; i < container.length; i++ ) {\r\n\r\n\t\t\t// Form submit\r\n\t\t\tvar form = container[i];\r\n\t\t\tform.addEventListener( 'submit', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tNewsletter.formSubmit( this );\r\n\t\t\t} );\r\n\r\n\t\t\t// Remove Errors on input change\r\n\t\t\tNewsletter.removeErrors( form );\r\n\t\t}\r\n\r\n\t\t// Newsletter Modal\r\n\t\tvar modal = $( modalId );\r\n\t\tif ( modal.length ) {\r\n\t\t\tNewsletter.modal( modal );\r\n\t\t}\r\n\t};\r\n\r\n\tNewsletter.elClasses = {\r\n\t\thidden: 'd-none',\r\n\t\tisLoading: 'is-loading',\r\n\t\tisDisabled: 'is-disabled',\r\n\t\terror: 'is-invalid',\r\n\t};\r\n\r\n\tNewsletter.init( '.js-newsletter', '#js-newsletter-modal' );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/newsletter.js","export default class Rule {\r\n\tconstructor() {\r\n\t\tconsole.log( 'Rule!' );\r\n\t}\r\n\taddSubscriber ( email, mailingList, language = 'en', isUpdate = false ) {\r\n\t\treturn fetch( `/wp-json/stok/v1/rule/subscriber/${email}`, {\r\n\t\t\tmethod: 'post',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-type': 'application/json; charset=UTF-8',\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify( { mailingList: mailingList, language: language, isUpdate: isUpdate } ),\r\n\t\t} )\r\n\t\t\t.then( data => data.json() )\r\n\t\t\t.then( function ( data ) {\r\n\t\t\t\tconsole.log( 'Request succeeded with JSON response', data );\r\n\t\t\t} )\r\n\t\t\t.catch( function ( error ) {\r\n\t\t\t\tconsole.log( 'Request failed', error );\r\n\t\t\t} );\r\n\t}\r\n}\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/Rule.js","( ( $ ) => {\r\n\tconst modal = $( '#js-unshippable-modal' );\r\n\r\n\tif ( modal.length === 0 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodal.modal( 'show' );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/unshippable.js","/*global FilterUpdater, Filter */\r\n\r\n( function ( $ ) {\r\n    const $categoryDataElement = $('#categoryData'),\r\n        categoryData = $categoryDataElement.length > 0 ? JSON.parse($categoryDataElement.text()) : false;\r\n\r\n    if(!categoryData) {\r\n        return;\r\n    }\r\n\r\n    let hashQueryString = window.location.hash,\r\n        currentSort = $( '#js-current-sort' ),\r\n        listingHolder = $( '#js-listing-holder' ),\r\n        productContainer = $( '.js-productContainer' ),\r\n        holder = $( '.silk-product-item-holder' ),\r\n        language = categoryData.language,\r\n        search = categoryData.search,\r\n        perPage = parseInt(categoryData.perPage),\r\n        paginationText = categoryData.paginationText,\r\n        currentPage = 1,\r\n        allProducts = $('.products .product').clone(),\r\n        searchHitCountSelector = '.js-hit-count',\r\n        silkForm = $('#silkFilterForm'),\r\n        onPageLoad = false,\r\n        loadMore = {\r\n            $paginationText: $('#js-product-listing-pagination-text'),\r\n            $button: $('#js-product-listing-load-more'),\r\n\t\t\t$progress: $('#js-product-listing-progress'),\r\n        };\r\n\r\n    const filterClasses = {\r\n        'hidden' : 'd-none',\r\n        'active' : 'active',\r\n    }\r\n\r\n    if (silkForm.length) {\r\n        init();\r\n    }\r\n\r\n    function init() {\r\n        if (silkForm.data('ajaxurl')) {\r\n            filterDataLoad();\r\n        }\r\n\r\n        if (hashQueryString != '') {\r\n            $('.silk-spinner').removeClass( filterClasses.hidden );\r\n        }\r\n\r\n        let silkHashClear = $('.silk-hash-clear');\r\n        if (silkHashClear.length) {\r\n            silkHashClear.on('click', function (e) {\r\n                e.preventDefault();\r\n                history.pushState( '', document.title, window.location.pathname + window.location.search );\r\n                silkForm.trigger( 'reset' );\r\n                $('.silk-hash-orderby').removeClass( filterClasses.active );\r\n                $('.silk-hash-orderby.default').addClass( filterClasses.active );\r\n                $('.silk-hash-select-item').removeClass( filterClasses.active );\r\n                filterProducts();\r\n            } );\r\n        }\r\n\r\n        let silkCustomFilter = $('.silk-custom-filter');\r\n        if (silkCustomFilter.length) {\r\n            silkCustomFilter.on('change', function(){\r\n                if ($(this).data('term') && !$(this).hasClass('js-variant')) {\r\n                    renderVariants($(this).data('term'));\r\n                }\r\n                filterProducts();\r\n            });\r\n        }\r\n\r\n        let silkHashSelectItem = $('.silk-hash-select-item');\r\n        if (silkHashSelectItem.length) {\r\n            silkHashSelectItem.on('click', function ( e ) {\r\n                e.preventDefault();\r\n                const _this = $(this);\r\n                const parent = _this.parents('.silk-hash-select');\r\n\r\n                if (parent) {\r\n                    parent.find('.silk-hash-select-item').removeClass( filterClasses.active );\r\n                    parent.find('.silk-hash-select-label').text( _this.text() );\r\n                    _this.addClass( filterClasses.active );\r\n                    filterProducts();\r\n                }\r\n            } );\r\n        }\r\n\r\n        let silkHashOrderby = $('.silk-hash-orderby');\r\n        if (silkHashOrderby.length) {\r\n            silkHashOrderby.on('click', function ( e ) {\r\n                e.preventDefault();\r\n                $('.silk-hash-orderby.active').removeClass( filterClasses.active );\r\n                $(this).addClass( filterClasses.active );\r\n                if( $(this).data('value') == 'price_asc' || $(this).data('value') == 'price_desc' ) {\r\n                    $(this).closest('.js-sort-custom-container').find('button.dropdown-toggle').addClass( filterClasses.active );\r\n                } else {\r\n                    $(this).closest('.js-filter-accordion-body').find('.js-sort-custom-container').find('button.dropdown-toggle').removeClass( filterClasses.active );\r\n                }\r\n                currentSort.text( $( this ).text() );\r\n                filterProducts();\r\n            } );\r\n        }\r\n\r\n        let silkHashFilter = $('.silk-hash-filter');\r\n        if (silkHashFilter.length) {\r\n            silkHashFilter.on('click', function () {\r\n                filterProducts();\r\n            });\r\n        }\r\n\r\n        loadMore.$button.on('click', function () {\r\n            silkProductLoad( ++currentPage );\r\n        });\r\n    }\r\n\r\n    function filterProducts() {\r\n\r\n        var colorList = '';\r\n        var sizeList = '';\r\n        var categoryList = '';\r\n        var variantList = '';\r\n        var materialList = '';\r\n\r\n        var orderBy = $( '.silk-hash-orderby.active' ).data( 'value' ) ? $( '.silk-hash-orderby.active' ).data( 'value' ) : '';\r\n        var collection = '';\r\n        var price = '';\r\n        var comma = '';\r\n\r\n        $('.silk-hash-select').each( function () {\r\n            var selectName = $(this).data('name');\r\n            var selectValue = $(this).find('.silk-hash-select-item.active').data('value');\r\n            if ( selectValue ) {\r\n                switch ( selectName ) {\r\n                    case 'price':\r\n                        price = selectValue;\r\n                        priceFilter += selectName;\r\n                        break;\r\n\r\n                    case 'collection':\r\n                        collection = selectValue;\r\n                        collectionFilter += selectName;\r\n                        break;\r\n                }\r\n            }\r\n        } );\r\n\r\n        $('.silk-hash-filter').each( function () {\r\n            var inputName = $( this ).attr( 'name' );\r\n            var inputValue = $( this ).val();\r\n            if ( $( this ).prop( 'checked' ) == true ) {\r\n                switch ( inputName ) {\r\n                    case 'color':\r\n                        comma = '';\r\n                        if ( colorList != '' ) {\r\n                            comma = ',';\r\n                        }\r\n                        colorList += comma + inputValue;\r\n                        break;\r\n                    case 'size':\r\n                        comma = '';\r\n                        if ( sizeList != '' ) {\r\n                            comma = '|';\r\n                        }\r\n                        sizeList += comma + inputValue;\r\n                        break;\r\n                    case 'category':\r\n                        comma = '';\r\n                        if ( categoryList != '' ) {\r\n                            comma = ',';\r\n                        }\r\n                        categoryList += comma + inputValue;\r\n                        break;\r\n                    case 'variant':\r\n                        comma = '';\r\n                        if ( variantList != '' ) {\r\n                            comma = ',';\r\n                        }\r\n                        variantList += comma + inputValue;\r\n                        break;\r\n                    case 'material':\r\n                        comma = '';\r\n                        if ( materialList != '' ) {\r\n                            comma = '|';\r\n                        }\r\n                        materialList += comma + inputValue;\r\n                        break;\r\n                }\r\n            }\r\n        } );\r\n\r\n        var filterUrl = '';\r\n\r\n        if ( categoryList != '' ) {\r\n            filterUrl += 'category=' + categoryList;\r\n        } else if(categoryData.currentCategory) {\r\n            filterUrl += 'category=' + categoryData.currentCategory;\r\n        }\r\n\r\n        if ( colorList != '' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'color=' + colorList;\r\n            var colorFilter = new RegExp( colorList.replace(/,/g, '|'), 'g');\r\n        }\r\n\r\n        if ( sizeList != '' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'size=' + sizeList;\r\n            var sizeFilter = new RegExp( sizeList.replace(/,/g, '|'), 'g');\r\n        }\r\n        if ( materialList != '' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'material=' + materialList;\r\n            var materialFilter = new RegExp( materialList.replace(/,/g, '|'), 'g');\r\n        }\r\n        if ( orderBy != '' && typeof orderBy !== 'undefined' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'orderBy=' + orderBy;\r\n        }\r\n        if ( price != '' && typeof price !== 'undefined' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'price=' + price;\r\n            var priceFilter = price;\r\n        }\r\n        if ( collection != '' && typeof collection !== 'undefined' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'collection=' + collection;\r\n            var collectionFilter = new RegExp( collection.replace(/,/g, '|'), 'g');\r\n        }\r\n        if ( variantList != '' && typeof variantList !== 'undefined' ) {\r\n            if ( filterUrl != '' ) {\r\n                filterUrl += '&';\r\n            }\r\n            filterUrl += 'variant=' + variantList;\r\n            var variantFilter = new RegExp( variantList.replace(/,/g, '|'), 'g');\r\n        }\r\n\r\n        filterUrl = '#' + filterUrl;\r\n        window.history.pushState( '', 'Title', filterUrl );\r\n\r\n        var categoryFilter;\r\n\r\n        if ( categoryList != '' ) {\r\n            categoryFilter = new RegExp( categoryList.replace(/,/g, '|'), 'g');\r\n        } else {\r\n            categoryFilter = new RegExp( categoryData.currentCategory, 'g');\r\n        }\r\n\r\n        $('.products .product').remove();\r\n\r\n        var filteredResult = '';\r\n\r\n        filteredResult = allProducts.filter(function () { return $(this).data('category') ? $(this).data('category').match(categoryFilter) : false } ).clone();\r\n\r\n        FilterUpdater.update(filteredResult, allProducts);\r\n        Filter.dropdownUpdate();\r\n\r\n        if( variantFilter ) {\r\n            filteredResult = filteredResult.filter(function () { return $(this).data('variant') ? $(this).data('variant').match(variantFilter) : false } );\r\n        }\r\n        if( colorFilter ) {\r\n            filteredResult = filteredResult.filter(function () { return $(this).data('color') ? $(this).data('color').match(colorFilter) : false } );\r\n        }\r\n        if( sizeFilter ) {\r\n            filteredResult = filteredResult.filter(function () { return $(this).data('size') ? $(this).data('size').toString().match(sizeFilter) : false } );\r\n        }\r\n        if( materialFilter ) {\r\n            filteredResult = filteredResult.filter(function () { return $(this).data('material') ? $(this).data('material').match(materialFilter) : false } );\r\n        }\r\n\r\n        if( collectionFilter ) {\r\n            filteredResult = filteredResult.filter(function () { return $(this).data('collection') ? $(this).data('collection').match(collectionFilter) : false } );\r\n        }\r\n\r\n        if( priceFilter ) {\r\n            let range = priceFilter.split('-');\r\n            let start = range[0];\r\n            let end = range[1] !== 'above' ? range[1] : null;\r\n\r\n            filteredResult = filteredResult.filter(function () {\r\n                let price = parseInt($(this).data('price'), 10);\r\n                if (!end) {\r\n                    return price >= parseInt(start, 10);\r\n                } else {\r\n                    return price >= parseInt(start, 10) && price <= parseInt(end, 10);\r\n                }\r\n            });\r\n        }\r\n\r\n        // Sort results\r\n        filteredResult = sortProducts(filteredResult, orderBy);\r\n\r\n        // Render product items\r\n        appendProducts(filteredResult);\r\n\r\n        // START REMOVE MASONRY\r\n        // if( typeof window.productsMasonry !== 'undefined' ) {\r\n        //     // Rebuild masonry\r\n        //     window.productsMasonry.masonry( 'destroy' );\r\n        //     window.productsMasonry.masonry( {\r\n        //         itemSelector: '.product',\r\n        //         percentPosition: true,\r\n        //     } );\r\n        // }\r\n\r\n        // Reinitialize read more link\r\n        // window.titleCardCollapse();\r\n         // END REMOVE MASONRY\r\n\r\n        window.lazyLoadInstance.update();\r\n\r\n        // Filter tag listener\r\n        filterTagInit();\r\n\r\n        // Show Product Bg\r\n        if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n            $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n        }\r\n\r\n        // Remove 2nd product image for hover if in mobile view\r\n        var currentIsDesktop = matchMedia( 'screen and (min-width: 992px)' ).matches;\r\n        if (currentIsDesktop === false) {\r\n            var productImages = $( '.products .product figure img' );\r\n\r\n            if (productImages.length > 0) {\r\n                $.each( productImages, function() {\r\n                    if ($(this).hasClass( 'second-image' )) {\r\n                        $(this).parent().removeClass( 'has-second-image' );\r\n                        $(this).remove();\r\n                    }\r\n                } );\r\n            }\r\n        }\r\n\r\n        // Update hit count\r\n        if ($( searchHitCountSelector ).length) {\r\n            $.each( $( searchHitCountSelector ), function() {\r\n                $(this).text( filteredResult.length );\r\n            } );\r\n        }\r\n\r\n        currentPage = 1;\r\n        updateLoadMore();\r\n    }\r\n\r\n    function renderVariants (term) {\r\n        let variants = $('.js-variants');\r\n        let itemSelector = '.js-variant';\r\n\r\n        if (!variants.length) return;\r\n\r\n        if (onPageLoad === false) {\r\n            variants.find( itemSelector ).removeClass( filterClasses.active ).addClass( filterClasses.hidden );\r\n            variants.find( itemSelector+ ' input[name=\"variant\"]' ).prop('checked', false);\r\n        }\r\n\r\n        if (!term && $('.silk-hash-filter[name=\"category\"]').prop('checked')) {\r\n            term = $('.silk-hash-filter[name=\"category\"]').parent().data('term');\r\n        }\r\n\r\n        if (term && typeof(term) !== 'undefined' && variants.find( itemSelector+'[data-term=\"'+ term +'\"]' )) {\r\n            variants.find( itemSelector ).addClass( filterClasses.hidden );\r\n            variants.find( itemSelector+'[data-term=\"'+ term +'\"]' ).removeClass( filterClasses.hidden );\r\n        } else if (!term || typeof(term) === 'undefined') {\r\n            variants.find( itemSelector ).removeClass( filterClasses.hidden );\r\n        }\r\n\r\n        if (variants.find( itemSelector ).length === variants.find( itemSelector+'.'+filterClasses.hidden ).length) {\r\n            variants.addClass( filterClasses.hidden );\r\n        } else {\r\n            variants.removeClass( filterClasses.hidden );\r\n        }\r\n    }\r\n\r\n    function sortProducts (filteredResult, orderBy) {\r\n        var sortTitleDesc = function(a,b) {\r\n            a = $(a).data('name').toUpperCase();\r\n            b = $(b).data('name').toUpperCase();\r\n            if(a > b) {\r\n                return -1;\r\n            } else if(a < b) {\r\n                return 1;\r\n            } else {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        var sortTitleAsc = function(a,b) {\r\n            a = $(a).data('name').toUpperCase();\r\n            b = $(b).data('name').toUpperCase();\r\n            if(a < b) {\r\n                return -1;\r\n            } else if(a > b) {\r\n                return 1;\r\n            } else {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        var sortPrizeDesc = function(a,b) {\r\n            a = parseInt($(a).data('prize'), 10);\r\n            b = parseInt($(b).data('prize'), 10);\r\n            if(a > b) {\r\n                return -1;\r\n            } else if(a < b) {\r\n                return 1;\r\n            } else {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        var sortPrizeAsc = function(a,b) {\r\n            a = parseInt($(a).data('prize'), 10);\r\n            b = parseInt($(b).data('prize'), 10);\r\n            if(a < b) {\r\n                return -1;\r\n            } else if(a > b) {\r\n                return 1;\r\n            } else {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        var sortIndexAsc = function(a,b) {\r\n            a = parseInt($(a).data('index'), 10);\r\n            b = parseInt($(b).data('index'), 10);\r\n            if(a < b) {\r\n                return -1;\r\n            } else if(a > b) {\r\n                return 1;\r\n            } else {\r\n                return 0;\r\n            }\r\n        };\r\n\r\n        var sortNewest = function ( a, b ) {\r\n            a = parseInt( $( a ).data( 'new' ), 10 );\r\n            b = parseInt( $( b ).data( 'new' ), 10 );\r\n            if ( a > b ) {\r\n              return -1;\r\n            } else if ( a < b ) {\r\n              return 1;\r\n            } else {\r\n              return 0;\r\n            }\r\n        };\r\n\r\n        switch ( orderBy ) {\r\n            case 'price_asc':\r\n                filteredResult = filteredResult.sort(sortPrizeAsc);\r\n                break;\r\n            case 'price_desc':\r\n                filteredResult = filteredResult.sort(sortPrizeDesc);\r\n                break;\r\n            case 'title_desc':\r\n                filteredResult = filteredResult.sort(sortTitleDesc);\r\n                break;\r\n            case 'title_asc':\r\n                filteredResult = filteredResult.sort(sortTitleAsc);\r\n                break;\r\n            case 'newest':\r\n                filteredResult = filteredResult.sort(sortNewest);\r\n                break;\r\n            case 'popular':\r\n                filteredResult = filteredResult.sort(sortIndexAsc);\r\n                break;\r\n        }\r\n\r\n        return filteredResult;\r\n    }\r\n\r\n    function filterDataLoad () {\r\n        var ajaxUrl = $( '#silkFilterForm' ).data( 'ajaxurl' );\r\n        var currentCategory = categoryData.currentCategory;\r\n        var currentTaxonomy = categoryData.currentTaxonomy;\r\n        var currentTermId = categoryData.currentTermId;\r\n\r\n        if (currentCategory && currentTermId) {\r\n            ajaxUrl += '&category=' + currentCategory + '&termid=' + currentTermId;\r\n        }\r\n\r\n        if (currentCategory && currentTermId) {\r\n            ajaxUrl += '&taxonomy=' + currentTaxonomy;\r\n        }\r\n\r\n        if ( search ) {\r\n            ajaxUrl += '&search=' + encodeURIComponent( search );\r\n        }\r\n\r\n        ajaxUrl = ajaxUrl.replace(/per_page=[\\d]{1,4}/,'per_page=1000');\r\n\r\n        $.ajax( {\r\n            url: ajaxUrl + '&lang=' + language,\r\n            type: 'GET',\r\n            async: true,\r\n            error: function ( data, textStatus ) {\r\n                console.log( data );\r\n                console.log( textStatus );\r\n            },\r\n            success: function ( data ) {\r\n                var orderBy = '';\r\n                if ( search ) {\r\n                    orderBy = $('.silk-hash-orderby.active').data('value') ? $( '.silk-hash-orderby.active' ).data( 'value' ) : '';\r\n                } else {\r\n                    orderBy = $('.silk-hash-orderby.active').data('value') ? $( '.silk-hash-orderby.active' ).data( 'value' ) : 'popular';\r\n                }\r\n\r\n                var html = '';\r\n\r\n                if ( $( data ).length > 0 ) {\r\n                    html = '';\r\n\r\n                    $( '.silk-spinner' ).addClass( filterClasses.hidden );\r\n\r\n                    $( data ).each( function ( _, val ) {\r\n                        html += val.product_item.replace(/(\\r\\n|\\n|\\r)/gm, '');\r\n                    } );\r\n\r\n                    allProducts = $( html ).clone();\r\n\r\n                    if ( hashQueryString != '' ) {\r\n\r\n                        silkSetFilterUsingHash();\r\n                        filterProducts();\r\n\r\n                        // update variant\r\n                        onPageLoad = true;\r\n                        renderVariants();\r\n\r\n                    } else {\r\n                        let filteredResult = sortProducts( $(html), orderBy );\r\n                        appendProducts(filteredResult);\r\n\r\n                        // START REMOVE MASONRY\r\n                        // Rebuild masonry\r\n                        // if( typeof window.productsMasonry !== 'undefined' ) {\r\n                        //     window.productsMasonry.masonry( 'destroy' );\r\n                        //     window.productsMasonry.masonry( {\r\n                        //         itemSelector: '.product',\r\n                        //         percentPosition: true,\r\n                        //     } );\r\n                        //     window.productsMasonry.masonry('reloadItems');\r\n                        // }\r\n\r\n                        // // Reinitialize read more link\r\n                        // window.titleCardCollapse();\r\n                        // END REMOVE MASONRY\r\n\r\n                        window.lazyLoadInstance.update();\r\n\r\n                        FilterUpdater.update(filteredResult, allProducts);\r\n\r\n                        // Update hit count\r\n                        if ($( searchHitCountSelector ).length) {\r\n                            $.each( $( searchHitCountSelector ), function() {\r\n                                $(this).html( $( data ).length );\r\n                            } );\r\n                        }\r\n\r\n                        // Show Product Bg\r\n                        if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n                            $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n                        }\r\n                    }\r\n\r\n                } else {\r\n                    holder.html( '<p>' + holder.data( 'alt' ) + '</p>' );\r\n                }\r\n\r\n                onPageLoad = false;\r\n                updateLoadMore();\r\n            },\r\n            complete: function () {\r\n                // Show product listing\r\n                listingHolder.removeClass( 'invisible' );\r\n                showLoader( false );\r\n            },\r\n        } );\r\n    }\r\n\r\n    function updateLoadMore() {\r\n        const allProducts = productContainer.find('.product'),\r\n\t\t\tvisibleProducts = productContainer.find('.product:visible');\r\n\r\n        loadMore.$paginationText.text(\r\n            paginationText\r\n                .replace('[current]', visibleProducts.length)\r\n                .replace('[total]', allProducts.length)\r\n        );\r\n\t\tloadMore.$progress.css('width', ((visibleProducts.length / allProducts.length) * 100) + '%');\r\n\t\tloadMore.$progress.parent().show();\r\n        Math.ceil(allProducts.length / perPage) === currentPage ? loadMore.$button.hide() : loadMore.$button.show();\r\n    }\r\n\r\n    function appendProducts(products) {\r\n        if (!productContainer.length || !products) {\r\n            return;\r\n        }\r\n\r\n        productContainer.empty();\r\n        productContainer.each( function() {\r\n            const start = $(this).data('start');\r\n            const end = $(this).data('end');\r\n\r\n            let targetContainer = $(this),\r\n                items = [];\r\n\r\n            $.each(products,function( pos, item ) {\r\n                if (!item) return;\r\n\r\n                let index = pos+1;\r\n\r\n                // Paginate the results\r\n                if(pos >= perPage) {\r\n                    if (item.classList) {\r\n                        item.classList.add(filterClasses.hidden);\r\n                    } else {\r\n                        item.className += ` ${filterClasses.hidden}`;\r\n                    }\r\n                }\r\n\r\n                if (parseInt(index) >= parseInt(start) && parseInt(index) <= parseInt(end)) {\r\n                    items.push(item);\r\n                }\r\n            });\r\n\r\n            targetContainer.append(items);\r\n\r\n            if (targetContainer.children().length) {\r\n                targetContainer.parent().removeClass( filterClasses.hidden );\r\n            } else {\r\n                targetContainer.parent().addClass( filterClasses.hidden );\r\n            }\r\n        });\r\n\r\n        // START REMOVE MASONRY\r\n        // Rebuild masonry\r\n        // if( typeof window.productsMasonry !== 'undefined' ) {\r\n        //     window.productsMasonry.masonry( 'destroy' );\r\n        //     window.productsMasonry.masonry( {\r\n        //         itemSelector: '.product',\r\n        //         percentPosition: true,\r\n        //     } );\r\n        // }\r\n        // END REMOVE MASONRY\r\n\r\n    }\r\n\r\n    function silkProductLoad( nextPage ) {\r\n        $.each($('.products .product'),function( pos, item ) {\r\n            if(pos >= perPage * nextPage) {\r\n                item.classList.add(filterClasses.hidden);\r\n            } else {\r\n                item.classList.remove(filterClasses.hidden);\r\n            }\r\n        });\r\n\r\n        currentPage = nextPage;\r\n\r\n        // Rebuild masonry\r\n        // window.productsMasonry.masonry( 'layout' );\r\n\r\n        // Reinitialize read more link\r\n        // window.titleCardCollapse();\r\n        // END REMOVE MASONRY\r\n\r\n        window.lazyLoadInstance.update();\r\n\r\n        // Show Product Bg\r\n        if ( $( '.bg-image' ).hasClass( filterClasses.hidden ) ) {\r\n            $( '.bg-image' ).removeClass( filterClasses.hidden );\r\n        }\r\n\r\n        updateLoadMore();\r\n    }\r\n\r\n    function silkSetFilterUsingHash () {\r\n        var hash = window.location.hash;\r\n        hash = decodeURI(hash.replace( '#', '' ));\r\n        var hashArr = hash.split( '&' );\r\n        if ( hashArr.length > 0 ) {\r\n            $( hashArr ).each( function ( key, queryItem ) {\r\n                var queryItemArr = queryItem.split( '=' );\r\n                if ( queryItemArr.length > 0 ) {\r\n                    $( queryItemArr ).each( function ( queryItemKey, queryItemValue ) {\r\n                        var queryItemValueArr = queryItemValue.split( ',' );\r\n\r\n                        if ( queryItemValue.indexOf( '|' ) !== -1 ) {\r\n                            queryItemValueArr = queryItemValue.split( '|' );\r\n                        }\r\n\r\n                        if ( queryItemValueArr.length > 0 ) {\r\n                            $( queryItemValueArr ).each( function ( queryItemSelectedKey, queryItemSelectedValue ) {\r\n                                if ( queryItemSelectedValue != '' ) {\r\n                                    const inputName = queryItemArr[0];\r\n                                    queryItemSelectedValue = decodeURIComponent(queryItemSelectedValue);\r\n\r\n                                    if ( inputName == 'orderBy' ) {\r\n                                        const currentSortField = $( 'a[data-value=' + queryItemSelectedValue + ']' );\r\n                                        $( '.silk-hash-orderby.active' ).removeClass( filterClasses.active );\r\n                                        currentSortField.addClass( filterClasses.active );\r\n                                        currentSort.text( currentSortField.text() );\r\n\r\n                                    } else if ($.inArray(inputName, ['collection', 'price']) !== -1) {\r\n                                        const selectedField = $('.silk-hash-select .silk-hash-select-item[data-value=' + queryItemSelectedValue + ']');\r\n                                        const selectedFieldParent = selectedField.parents('.silk-hash-select');\r\n\r\n                                        if (selectedFieldParent) {\r\n                                            selectedFieldParent.find('.silk-hash-select-item').removeClass( filterClasses.active );\r\n                                            selectedFieldParent.find('.silk-hash-select-label').text( selectedField.text() );\r\n                                            selectedField.addClass( filterClasses.active );\r\n                                        }\r\n                                    } else {\r\n                                        const currentField = $( 'input[name=\"' + inputName + '\"][value=\"' + queryItemSelectedValue + '\"]' );\r\n                                        if (currentField.length > 0) {\r\n                                            currentField.prop( 'checked', true );\r\n\r\n                                            if (currentField.parent().hasClass('silk-custom-filter')) {\r\n                                                currentField.parent().addClass( filterClasses.active );\r\n                                            }\r\n                                        }\r\n\r\n                                    }\r\n                                }\r\n                            } );\r\n                        }\r\n                    } );\r\n                }\r\n            } );\r\n        }\r\n    }\r\n\r\n    function filterTagInit() {\r\n        var filterTags = $('.silk-filter-tags');\r\n        filterTags.find('.js-filter-tag').remove();\r\n        filterTags.find('.js-filter-tag-bundle').remove();\r\n        var colorFilterValues = [], colorFilterLabel = '';\r\n        var sizeFilterValues = [], sizeFilterLabel = '';\r\n        var categoryFilterValues = [], categoryFilterLabel = '';\r\n\r\n        $('.silk-hash-filter').each( function () {\r\n            var inputName = $(this).attr('name');\r\n            var inputValue = $(this).val();\r\n            if ( inputName !== 'orderBy' && $(this).prop('checked') === false )\r\n                return;\r\n            if( inputName === 'orderBy' && !$(this).hasClass('active') )\r\n                return;\r\n            switch ( inputName ) {\r\n                case 'color':\r\n                    colorFilterValues.push(inputValue);\r\n                    colorFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n                    break;\r\n                case 'size':\r\n                    sizeFilterValues.push(inputValue);\r\n                    sizeFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n                    break;\r\n                case 'category':\r\n                    categoryFilterValues.push(inputValue);\r\n                    categoryFilterLabel = $(this).closest('.product-filter-dropdown').find('.js-filter-accordion-toggle').text();\r\n                    break;\r\n                case 'orderBy':\r\n                    renderFilterTag($(this).closest('.js-sort-orderby-container').find('label').html(), inputValue, inputName);\r\n                    break;\r\n            }\r\n        });\r\n        if( colorFilterValues.length > 0 ) {\r\n            renderFilterTagBundle( colorFilterLabel + ' (' + colorFilterValues.length + ')', 'color', colorFilterValues );\r\n        }\r\n        if( sizeFilterValues.length > 0 ) {\r\n            renderFilterTagBundle( sizeFilterLabel + ' (' + sizeFilterValues.length + ')', 'size', sizeFilterValues );\r\n        }\r\n        if( categoryFilterValues.length > 0 ) {\r\n            renderFilterTagBundle( categoryFilterLabel + ' (' + categoryFilterValues.length + ')', 'category', categoryFilterValues );\r\n        }\r\n\r\n        if ($('.js-filter-tag').length === 0 && $('.js-filter-tag-bundle').length === 0) {\r\n\t\t\tfilterTags.find('.silk-hash-clear').addClass(filterClasses.hidden);\r\n\t\t\t$('.js-silk-filter').attr('style', 'display:none!important')\r\n        } else {\r\n\t\t\tfilterTags.find('.silk-hash-clear').removeClass(filterClasses.hidden);\r\n\t\t\t$('.js-silk-filter').attr('style', '');\r\n\t\t}\r\n\r\n        filterTagListener();\r\n        filterTagListenerBundle();\r\n    }\r\n\r\n    function renderFilterTag(name, value, type) {\r\n        var filterTags = $('.silk-filter-tags');\r\n\r\n        if (filterTags.length === 0) return;\r\n\r\n        var clearTag = filterTags.find('.js-silk-filter-tags');\r\n        var label = name;\r\n\r\n        if (type.indexOf('size_') > -1) {\r\n            label = type.replace('size_', '').toUpperCase() + ' ' + name;\r\n        } else if (type === 'size') {\r\n            label = name;\r\n        }\r\n        if (filterTags.find('.js-filter-tag[data-value=\"'+ value +'\"]')) {\r\n            var tag = '<div class=\"tag js-filter-tag btn btn-sm btn-tersiary\" data-value=\"'+ value +'\" data-name=\"'+ type +'\">'+\r\n                label +\r\n            '</div>';\r\n\r\n            clearTag.prepend(tag);\r\n        }\r\n    }\r\n\r\n    function renderFilterTagBundle(label, type, values) {\r\n        var filterTags = $('.silk-filter-tags');\r\n\r\n        if (filterTags.length === 0) return;\r\n\r\n        var clearTag = filterTags.find('.js-silk-filter-tags');\r\n\r\n        if (filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]')) {\r\n            if( filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]').length > 0 ) {\r\n                filterTags.find('.js-filter-tag-bundle[data-name=\"'+ type +'\"]').remove();\r\n            }\r\n            var tag = '<div class=\"tag js-filter-tag-bundle btn btn-sm btn-tersiary\" data-name=\"'+ type +'\" data-values=\"'+values+'\">'+\r\n                label +\r\n            '</div>';\r\n            clearTag.prepend(tag);\r\n        }\r\n    }\r\n\r\n    function filterTagListener() {\r\n        var filterTags = $(document).find('.js-filter-tag');\r\n\r\n        if (filterTags.length === 0) return;\r\n\r\n        filterTags.on('click', function() {\r\n            if( $(this).data('name') == 'orderBy' ) {\r\n                $('#silkFilterForm').find('input[name=\"' + $(this).data('name') + '\"]').removeClass('active');\r\n                filterProducts();\r\n            } else {\r\n                $('#silkFilterForm').find('input[name=\"' + $(this).data('name') + '\"][value=\"' + $(this).data('value') + '\"]').trigger('click');\r\n            }\r\n\r\n            $(this).remove();\r\n        });\r\n    }\r\n\r\n    function filterTagListenerBundle() {\r\n        var filterTags = $(document).find('.js-filter-tag-bundle');\r\n\r\n        if (filterTags.length === 0) return;\r\n\r\n        filterTags.on('click', function() {\r\n            var $this = $(this);\r\n            var name = $this.data('name');\r\n            var values = $this.data('values').split(',');\r\n            var findString = '';\r\n\r\n            $.each(values, function( index, value ) {\r\n                var withComma = ( index > 0 ) ? ',' : '';\r\n                findString += withComma + 'input[name=\"' + name + '\"][value=\"' + value + '\"]';\r\n            });\r\n\r\n            $('#silkFilterForm').find(findString).trigger('click');\r\n            $('.silk-filter-tags').find('.js-filter-tag-bundle[data-name=\"'+ name +'\"]').remove();\r\n        });\r\n    }\r\n\r\n    function showLoader ( showLoader ) {\r\n        var loader = $( document ).find( '.js-loader' );\r\n        var hiddenClass = 'd-none';\r\n\r\n        if ( !loader ) {\r\n            return;\r\n        }\r\n\r\n        if ( showLoader ) {\r\n            loader.removeClass( hiddenClass );\r\n        } else {\r\n            loader.addClass( hiddenClass );\r\n        }\r\n    }\r\n\r\n    var h1Desktop = document.getElementById( 'js-desktop-h1' ),\r\n        h1Mobile = document.getElementById( 'js-mobile-h1' ),\r\n        isDesktop = true,\r\n        timeOut = false;\r\n\r\n    if ( !h1Desktop || !h1Mobile ) {\r\n        return;\r\n    }\r\n\r\n    var checkH1 = function () {\r\n        var currentIsDesktop = matchMedia( 'screen and (min-width: 992px)' ).matches;\r\n\r\n        if ( isDesktop !== currentIsDesktop ) {\r\n            $( '.js-dynamic-title' ).remove();\r\n\r\n            if ( currentIsDesktop ) {\r\n                $( h1Desktop ).after( unescape( h1Desktop.innerText ) );\r\n            } else {\r\n                $( h1Mobile ).after( unescape( h1Mobile.innerText ) );\r\n            }\r\n        }\r\n\r\n        isDesktop = currentIsDesktop;\r\n    };\r\n\r\n    checkH1();\r\n    $( window ).on('resize', function () {\r\n        if ( timeOut ) {\r\n            clearTimeout( timeOut );\r\n        }\r\n\r\n        timeOut = setTimeout( function () {\r\n            checkH1();\r\n        }, 100 );\r\n    } );\r\n} )( jQuery );\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/category.js","import StickySidebar from 'sticky-sidebar/dist/sticky-sidebar';\r\n\r\nlet spacing;\r\nlet stickySidebar;\r\nlet productSidebar = $( '#js-sidebar' );\r\n\r\nlet selectedProduct = {};\r\n\r\nselectedProduct.init = function() {\r\n\t$('#productAccordion .product-accordion-item:eq(0) .collapse').addClass('show');\r\n\t$('#productAccordion .product-accordion-item:eq(0) .product-accordion-header').removeClass('collapsed');\r\n\r\n\t$('input[type=radio][name=product_color]').change(function() {\r\n\t\t$('.js-color-item').removeClass('is-active');\r\n\t\t$('input[name=product_color]:checked').closest('.js-color-item').addClass('is-active');\r\n\r\n\t\tselectedProduct.displayColorName();\r\n\t});\r\n\r\n  $('#js-close-modal').click(function() {\r\n    $('#sliderModal').modal('hide');\r\n  });\r\n}\r\n\r\nselectedProduct.sticky = function() {\r\n\tlet navHeight = $( '.js-header' ).outerHeight() + 20;\r\n\tif ( $( 'body' ).hasClass( 'admin-bar' ) ) {\r\n\t\tspacing = 32 + navHeight;\r\n\t} else {\r\n\t\tspacing = navHeight;\r\n\t}\r\n\r\n\tif ( productSidebar.length > 0 ) {\r\n\t\tstickySidebar = new StickySidebar( '#js-sidebar', {\r\n\t\t\tcontainerSelector: '.container-fluid',\r\n\t\t\tinnerWrapperSelector: '.selected-product-inner',\r\n\t\t\ttopSpacing: spacing,\r\n\t\t\tminWidth: 1023,\r\n\t\t\tresizeSensor: true,\r\n\t\t});\r\n\t}\r\n}\r\n\r\nselectedProduct.updateStickyPosition = function() {\r\n\t$('#productAccordion').on('shown.bs.collapse', function () {\r\n\t\tstickySidebar.updateSticky();\r\n\t});\r\n\r\n\t$('#productAccordion').on('hidden.bs.collapse', function () {\r\n\t\tstickySidebar.updateSticky();\r\n\t});\r\n}\r\n\r\nselectedProduct.displayColorName = function() {\r\n\t$.each($('.js-color-selector'), function (i, el) {\r\n    $(el).displayProp();\r\n\t});\r\n}\r\n\r\n$(window).resize(function () {\r\n\tif ( productSidebar.length > 0 ) {\r\n\t\t\tstickySidebar.updateSticky();\r\n\t}\r\n});\r\n\r\nselectedProduct.init();\r\nselectedProduct.sticky();\r\nselectedProduct.updateStickyPosition();\r\nselectedProduct.displayColorName();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/product-selected.js","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.StickySidebar = factory());\n}(this, (function () { 'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\r\n * Sticky Sidebar JavaScript Plugin.\r\n * @version 3.3.1\r\n * @author Ahmed Bouhuolia <a.bouhuolia@gmail.com>\r\n * @license The MIT License (MIT)\r\n */\nvar StickySidebar = function () {\n\n  // ---------------------------------\n  // # Define Constants\n  // ---------------------------------\n  //\n  var EVENT_KEY = '.stickySidebar';\n  var DEFAULTS = {\n\n    /**\r\n     * Additional top spacing of the element when it becomes sticky.\r\n     * @type {Numeric|Function}\r\n     */\n    topSpacing: 0,\n\n    /**\r\n     * Additional bottom spacing of the element when it becomes sticky.\r\n     * @type {Numeric|Function}\r\n     */\n    bottomSpacing: 0,\n\n    /**\r\n     * Container sidebar selector to know what the beginning and end of sticky element.\r\n     * @type {String|False}\r\n     */\n    containerSelector: false,\n\n    /**\r\n     * Inner wrapper selector.\r\n     * @type {String}\r\n     */\n    innerWrapperSelector: '.inner-wrapper-sticky',\n\n    /**\r\n     * The name of CSS class to apply to elements when they have become stuck.\r\n     * @type {String|False}\r\n     */\n    stickyClass: 'is-affixed',\n\n    /**\r\n     * Detect when sidebar and its container change height so re-calculate their dimensions.\r\n     * @type {Boolean}\r\n     */\n    resizeSensor: true,\n\n    /**\r\n     * The sidebar returns to its normal position if its width below this value.\r\n     * @type {Numeric}\r\n     */\n    minWidth: false\n  };\n\n  // ---------------------------------\n  // # Class Definition\n  // ---------------------------------\n  //\n  /**\r\n   * Sticky Sidebar Class.\r\n   * @public\r\n   */\n\n  var StickySidebar = function () {\n\n    /**\r\n     * Sticky Sidebar Constructor.\r\n     * @constructor\r\n     * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector.\r\n     * @param {Object} options - The options of sticky sidebar.\r\n     */\n    function StickySidebar(sidebar) {\n      var _this = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      _classCallCheck(this, StickySidebar);\n\n      this.options = StickySidebar.extend(DEFAULTS, options);\n\n      // Sidebar element query if there's no one, throw error.\n      this.sidebar = 'string' === typeof sidebar ? document.querySelector(sidebar) : sidebar;\n      if ('undefined' === typeof this.sidebar) throw new Error(\"There is no specific sidebar element.\");\n\n      this.sidebarInner = false;\n      this.container = this.sidebar.parentElement;\n\n      // Current Affix Type of sidebar element.\n      this.affixedType = 'STATIC';\n      this.direction = 'down';\n      this.support = {\n        transform: false,\n        transform3d: false\n      };\n\n      this._initialized = false;\n      this._reStyle = false;\n      this._breakpoint = false;\n      this._resizeListeners = [];\n\n      // Dimensions of sidebar, container and screen viewport.\n      this.dimensions = {\n        translateY: 0,\n        topSpacing: 0,\n        lastTopSpacing: 0,\n        bottomSpacing: 0,\n        lastBottomSpacing: 0,\n        sidebarHeight: 0,\n        sidebarWidth: 0,\n        containerTop: 0,\n        containerHeight: 0,\n        viewportHeight: 0,\n        viewportTop: 0,\n        lastViewportTop: 0\n      };\n\n      // Bind event handlers for referencability.\n      ['handleEvent'].forEach(function (method) {\n        _this[method] = _this[method].bind(_this);\n      });\n\n      // Initialize sticky sidebar for first time.\n      this.initialize();\n    }\n\n    /**\r\n     * Initializes the sticky sidebar by adding inner wrapper, define its container, \r\n     * min-width breakpoint, calculating dimensions, adding helper classes and inline style.\r\n     * @private\r\n     */\n\n\n    _createClass(StickySidebar, [{\n      key: 'initialize',\n      value: function initialize() {\n        var _this2 = this;\n\n        this._setSupportFeatures();\n\n        // Get sticky sidebar inner wrapper, if not found, will create one.\n        if (this.options.innerWrapperSelector) {\n          this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector);\n\n          if (null === this.sidebarInner) this.sidebarInner = false;\n        }\n\n        if (!this.sidebarInner) {\n          var wrapper = document.createElement('div');\n          wrapper.setAttribute('class', 'inner-wrapper-sticky');\n          this.sidebar.appendChild(wrapper);\n\n          while (this.sidebar.firstChild != wrapper) {\n            wrapper.appendChild(this.sidebar.firstChild);\n          }this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky');\n        }\n\n        // Container wrapper of the sidebar.\n        if (this.options.containerSelector) {\n          var containers = document.querySelectorAll(this.options.containerSelector);\n          containers = Array.prototype.slice.call(containers);\n\n          containers.forEach(function (container, item) {\n            if (!container.contains(_this2.sidebar)) return;\n            _this2.container = container;\n          });\n\n          if (!containers.length) throw new Error(\"The container does not contains on the sidebar.\");\n        }\n\n        // If top/bottom spacing is not function parse value to integer.\n        if ('function' !== typeof this.options.topSpacing) this.options.topSpacing = parseInt(this.options.topSpacing) || 0;\n\n        if ('function' !== typeof this.options.bottomSpacing) this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0;\n\n        // Breakdown sticky sidebar if screen width below `options.minWidth`.\n        this._widthBreakpoint();\n\n        // Calculate dimensions of sidebar, container and viewport.\n        this.calcDimensions();\n\n        // Affix sidebar in proper position.\n        this.stickyPosition();\n\n        // Bind all events.\n        this.bindEvents();\n\n        // Inform other properties the sticky sidebar is initialized.\n        this._initialized = true;\n      }\n\n      /**\r\n       * Bind all events of sticky sidebar plugin.\r\n       * @protected\r\n       */\n\n    }, {\n      key: 'bindEvents',\n      value: function bindEvents() {\n        window.addEventListener('resize', this, { passive: true, capture: false });\n        window.addEventListener('scroll', this, { passive: true, capture: false });\n\n        this.sidebar.addEventListener('update' + EVENT_KEY, this);\n\n        if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) {\n          new ResizeSensor(this.sidebarInner, this.handleEvent);\n          new ResizeSensor(this.container, this.handleEvent);\n        }\n      }\n\n      /**\r\n       * Handles all events of the plugin.\r\n       * @param {Object} event - Event object passed from listener.\r\n       */\n\n    }, {\n      key: 'handleEvent',\n      value: function handleEvent(event) {\n        this.updateSticky(event);\n      }\n\n      /**\r\n       * Calculates dimensions of sidebar, container and screen viewpoint\r\n       * @public\r\n       */\n\n    }, {\n      key: 'calcDimensions',\n      value: function calcDimensions() {\n        if (this._breakpoint) return;\n        var dims = this.dimensions;\n\n        // Container of sticky sidebar dimensions.\n        dims.containerTop = StickySidebar.offsetRelative(this.container).top;\n        dims.containerHeight = this.container.clientHeight;\n        dims.containerBottom = dims.containerTop + dims.containerHeight;\n\n        // Sidebar dimensions.\n        dims.sidebarHeight = this.sidebarInner.offsetHeight;\n        dims.sidebarWidth = this.sidebar.offsetWidth;\n\n        // Screen viewport dimensions.\n        dims.viewportHeight = window.innerHeight;\n\n        this._calcDimensionsWithScroll();\n      }\n\n      /**\r\n       * Some dimensions values need to be up-to-date when scrolling the page.\r\n       * @private\r\n       */\n\n    }, {\n      key: '_calcDimensionsWithScroll',\n      value: function _calcDimensionsWithScroll() {\n        var dims = this.dimensions;\n\n        dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left;\n\n        dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop;\n        dims.viewportBottom = dims.viewportTop + dims.viewportHeight;\n        dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\n\n        dims.topSpacing = this.options.topSpacing;\n        dims.bottomSpacing = this.options.bottomSpacing;\n\n        if ('function' === typeof dims.topSpacing) dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0;\n\n        if ('function' === typeof dims.bottomSpacing) dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0;\n\n        if ('VIEWPORT-TOP' === this.affixedType) {\n          // Adjust translate Y in the case decrease top spacing value.\n          if (dims.topSpacing < dims.lastTopSpacing) {\n            dims.translateY += dims.lastTopSpacing - dims.topSpacing;\n            this._reStyle = true;\n          }\n        } else if ('VIEWPORT-BOTTOM' === this.affixedType) {\n          // Adjust translate Y in the case decrease bottom spacing value.\n          if (dims.bottomSpacing < dims.lastBottomSpacing) {\n            dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing;\n            this._reStyle = true;\n          }\n        }\n\n        dims.lastTopSpacing = dims.topSpacing;\n        dims.lastBottomSpacing = dims.bottomSpacing;\n      }\n\n      /**\r\n       * Determine whether the sidebar is bigger than viewport.\r\n       * @public\r\n       * @return {Boolean}\r\n       */\n\n    }, {\n      key: 'isSidebarFitsViewport',\n      value: function isSidebarFitsViewport() {\n        return this.dimensions.sidebarHeight < this.dimensions.viewportHeight;\n      }\n\n      /**\r\n       * Observe browser scrolling direction top and down.\r\n       */\n\n    }, {\n      key: 'observeScrollDir',\n      value: function observeScrollDir() {\n        var dims = this.dimensions;\n        if (dims.lastViewportTop === dims.viewportTop) return;\n\n        var furthest = 'down' === this.direction ? Math.min : Math.max;\n\n        // If the browser is scrolling not in the same direction.\n        if (dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop)) this.direction = 'down' === this.direction ? 'up' : 'down';\n      }\n\n      /**\r\n       * Gets affix type of sidebar according to current scrollTop and scrollLeft.\r\n       * Holds all logical affix of the sidebar when scrolling up and down and when sidebar \r\n       * is bigger than viewport and vice versa.\r\n       * @public\r\n       * @return {String|False} - Proper affix type.\r\n       */\n\n    }, {\n      key: 'getAffixType',\n      value: function getAffixType() {\n        var dims = this.dimensions,\n            affixType = false;\n\n        this._calcDimensionsWithScroll();\n\n        var sidebarBottom = dims.sidebarHeight + dims.containerTop;\n        var colliderTop = dims.viewportTop + dims.topSpacing;\n        var colliderBottom = dims.viewportBottom - dims.bottomSpacing;\n\n        // When browser is scrolling top.\n        if ('up' === this.direction) {\n          if (colliderTop <= dims.containerTop) {\n            dims.translateY = 0;\n            affixType = 'STATIC';\n          } else if (colliderTop <= dims.translateY + dims.containerTop) {\n            dims.translateY = colliderTop - dims.containerTop;\n            affixType = 'VIEWPORT-TOP';\n          } else if (!this.isSidebarFitsViewport() && dims.containerTop <= colliderTop) {\n            affixType = 'VIEWPORT-UNBOTTOM';\n          }\n          // When browser is scrolling up.\n        } else {\n          // When sidebar element is not bigger than screen viewport.\n          if (this.isSidebarFitsViewport()) {\n\n            if (dims.sidebarHeight + colliderTop >= dims.containerBottom) {\n              dims.translateY = dims.containerBottom - sidebarBottom;\n              affixType = 'CONTAINER-BOTTOM';\n            } else if (colliderTop >= dims.containerTop) {\n              dims.translateY = colliderTop - dims.containerTop;\n              affixType = 'VIEWPORT-TOP';\n            }\n            // When sidebar element is bigger than screen viewport.\n          } else {\n\n            if (dims.containerBottom <= colliderBottom) {\n              dims.translateY = dims.containerBottom - sidebarBottom;\n              affixType = 'CONTAINER-BOTTOM';\n            } else if (sidebarBottom + dims.translateY <= colliderBottom) {\n              dims.translateY = colliderBottom - sidebarBottom;\n              affixType = 'VIEWPORT-BOTTOM';\n            } else if (dims.containerTop + dims.translateY <= colliderTop) {\n              affixType = 'VIEWPORT-UNBOTTOM';\n            }\n          }\n        }\n\n        // Make sure the translate Y is not bigger than container height.\n        dims.translateY = Math.max(0, dims.translateY);\n        dims.translateY = Math.min(dims.containerHeight, dims.translateY);\n\n        dims.lastViewportTop = dims.viewportTop;\n        return affixType;\n      }\n\n      /**\r\n       * Gets inline style of sticky sidebar wrapper and inner wrapper according \r\n       * to its affix type.\r\n       * @private\r\n       * @param {String} affixType - Affix type of sticky sidebar.\r\n       * @return {Object}\r\n       */\n\n    }, {\n      key: '_getStyle',\n      value: function _getStyle(affixType) {\n        if ('undefined' === typeof affixType) return;\n\n        var style = { inner: {}, outer: {} };\n        var dims = this.dimensions;\n\n        switch (affixType) {\n          case 'VIEWPORT-TOP':\n            style.inner = { position: 'fixed', top: dims.topSpacing,\n              left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth };\n            break;\n          case 'VIEWPORT-BOTTOM':\n            style.inner = { position: 'fixed', top: 'auto', left: dims.sidebarLeft,\n              bottom: dims.bottomSpacing, width: dims.sidebarWidth };\n            break;\n          case 'CONTAINER-BOTTOM':\n          case 'VIEWPORT-UNBOTTOM':\n            var translate = this._getTranslate(0, dims.translateY + 'px');\n\n            if (translate) style.inner = { transform: translate };else style.inner = { position: 'absolute', top: dims.translateY, width: dims.sidebarWidth };\n            break;\n        }\n\n        switch (affixType) {\n          case 'VIEWPORT-TOP':\n          case 'VIEWPORT-BOTTOM':\n          case 'VIEWPORT-UNBOTTOM':\n          case 'CONTAINER-BOTTOM':\n            style.outer = { height: dims.sidebarHeight, position: 'relative' };\n            break;\n        }\n\n        style.outer = StickySidebar.extend({ height: '', position: '' }, style.outer);\n        style.inner = StickySidebar.extend({ position: 'relative', top: '', left: '',\n          bottom: '', width: '', transform: this._getTranslate() }, style.inner);\n\n        return style;\n      }\n\n      /**\r\n       * Cause the sidebar to be sticky according to affix type by adding inline\r\n       * style, adding helper class and trigger events.\r\n       * @function\r\n       * @protected\r\n       * @param {string} force - Update sticky sidebar position by force.\r\n       */\n\n    }, {\n      key: 'stickyPosition',\n      value: function stickyPosition(force) {\n        if (this._breakpoint) return;\n\n        force = this._reStyle || force || false;\n\n        var affixType = this.getAffixType();\n        var style = this._getStyle(affixType);\n\n        if ((this.affixedType != affixType || force) && affixType) {\n          var affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\n          StickySidebar.eventTrigger(this.sidebar, affixEvent);\n\n          if ('STATIC' === affixType) StickySidebar.removeClass(this.sidebar, this.options.stickyClass);else StickySidebar.addClass(this.sidebar, this.options.stickyClass);\n\n          for (var key in style.outer) {\n            this.sidebar.style[key] = style.outer[key];\n          }\n\n          for (var _key in style.inner) {\n            var _unit2 = 'number' === typeof style.inner[_key] ? 'px' : '';\n            this.sidebarInner.style[_key] = style.inner[_key] + _unit2;\n          }\n\n          var affixedEvent = 'affixed.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\n          StickySidebar.eventTrigger(this.sidebar, affixedEvent);\n        } else {\n          if (this._initialized) this.sidebarInner.style.left = style.inner.left;\n        }\n\n        this.affixedType = affixType;\n      }\n\n      /**\r\n       * Breakdown sticky sidebar when window width is below `options.minWidth` value.\r\n       * @protected\r\n       */\n\n    }, {\n      key: '_widthBreakpoint',\n      value: function _widthBreakpoint() {\n\n        if (window.innerWidth <= this.options.minWidth) {\n          this._breakpoint = true;\n          this.affixedType = 'STATIC';\n\n          this.sidebar.removeAttribute('style');\n          StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\n          this.sidebarInner.removeAttribute('style');\n        } else {\n          this._breakpoint = false;\n        }\n      }\n\n      /**\r\n       * Switches between functions stack for each event type, if there's no \r\n       * event, it will re-initialize sticky sidebar.\r\n       * @public\r\n       */\n\n    }, {\n      key: 'updateSticky',\n      value: function updateSticky() {\n        var _this3 = this;\n\n        var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n        if (this._running) return;\n        this._running = true;\n\n        (function (eventType) {\n\n          requestAnimationFrame(function () {\n            switch (eventType) {\n              // When browser is scrolling and re-calculate just dimensions\n              // within scroll. \n              case 'scroll':\n                _this3._calcDimensionsWithScroll();\n                _this3.observeScrollDir();\n                _this3.stickyPosition();\n                break;\n\n              // When browser is resizing or there's no event, observe width\n              // breakpoint and re-calculate dimensions.\n              case 'resize':\n              default:\n                _this3._widthBreakpoint();\n                _this3.calcDimensions();\n                _this3.stickyPosition(true);\n                break;\n            }\n            _this3._running = false;\n          });\n        })(event.type);\n      }\n\n      /**\r\n       * Set browser support features to the public property.\r\n       * @private\r\n       */\n\n    }, {\n      key: '_setSupportFeatures',\n      value: function _setSupportFeatures() {\n        var support = this.support;\n\n        support.transform = StickySidebar.supportTransform();\n        support.transform3d = StickySidebar.supportTransform(true);\n      }\n\n      /**\r\n       * Get translate value, if the browser supports transfrom3d, it will adopt it.\r\n       * and the same with translate. if browser doesn't support both return false.\r\n       * @param {Number} y - Value of Y-axis.\r\n       * @param {Number} x - Value of X-axis.\r\n       * @param {Number} z - Value of Z-axis.\r\n       * @return {String|False}\r\n       */\n\n    }, {\n      key: '_getTranslate',\n      value: function _getTranslate() {\n        var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n        var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n        if (this.support.transform3d) return 'translate3d(' + y + ', ' + x + ', ' + z + ')';else if (this.support.translate) return 'translate(' + y + ', ' + x + ')';else return false;\n      }\n\n      /**\r\n       * Destroy sticky sidebar plugin.\r\n       * @public\r\n       */\n\n    }, {\n      key: 'destroy',\n      value: function destroy() {\n        window.removeEventListener('resize', this, { caption: false });\n        window.removeEventListener('scroll', this, { caption: false });\n\n        this.sidebar.classList.remove(this.options.stickyClass);\n        this.sidebar.style.minHeight = '';\n\n        this.sidebar.removeEventListener('update' + EVENT_KEY, this);\n\n        var styleReset = { inner: {}, outer: {} };\n\n        styleReset.inner = { position: '', top: '', left: '', bottom: '', width: '', transform: '' };\n        styleReset.outer = { height: '', position: '' };\n\n        for (var key in styleReset.outer) {\n          this.sidebar.style[key] = styleReset.outer[key];\n        }for (var _key2 in styleReset.inner) {\n          this.sidebarInner.style[_key2] = styleReset.inner[_key2];\n        }if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) {\n          ResizeSensor.detach(this.sidebarInner, this.handleEvent);\n          ResizeSensor.detach(this.container, this.handleEvent);\n        }\n      }\n\n      /**\r\n       * Determine if the browser supports CSS transform feature.\r\n       * @function\r\n       * @static\r\n       * @param {Boolean} transform3d - Detect transform with translate3d.\r\n       * @return {String}\r\n       */\n\n    }], [{\n      key: 'supportTransform',\n      value: function supportTransform(transform3d) {\n        var result = false,\n            property = transform3d ? 'perspective' : 'transform',\n            upper = property.charAt(0).toUpperCase() + property.slice(1),\n            prefixes = ['Webkit', 'Moz', 'O', 'ms'],\n            support = document.createElement('support'),\n            style = support.style;\n\n        (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function (property, i) {\n          if (style[property] !== undefined) {\n            result = property;\n            return false;\n          }\n        });\n        return result;\n      }\n\n      /**\r\n       * Trigger custom event.\r\n       * @static\r\n       * @param {DOMObject} element - Target element on the DOM.\r\n       * @param {String} eventName - Event name.\r\n       * @param {Object} data - \r\n       */\n\n    }, {\n      key: 'eventTrigger',\n      value: function eventTrigger(element, eventName, data) {\n        try {\n          var event = new CustomEvent(eventName, { detail: data });\n        } catch (e) {\n          var event = document.createEvent('CustomEvent');\n          event.initCustomEvent(eventName, true, true, data);\n        }\n        element.dispatchEvent(event);\n      }\n\n      /**\r\n       * Extend options object with defaults.\r\n       * @function\r\n       * @static\r\n       */\n\n    }, {\n      key: 'extend',\n      value: function extend(defaults, options) {\n        var results = {};\n        for (var key in defaults) {\n          if ('undefined' !== typeof options[key]) results[key] = options[key];else results[key] = defaults[key];\n        }\n        return results;\n      }\n\n      /**\r\n       * Get current coordinates left and top of specific element.\r\n       * @static\r\n       */\n\n    }, {\n      key: 'offsetRelative',\n      value: function offsetRelative(element) {\n        var result = { left: 0, top: 0 };\n\n        do {\n          var offsetTop = element.offsetTop;\n          var offsetLeft = element.offsetLeft;\n\n          if (!isNaN(offsetTop)) result.top += offsetTop;\n\n          if (!isNaN(offsetLeft)) result.left += offsetLeft;\n\n          element = 'BODY' === element.tagName ? element.parentElement : element.offsetParent;\n        } while (element);\n        return result;\n      }\n\n      /**\r\n       * Add specific class name to specific element.\r\n       * @static \r\n       * @param {ObjectDOM} element \r\n       * @param {String} className \r\n       */\n\n    }, {\n      key: 'addClass',\n      value: function addClass(element, className) {\n        if (!StickySidebar.hasClass(element, className)) {\n          if (element.classList) element.classList.add(className);else element.className += ' ' + className;\n        }\n      }\n\n      /**\r\n       * Remove specific class name to specific element\r\n       * @static\r\n       * @param {ObjectDOM} element \r\n       * @param {String} className \r\n       */\n\n    }, {\n      key: 'removeClass',\n      value: function removeClass(element, className) {\n        if (StickySidebar.hasClass(element, className)) {\n          if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n        }\n      }\n\n      /**\r\n       * Determine weather the element has specific class name.\r\n       * @static\r\n       * @param {ObjectDOM} element \r\n       * @param {String} className \r\n       */\n\n    }, {\n      key: 'hasClass',\n      value: function hasClass(element, className) {\n        if (element.classList) return element.classList.contains(className);else return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n      }\n    }]);\n\n    return StickySidebar;\n  }();\n\n  return StickySidebar;\n}();\n\n// Global\n// -------------------------\nwindow.StickySidebar = StickySidebar;\n\nreturn StickySidebar;\n\n})));\n\n//# sourceMappingURL=sticky-sidebar.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/sticky-sidebar/dist/sticky-sidebar.js\n// module id = 52\n// module chunks = 0","/* eslint-disable no-unused-vars */\r\nimport { stokpress } from '../util/helper';\r\n// var StellarAccordion = require( '../components/accordion' );\r\n/* eslint-disable no-undef */\r\n\r\nconst Product = {};\r\n\r\nlet productSectionsContainer = document.getElementById( 'js-selected-product-sections' ),\r\n    productInfoContainer = document.getElementById( 'js-selected-product-info' ),\r\n    productSwitchSelector = 'js-change-product',\r\n    productSizeSelector = 'js-change-size',\r\n    ajaxRequestEnable = true;\r\n\r\nProduct.processChangeProduct = (el) => {\r\n    let url = Product.ajaxUrl + el.dataset.id;\r\n\r\n    if (Product.currentLang) {\r\n        url = url + '?lang=' + Product.currentLang;\r\n    }\r\n\r\n    Product.processRequest( 'GET', url, el.dataset.url );\r\n}\r\n\r\nProduct.processRequest = (action, url, targetUrl) => {\r\n\r\n    // To avoid double send of ajax request\r\n    if( !ajaxRequestEnable ) {\r\n        return;\r\n    }\r\n\r\n    let xhr = new XMLHttpRequest();\r\n\r\n    ajaxRequestEnable = false;\r\n\r\n\txhr.onreadystatechange = function () {\r\n\t\tif ( xhr.readyState !== XMLHttpRequest.DONE ) { return; }\r\n\r\n\t\tif ( xhr.status === 200 ) {\r\n\t\t\ttry {\r\n                let data = JSON.parse( xhr.response );\r\n\r\n                Product.outputResult( data, targetUrl );\r\n                ajaxRequestEnable = true;\r\n\t\t\t}\r\n\t\t\tcatch ( err ) {\r\n                console.log( err );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t};\r\n\r\n    xhr.open( action, url, true );\r\n    xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest' );\r\n    xhr.send();\r\n}\r\n\r\nProduct.outputResult = (data, targetUrl) => {\r\n    if( !data.product ) {\r\n        return;\r\n    }\r\n\r\n    window.history.pushState( data, '', targetUrl );\r\n    Product.updateHtml( data );\r\n}\r\n\r\nProduct.updateHtml = (data) => {\r\n    productInfoContainer.innerHTML = data.product.info;\r\n    productSectionsContainer.innerHTML = data.product.sections;\r\n\r\n    if (data.product.current_color.name) {\r\n        $( 'title' ).html( data.product.current_color.name );\r\n    }\r\n    \r\n    Product.init( true );\r\n}\r\n\r\nProduct.changeProduct = (items) => {\r\n    if (!items) {\r\n        return;\r\n    }\r\n\r\n    Array.prototype.forEach.call( items, function (item) {\r\n\t\titem.addEventListener( 'change', function ( event ) {\r\n            window.location.href = event.target.parentElement.dataset.url;\r\n\t\t});\r\n\t} );\r\n}\r\n\r\nProduct.changeSize = (items) => {\r\n    if (!items) {\r\n        return;\r\n    }\r\n\r\n    Array.prototype.forEach.call( items, function (item) {\r\n\t\titem.addEventListener( 'change', function () {\r\n            let input = this.querySelector('input:checked'),\r\n                parent = stokpress.findAncestor( input, 'js-dropdown' ),\r\n                button = parent ? parent.querySelector( '.js-selected-label' ) : null;\r\n            \r\n                if (button) {\r\n                    const itemLabel = input.parentNode.querySelector( '.js-item-label' );\r\n                    button.innerHTML = itemLabel ? itemLabel.innerHTML : button.dataset.default_label;\r\n                }\r\n\t\t});\r\n\t} );\r\n}\r\n\r\nProduct.init = (reinit) => {\r\n    if (!productInfoContainer || !productSectionsContainer) {\r\n        return;\r\n    }\r\n\r\n    Product.ajaxUrl = productInfoContainer.dataset.url;\r\n    Product.currentLang = productInfoContainer.dataset.lang;\r\n    Product.changeProduct( productInfoContainer.getElementsByClassName(productSwitchSelector) );\r\n    Product.changeSize( productInfoContainer.getElementsByClassName(productSizeSelector) );\r\n\r\n    if ( reinit ) {\r\n        $('.js-plus-item').plusItem();\r\n        window.lazyLoadInstance.update();\r\n        window.BackgroundSwicher.refresh();\r\n        window.ProductSelectedSlider.init();\r\n        window.TrustbarSlider.init();        \r\n        window.ProductSlider.init();\r\n        window.FeatureSlider.init();\r\n        window.Video.init();\r\n        window.Cart.init();\r\n    }\r\n}\r\n\r\nProduct.init(false);\r\nif ( typeof history.pushState !== 'undefined' ) {\r\n    if ( Product.productColors ) {\r\n\r\n        let initialColorData = {};\r\n        initialColorData.product = {};\r\n        initialColorData.product.info = productInfoContainer.innerHTML;\r\n        initialColorData.product.sections = productSectionsContainer.innerHTML;\r\n\r\n        window.history.replaceState( initialColorData, '', location.pathname );\r\n    }\r\n\r\n    window.addEventListener( 'popstate', function ( e ) {\r\n        let data = e.state;\r\n\r\n        if ( data && typeof data === 'object' ) {\r\n\r\n            setTimeout( function(){\r\n                Product.updateHtml( data );\r\n            }, 500 );\r\n        } else {\r\n            // Product not loaded\r\n        }\r\n    } );\r\n}\r\nwindow.Product = Product;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/product.js","/* eslint-disable no-unused-vars */\r\n\r\nimport { stokpress, stokpressViewPort } from '../util/helper';\r\n/* eslint-disable no-undef */\r\n\r\nvar Cart = {};\r\n\r\n( function ( $ ) {\r\n\tvar cartForm = '.js-selectProductSingle';\r\n\tvar navCart = '.js-cart-overlay';\r\n\tvar removeItem = '.js-cart-remove-item';\r\n\tvar cartItemCount = $( '.js-item-count' );\r\n\tvar cartItems = $( '.js-cart-items' );\r\n\tvar formButtonSelector = 'button[type=\"submit\"]';\r\n\tvar buttonText = '.js-button-text';\r\n\tvar singlePageScope = $( 'body.single' );\r\n\tvar cartAjaxRequestEnable = true;\r\n\r\n\tCart.ajaxCall = function ( type, data, url, button ) {\r\n\t\t// To avoid double send of ajax request\r\n\t\tif ( !cartAjaxRequestEnable ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$.ajax( {\r\n\t\t\turl: url,\r\n\t\t\tdata: data,\r\n\t\t\ttype: type,\r\n\t\t\tdataType: 'json',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tcartAjaxRequestEnable = false;\r\n\r\n\t\t\t\tif ( button && button.length > 0 ) {\r\n\t\t\t\t\tbutton.attr( 'disabled', 'disabled' );\r\n\t\t\t\t\tbutton.addClass( 'is-loading' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsuccess: function ( result ) {\r\n\r\n\t\t\t\t// Update cart item count\r\n\t\t\t\tif ( cartItemCount ) {\r\n\t\t\t\t\tcartItemCount.each( function () {\r\n\t\t\t\t\t\t$( this ).text( result.totalItems );\r\n\r\n\t\t\t\t\t\t// Hide / Show Cart count\r\n\t\t\t\t\t\tif ( !result.totalItems ) {\r\n\t\t\t\t\t\t\t$( this ).addClass( 'd-none' );\r\n\t\t\t\t\t\t\tcartItems.addClass( 'no-item' );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$( this ).removeClass( 'd-none' );\r\n\t\t\t\t\t\t\tcartItems.removeClass( 'no-item' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( result.basket ) {\r\n\t\t\t\t\tcartItems.html( result.basket );\r\n\t\t\t\t\tCart.toggleCart( 'open' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcomplete: function () {\r\n\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\tCart.toggleCart( 'close' );\r\n\r\n\t\t\t\t\tif ( button && button.length > 0 ) {\r\n\t\t\t\t\t\tbutton.removeAttr( 'disabled' );\r\n\t\t\t\t\t\tbutton.removeClass( 'is-loading' );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcartAjaxRequestEnable = true;\r\n\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t// Re initialize element events\r\n\t\t\t\tCart.init();\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCart.toggleCart = function ( action ) {\r\n\t\tvar cartContainer = $( navCart );\r\n\t\tvar body = $( 'body' );\r\n\r\n\t\tif ( !cartContainer ) { return; }\r\n\r\n\t\tif ( action === 'open' ) {\r\n\r\n\t\t\tcartContainer.addClass( 'is-open' );\r\n\t\t\tbody.addClass( 'cart-overlay' );\r\n\t\t\twindow.CartSlider.init();\r\n\r\n\t\t} else if ( action === 'close' ) {\r\n\r\n\t\t\tcartContainer.removeClass( 'is-open' );\r\n\t\t\tbody.removeClass( 'cart-overlay' );\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tCart.add = function ( _this ) {\r\n\t\tvar buttonEl = _this.find( formButtonSelector );\r\n\r\n\t\tif ( _this.find( 'input[name=\"esc_product_item\"]:checked' ).length > 0 || _this.find( 'select[name=\"esc_product_item\"]' ).val() ) {\r\n\t\t\tvar data = _this.serialize();\r\n\r\n\t\t\tCart.ajaxCall( 'POST', data, null, buttonEl );\r\n\r\n\t\t} else {\r\n\t\t\t// Display error in button\r\n\t\t\tCart.updateButtonText( 'error', buttonEl );\r\n\r\n\t\t\tvar isMobile = stokpress.isMobile() || stokpressViewPort.documentWidth().width < 720;\r\n\t\t\tvar navHeight = $( 'nav' ).height();\r\n\t\t\tvar scrollToPos = 0;\r\n\r\n\t\t\t// Scroll to sizes\r\n\t\t\tif ( isMobile ) {\r\n\t\t\t\tscrollToPos = Math.abs( document.documentElement.clientHeight - buttonEl.offset().top - ( buttonEl.height() + navHeight ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Scroll to size error if current page is single page\r\n\t\t\tif ( singlePageScope.length ) {\r\n\t\t\t\t$( 'html, body' ).animate( {\r\n\t\t\t\t\tscrollTop: scrollToPos,\r\n\t\t\t\t}, 1000 );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tCart.updateButtonText = function ( dataAttr, buttonEl ) {\r\n\t\tif ( !buttonEl ) { return; }\r\n\r\n\t\tvar textVal = buttonEl.data( dataAttr );\r\n\t\tvar buttonTextEl = buttonEl.find( buttonText );\r\n\r\n\t\tif ( buttonTextEl ) {\r\n\t\t\tbuttonTextEl.text( textVal );\r\n\t\t}\r\n\t};\r\n\r\n\tCart.init = function () {\r\n\r\n\t\t// Add to bag\r\n\t\t$( document ).find( cartForm ).off( 'submit' ).on( 'submit', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tCart.add( $( this ) );\r\n\t\t} );\r\n\r\n\t\t// Remove product\r\n\t\t$( document ).find( removeItem ).off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar _this = $( this );\r\n\t\t\t_this.parents( 'li.item' ).addClass( 'is-processing' );\r\n\t\t\tCart.ajaxCall( 'GET', null, _this.attr( 'href' ), null );\r\n\t\t} );\r\n\r\n\t\t// Has size selected\r\n\t\t$( document ).find( 'input[name=\"esc_product_item\"], select[name=\"esc_product_item\"]' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\te.preventDefault();\r\n\t\t\tCart.updateButtonText( 'text', $( cartForm ).find( formButtonSelector ) );\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tCart.init();\r\n\r\n} )( jQuery );\r\n\r\nwindow.Cart = Cart;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/cart.js","let Search = {};\r\n\r\nSearch.init = function() {\r\n  let searchOpen = $('.js-search-open');\r\n  let searchClose = $('.js-search-close');\r\n\tlet searchForm = $('.js-search-form');\r\n\tlet searchInput = $('#js-search-input');\r\n\r\n  searchOpen.on( 'click', function() {\r\n    searchForm.addClass('show');\r\n\t$('body').addClass('search-active');\r\n\t$('.navbar-collapse').collapse('hide');\r\n\r\n    let targetEl = $( $(this).data('focus') );\r\n\r\n    if (targetEl) {\r\n        targetEl.focus();\r\n\t}\r\n  });\r\n\r\n  searchClose.click( function() {\r\n    searchForm.removeClass('show');\r\n\t\t$('body').removeClass('search-active');\r\n\t\tsearchInput.val('')\r\n  });\r\n}\r\n\r\nSearch.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/search.js","import Swiper, {Scrollbar} from '../../../../node_modules/swiper/swiper-bundle';\r\n\r\n( function ( $ ) {\r\n\tvar Checkout = {};\r\n\r\n\tvar editProduct = '.js-edit-item';\r\n\tvar cartContainer = $( document ).find( '#js-selectedItems' );\r\n\tvar selectedItemsContainer = $( document ).find( '#js-selectedItems--selection' );\r\n\tvar selectedTotalsContainer = $( document ).find( '#js-selectedTotals' );\r\n\tvar voucherContainer = $( document ).find( '#js-selectedVoucher' );\r\n\tvar paymentMethodContainer = $( document ).find( '#js-selectedPaymentMethod' );\r\n\tvar newsletterContainer = $( document ).find( '#js-selectedNewsletter' );\r\n\tvar giftContainer = $( document ).find( '#js-selectedGiftwrap' );\r\n\tvar paymentFieldsContainer = $( document ).find( '#js-paymentFields' );\r\n\tvar commentContainer = $( document ).find( '#js-selectedComment' );\r\n\tvar shippingMethodContainer = $( document ).find( '#js-selectedShippingMethod' );\r\n\tvar scope = $( document ).find( '#js-checkout-content' );\r\n\tvar totalDesktop = $( document ).find( '#js-checkout-sidebar' );\r\n\tvar totalMobile = $( document ).find( '#js-checkout-sidebar-mobile' );\r\n\tvar isDesktop;\r\n\tlet hideWhenNoZipFields = $( '.js-hidden-nozip' );\r\n\tvar $upsalesContainer = $( '#js-upsale-products' );\r\n\tvar $bundlesContainer = $( '#js-bundle-products' );\r\n\r\n\tCheckout.init = function () {\r\n\t\tisDesktop = true;\r\n\t\tCheckout.moveTotalSummaryContent();\r\n\t\tCheckout.initUpsales();\r\n\t\tCheckout.initBundles();\r\n\r\n\t\t// Payment form submit\r\n\t\tvar checkoutFormPurchase = $( document ).find( '.template-checkout #esc_purchase' );\r\n\t\tif ( checkoutFormPurchase ) {\r\n\t\t\tcheckoutFormPurchase.off( 'submit' ).on( 'submit', function () {\r\n\t\t\t\tvar hasError = Checkout.processPaymentFormValidation();\r\n\r\n\t\t\t\tif ( hasError === false ) {\r\n\t\t\t\t\treturn hasError;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Payment form input fields\r\n\t\tvar checkoutFormFields = paymentFieldsContainer.find( 'input' );\r\n\t\tif ( checkoutFormFields ) {\r\n\t\t\tcheckoutFormFields.off( 'focus' ).on( 'focus', function () {\r\n\t\t\t\t$( this ).removeClass( 'is-invalid' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Voucher\r\n\t\tvar voucherField = $( document ).find( '#js-selectedVoucher #voucher' );\r\n\t\tif ( voucherField ) {\r\n\t\t\tvoucherField.off( 'keydown' ).on( 'keydown', function ( e ) {\r\n\t\t\t\tif ( e.keyCode !== 13 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.voucherProcess( $( this ).parent().next() );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tvar voucherButton = $( document ).find( '#js-selectedVoucher .js-voucher-button' );\r\n\t\tif ( voucherButton ) {\r\n\t\t\tvoucherButton.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.voucherProcess( $( this ) );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Newsletter\r\n\t\tif ( newsletterContainer.find( ':checkbox' ) ) {\r\n\t\t\tnewsletterContainer.find( ':checkbox' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processNewsletter( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Gift\r\n\t\tif ( giftContainer.find( ':checkbox' ) ) {\r\n\t\t\tgiftContainer.find( ':checkbox' ).off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processComment( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Comment\r\n\t\tif ( commentContainer.find( 'textarea' ) ) {\r\n\t\t\tcommentContainer.find( 'textarea' ).off( 'blur' ).on( 'blur', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processComment( 'click' );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Payment Method\r\n\t\tvar paymentOptions = $( document ).find( '#js-selectedPaymentMethod :radio' );\r\n\t\tif ( paymentOptions ) {\r\n\t\t\tpaymentOptions.off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processPaymentMethod( paymentMethodContainer );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Shipping Method\r\n\t\tvar shippingOptions = $( document ).find( '#js-selectedShippingMethod :radio' );\r\n\t\tif ( shippingOptions ) {\r\n\t\t\tshippingOptions.off( 'change' ).on( 'change', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processShippingMethod( shippingMethodContainer );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Country\r\n\t\tvar countryOptions = $( document ).find( '#js-selectedCountry .js-country-item' );\r\n\t\tif ( countryOptions ) {\r\n\t\t\tcountryOptions.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.countryChangeProcess( this.dataset.code, '', false );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// State\r\n\t\tvar stateOptions = $( document ).find( '#js-selectedState .js-state-item' );\r\n\t\tif ( stateOptions ) {\r\n\t\t\tstateOptions.off( 'click' ).on( 'click', function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.countryChangeProcess( $( document ).find( '#js-selectedCountry .js-country-item.active' )[0].dataset.code, this.dataset.code, false );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n        var paymentOptionItems = $(document).find('input[type=radio][name=paymentCheckout]');\r\n        paymentOptionItems.off( 'change' ).on( 'change', function () {\r\n\t\t\t$('.js-payment-item').removeClass('is-selected');\r\n\t\t\tif ( $(this).is(':checked')) {\r\n\t\t\t\t$(this).closest('.js-payment-item').addClass('is-selected');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check if zip code field was clears\r\n\t\tCheckout.hasZipCode();\r\n\r\n\t\t// Make sure there's a selected default shipping method\r\n\t\tlet selectedShippingMethod = shippingMethodContainer.find( 'input[name=\"shippingMethod\"]:checked' );\r\n\r\n\t\tif ( selectedShippingMethod.length === 0 ) {\r\n\t\t\tshippingMethodContainer.find( 'input[name=\"shippingMethod\"]:first' ).prop( 'checked', true ).trigger( 'change' );\r\n\t\t}\r\n\r\n\t\t// Catch Klarna form updates\r\n\t\tlet interval = setInterval( () => {\r\n\t\t\tconsole.log( 'waiting for window._klarnaCheckout...' );\r\n\r\n\t\t\tif ( typeof window._klarnaCheckout === 'undefined' ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tclearInterval( interval );\r\n\r\n\t\t\twindow._klarnaCheckout( function ( api ) {\r\n\t\t\t\tapi.on( {\r\n\t\t\t\t\t'shipping_address_change': function ( data ) {\r\n\t\t\t\t\t\tconsole.log( 'shipping_address_change', data );\r\n\r\n\t\t\t\t\t\tlet zipCode = ( data.hasOwnProperty( 'postal_code' ) && data.postal_code ) ? data.postal_code : null;\r\n\r\n\t\t\t\t\t\tif ( zipCode ) {\r\n\t\t\t\t\t\t\t$( '#js-zip-code' ).val( zipCode ).trigger( 'change' );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( data.hasOwnProperty( 'email' ) && data.email ) {\r\n\t\t\t\t\t\t\t$.ajax( {\r\n\t\t\t\t\t\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\t\t\t\t\t\tdataType: 'JSON',\r\n\t\t\t\t\t\t\t\ttype: 'POST',\r\n\t\t\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\t\t\taction: 'update_cart_abandonment',\r\n\t\t\t\t\t\t\t\t\temail: data.email,\r\n\t\t\t\t\t\t\t\t\tzip_code: zipCode,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\terror: function ( request ) {\r\n\t\t\t\t\t\t\t\t\tconsole.debug( request );\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\t\t}, 1000 );\r\n\t};\r\n\r\n\tCheckout.initUpsales = function () {\r\n\t\tvar $upsales = selectedItemsContainer.find( 'template#js-upsale-products-template' );\r\n\t\tvar $upsalesTimeline = $('#js-upsale-timeline');\r\n\r\n\t\tif ( $upsales.length === 0 ) {\r\n\t\t\t$upsalesContainer.hide();\r\n\t\t\tif ($upsalesTimeline.length) $upsalesTimeline.hide();\r\n\t\t} else {\r\n\t\t\tif ($upsalesTimeline.length) $upsalesTimeline.show();\r\n\t\t\t$upsalesContainer.show()\r\n\t\t\t\t.find( '.js-product-thumb-list' )\r\n\t\t\t\t.html( $upsales.html() );\r\n\r\n                const upsellSlider = document.querySelector('.js-upsell-slider');\r\n                if (!upsellSlider) return;\r\n\r\n                Swiper.use([Scrollbar]);\r\n                new Swiper('.js-upsell-slider', {\r\n                    loop: false,\r\n                    slidesPerView: 'auto',\r\n                    scrollbar: {\r\n                        el: '.swiper-scrollbar',\r\n                        draggable: true,\r\n                    },\r\n                });\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.initBundles = function () {\r\n\t\tvar $bundles = selectedItemsContainer.find( 'template#js-bundle-products-template' );\r\n\r\n\t\tif ( $bundles.length === 0 ) {\r\n\t\t\t$bundlesContainer.hide();\r\n\t\t} else {\r\n\t\t\t$bundlesContainer\r\n\t\t\t\t.show()\r\n\t\t\t\t.html( $bundles.html() );\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.moveTotalSummaryContent = function () {\r\n\t\tif ( !totalDesktop || !totalMobile ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar currentIsDesktop = matchMedia( 'screen and (min-width: 1024px)' ).matches;\r\n\t\tvar appendContent = function ( from, to ) {\r\n\t\t\tvar content = from.children();\r\n\r\n\t\t\tif ( content ) {\r\n\t\t\t\tcontent.detach().appendTo( to );\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tif ( isDesktop !== currentIsDesktop ) {\r\n\t\t\tif ( currentIsDesktop ) {\r\n\t\t\t\tappendContent( totalMobile, totalDesktop );\r\n\t\t\t} else {\r\n\t\t\t\tappendContent( totalDesktop, totalMobile );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tisDesktop = currentIsDesktop;\r\n\t};\r\n\r\n\tCheckout.updateHtml = function ( data ) {\r\n\t\tconsole.log( 'reinit payments' );\r\n\r\n\t\tif ( data.totalItems === 0 ) {\r\n\t\t\twindow.location.href = location.pathname;\r\n\t\t} else {\r\n\t\t\tpaymentMethodContainer.html( data.paymentOptions );\r\n\t\t\tshippingMethodContainer.html( data.shippingOptions );\r\n\t\t\tpaymentFieldsContainer.html( data.payments );\r\n\t\t\tcartContainer.html( data.basket );\r\n\t\t\tselectedItemsContainer.html( data.items );\r\n\t\t\tselectedTotalsContainer.html( data.totals );\r\n\t\t\tvoucherContainer.html( data.voucher );\r\n\t\t\tCheckout.init();\r\n\t\t\twindow.lazyLoadInstance.update();\r\n\r\n\t\t\t// Update total price in header\r\n\t\t\t$( '#js-header-total-price' ).text( $( '.js-total-price' ).text() );\r\n\t\t}\r\n\r\n\t\tCheckout.showLoader( false );\r\n\t};\r\n\r\n\tCheckout.showLoader = function ( showLoader ) {\r\n\t\tvar loader = $( document ).find( '.js-loader' );\r\n\t\tvar hiddenClass = 'd-none';\r\n\r\n\t\tif ( !loader ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( showLoader ) {\r\n\t\t\tloader.removeClass( hiddenClass );\r\n\t\t} else {\r\n\t\t\tloader.addClass( hiddenClass );\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.validateEmail = function ( email ) {\r\n\t\t//eslint-disable-next-line\r\n\t\tvar re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t\treturn re.test( email );\r\n\t};\r\n\r\n\tCheckout.processPaymentFormValidation = function () {\r\n\r\n\t\tvar hasError = false;\r\n\r\n\t\tvar formFields = [\r\n\t\t\t'email',\r\n\t\t\t'phoneNumber',\r\n\t\t\t'firstName',\r\n\t\t\t'lastName',\r\n\t\t\t'address1',\r\n\t\t\t'city',\r\n\t\t\t'zipCode',\r\n\t\t\t'termsAndConditions',\r\n\t\t];\r\n\r\n\t\t$.each( formFields, function ( index, field ) {\r\n\r\n\t\t\tvar formField = $( '#address_' + field + ':visible' );\r\n\r\n\t\t\tformField.removeClass( 'is-invalid' );\r\n\r\n\t\t\tif ( typeof ( formField.val() ) !== 'undefined' ) {\r\n\r\n\t\t\t\tif ( !formField.val() ) {\r\n\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\thasError = true;\r\n\t\t\t\t} else if ( field === 'email' ) {\r\n\t\t\t\t\tif ( !Checkout.validateEmail( formField.val() ) ) {\r\n\t\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if ( field === 'termsAndConditions' ) {\r\n\t\t\t\t\tif ( !formField.is( ':checked' ) ) {\r\n\t\t\t\t\t\tformField.addClass( 'is-invalid' );\r\n\t\t\t\t\t\thasError = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\r\n\t\tif ( hasError ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tCheckout.processItems = function ( el ) {\r\n\t\tif ( !el ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t$.ajax( {\r\n\t\t\ttype: 'GET',\r\n\t\t\tdataType: 'json',\r\n\t\t\turl: el.attr( 'href' ) || el.data( 'href' ),\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tif (el.find('span.spinner-border').length > 0) {\r\n\t\t\t\t\tel.addClass( 'is-loading' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.parents( '.item' ).addClass( 'is-processing' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( data.totalItems === 0 || data.items === '' ) {\r\n\t\t\t\t\twindow.location.href = location.pathname;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t\tCheckout.initUpsales();\r\n\t\t\t\t\tCheckout.initBundles()\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcomplete: () => {\r\n\t\t\t\tif (el.find('span.spinner-border').length > 0) {\r\n\t\t\t\t\tel.removeClass( 'is-loading' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tel.parents( '.item' ).removeClass( 'is-processing' );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processPaymentMethod = function ( wrapper ) {\r\n\t\tvar paymentValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\r\n\t\tsendData += '&payment_method=' + paymentValue + '&ajax=1';\r\n\r\n\t\tconsole.log( 'processPaymentMethod' );\r\n\r\n\t\t$.ajax( {\r\n\t\t\tdataType: 'JSON',\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: sendData,\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( error ) {\r\n\t\t\t\tconsole.log( error );\r\n\t\t\t},\r\n\t\t} );\r\n\t}\r\n\r\n\t// Checkout.processPaymentMethod = function( wrapper ) {\r\n\t// \tvar paymentValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t//     console.log( 'processPaymentMethod' );\r\n\r\n\t//     $.ajax( {\r\n\t//         url: window.ajaxURL,\r\n\t//         dataType: 'JSON',\r\n\t//         data: {\r\n\t//             action: 'get_payment_method_form',\r\n\t//             payment_method: paymentValue,\r\n\t//         },\r\n\t//         beforeSend: function() {\r\n\t//             Checkout.showLoader( true );\r\n\t//         },\r\n\t//         success: function ( result ) {\r\n\t//             Checkout.showLoader( false );\r\n\t//             if( result.html ) {\r\n\t//                 $( '#js-paymentFields' ).html( result.html );\r\n\t//             } else {\r\n\t//                 window.location.reload();\r\n\t//             }\r\n\t//         },\r\n\t//         error: function (request) {\r\n\t//             Checkout.showLoader( false );\r\n\t//             console.debug(request);\r\n\t//         },\r\n\t//     } );\r\n\t// }\r\n\r\n\tCheckout.voucherProcess = function ( $button ) {\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\t\tvar buttonName = $button.attr( 'name' );\r\n\t\tvar buttonValue = encodeURIComponent( $button.attr( 'value' ) );\r\n\r\n\t\tsendData += '&' + buttonName + '=' + buttonValue + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.countryChangeProcess = function ( countryCode, state, reloadPage ) {\r\n\t\tconsole.log( 'countryChangeProcess' );\r\n\r\n\t\tvar sendData = 'esc_action=esc_change_country';\r\n\r\n\t\tif ( !state ) {\r\n\t\t\tstate = '';\r\n\t\t}\r\n\r\n\t\tsendData += '&esc_country=' + countryCode + '&ajax=1';\r\n\t\tsendData += '&address[state]=' + state;\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( reloadPage ) {\r\n\t\t\t\t\twindow.location.reload( true );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\twindow.location.reload( true );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processShippingMethod = function ( wrapper ) {\r\n\r\n\t\tvar shippingValue = wrapper.find( ':radio:checked' ).val();\r\n\r\n\t\tvar sendData = $( '#esc_purchase' ).serialize();\r\n\r\n\t\tsendData += '&shipping_method=' + shippingValue + '&ajax=1';\r\n\r\n\t\tconsole.log( 'processShippingMethod' );\r\n\r\n\t\t$.ajax( {\r\n\t\t\tdataType: 'JSON',\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: sendData,\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\tCheckout.processComment = function ( action ) {\r\n\r\n\t\tconsole.log( 'send comment' );\r\n\r\n\t\tvar value = giftContainer.find( ':checkbox:checked' ).length;\r\n\t\tvar form = $( '#esc_purchase' );\r\n\t\tvar sendData = form.serializeArray();\r\n\t\tvar voucher = form.find( '#js-voucher-field button' ).val();\r\n\r\n\t\t$.each( sendData, function () {\r\n\t\t\tif ( this.name === 'voucher' ) {\r\n\t\t\t\tthis.value = voucher;\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tsendData = $.param( sendData );\r\n\r\n\t\tif ( value === 0 ) {\r\n\t\t\tsendData += '&internalComment[giftwrap]=0';\r\n\t\t}\r\n\r\n\t\tsendData += '&submit_comment' + '=' + value + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( action === 'click' ) {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.processNewsletter = function ( action ) {\r\n\t\tconsole.log( 'newsletter' );\r\n\r\n\t\tvar value = newsletterContainer.find( ':checkbox:checked' ).length;\r\n\t\tvar form = $( '#esc_purchase' );\r\n\t\tvar sendData = form.serializeArray();\r\n\t\tvar voucher = form.find( '#js-voucher-field button' ).val();\r\n\r\n\t\t$.each( sendData, function () {\r\n\t\t\tif ( this.name === 'voucher' ) {\r\n\t\t\t\tthis.value = voucher;\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tsendData = $.param( sendData );\r\n\r\n\t\tif ( value === 0 ) {\r\n\t\t\tsendData += '&address[newsletter]=0';\r\n\t\t}\r\n\r\n\t\tsendData += '&submit_newsletter' + '=' + value + '&ajax=1';\r\n\r\n\t\t//Update all HTML\r\n\t\t$.ajax( {\r\n\t\t\tdata: sendData,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdataType: 'JSON',\r\n\t\t\tbeforeSend: function () {\r\n\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t},\r\n\t\t\tsuccess: function ( data ) {\r\n\t\t\t\tif ( action === 'click' ) {\r\n\t\t\t\t\tCheckout.updateHtml( data );\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function ( request ) {\r\n\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\tconsole.debug( request );\r\n\t\t\t},\r\n\t\t} );\r\n\t};\r\n\r\n\tCheckout.discount = function () {\r\n\t\t$( document ).on( 'click', '.js-add-discount-button', ( event ) => {\r\n\t\t\tlet $addDiscountInput = $( document ).find( '.js-add-discount-input' );\r\n\t\t\tlet $addDiscountVoucher = $( document ).find( '.js-form-voucher' );\r\n\r\n\t\t\tif ( event.preventDefault ) event.preventDefault();\r\n\t\t\t$( $addDiscountVoucher ).toggleClass( 'd-none' );\r\n\t\t\t$( $addDiscountInput ).focus();\r\n\t\t} );\r\n\t}\r\n\r\n\tCheckout.hasZipCode = () => {\r\n\t\tlet field = $( '#js-zip-code' );\r\n\r\n\t\tif ( !field.val() ) {\r\n\t\t\thideWhenNoZipFields.attr( 'style', 'display:none!important' );\r\n\t\t\tscope.addClass( 'has-no-zipcode' );\r\n\r\n\t\t\treturn false;\r\n\r\n\t\t}\r\n\r\n\t\tconst isClosedCountry = Checkout.isClosedCountry();\r\n\r\n\t\tif ( isClosedCountry ) {\r\n\t\t\t$( '.js-closed-country' ).addClass( 'd-flex' ).removeClass( 'd-none' );\r\n\t\t\thideWhenNoZipFields.attr( 'style', 'display:none!important' );\r\n\t\t\tscope.addClass( 'has-no-zipcode' );\r\n\t\t} else {\r\n\t\t\t$( '.js-closed-country' ).removeClass( 'd-flex' ).addClass( 'd-none' );\r\n\t\t\thideWhenNoZipFields.removeAttr( 'style' );\r\n\t\t\tscope.removeClass( 'has-no-zipcode' );\r\n\t\t}\r\n\r\n\t\treturn !isClosedCountry;\r\n\t};\r\n\r\n\tCheckout.isClosedCountry = () => {\r\n\t\tlet zipCode = parseInt( $( '#js-zip-code' ).val() ),\r\n\t\t\tcountry = $( '.js-country-item.active' ).data( 'code' ),\r\n\t\t\tclosedCountriesData = JSON.parse( $( '#js-closed-countries-data' ).text() );\r\n\r\n\t\tif ( !closedCountriesData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn closedCountriesData.filter( closedCountry => closedCountry.centra_country === country )\r\n\t\t\t.filter( country => country.zip_codes\r\n\t\t\t\t.filter( closedCountryZipCode => closedCountryZipCode.start <= zipCode\r\n\t\t\t\t\t&& closedCountryZipCode.end >= zipCode ).length > 0 ).length > 0;\r\n\t};\r\n\r\n\tCheckout.initZipCodeField = () => {\r\n\t\t$( document ).on( 'change', '#js-zip-code', () => {\r\n\t\t\tif ( !Checkout.hasZipCode() ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: '/wp-admin/admin-ajax.php',\r\n\t\t\t\tdataType: 'JSON',\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'update_zip_code',\r\n\t\t\t\t\tzip_code: $( '#js-zip-code' ).val(),\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: function () {\r\n\t\t\t\t\tCheckout.showLoader( true );\r\n\t\t\t\t\twindow.CentraCheckout.suspend();\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function ( data ) {\r\n\t\t\t\t\tshippingMethodContainer.html( data.data.shippingOptions );\r\n\t\t\t\t\tselectedTotalsContainer.html( data.data.totals );\r\n\t\t\t\t\tpaymentFieldsContainer.html( data.data.payments );\r\n\t\t\t\t\tCheckout.init();\r\n\r\n\t\t\t\t\t// Update total price in header\r\n\t\t\t\t\t$( '#js-header-total-price' ).text( $( '.js-total-price' ).text() );\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\t\twindow.CentraCheckout.resume();\r\n\t\t\t\t},\r\n\t\t\t\terror: function ( request ) {\r\n\t\t\t\t\tCheckout.showLoader( false );\r\n\t\t\t\t\tconsole.debug( request );\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tif ( scope.length > 0 ) {\r\n\t\t$( document ).ready( function () {\r\n\t\t\tCheckout.init();\r\n\r\n\t\t\t$( document ).on( 'change', 'select.js-upsale-product-size', function () {\r\n\t\t\t\t$( this ).parent().find( 'button.js-edit-item' ).attr( 'data-href', $( this ).val() );\r\n\t\t\t} );\r\n\r\n\t\t\t// Add/Remove product\r\n\t\t\t$( document ).on( 'click', editProduct, function ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tCheckout.processItems( $( this ) );\r\n\t\t\t} );\r\n\t\t} );\r\n\r\n\t\t$( window ).resize( function () {\r\n\t\t\tCheckout.moveTotalSummaryContent();\r\n\t\t} );\r\n\t}\r\n\r\n\tCheckout.discount();\r\n\tCheckout.initZipCodeField();\r\n\r\n\twindow.Checkout = Checkout;\r\n} )( jQuery );\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/checkout.js","( function ( $ ) {\r\n\tvar Scroll = {};\r\n\r\n\tScroll.To = function ( target, adjHeight ) {\r\n\t\ttarget = $( target );\r\n\r\n\t\tif( typeof adjHeight === 'undefined' || adjHeight === null ) { \r\n\t\t\tadjHeight = 0; \r\n\t\t}\t\t\r\n\r\n\t\tif ( target.length === 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar scrollTop = target.offset().top;\r\n\r\n\t\t// Get nav height and subtract to top offset of target element\r\n\t\tvar navBar = $( 'nav' );\r\n\t\tif ( navBar.length > 0 ) {\r\n\t\t\tscrollTop -= parseInt( navBar.css( 'height' ) );\r\n\t\t}\t\r\n\r\n\t\t// Get wpadminbar height and subtract to top offset of target element\r\n\t\tvar wpAdminBar = $( '#wpadminbar' );\r\n\t\tif ( wpAdminBar.length > 0 ) {\r\n\t\t\tscrollTop -= parseInt( wpAdminBar.css( 'height' ) );\r\n\t\t}\r\n\r\n\t\tif( adjHeight > 0 ) {\r\n\t\t\tscrollTop -= parseInt( adjHeight );\r\n\t\t}\r\n\r\n\t\t// Call stop() to avoid shaking behavior in Chrome\r\n\t\t$( 'html, body' ).stop( true ).animate( {\r\n\t\t\tscrollTop: scrollTop,\r\n\t\t}, 1000 );\r\n\t};\r\n\r\n\t$( window ).on( 'load',  function() {\r\n\r\n\t\t// Scroll to specific element id on page load\r\n\t\tif( window.location.hash !== null && window.location.hash !== '' ) {\r\n\t\t\tvar hash = window.location.hash.substring(1);\r\n\r\n\t\t\t// Catch invalid selectors in hash such as filter values\r\n\t\t\ttry {\r\n\t\t\t\tvar target = $( '#' + hash );\r\n\r\n\t\t\t\tif (target.length) {\r\n\t\t\t\t\tScroll.To( target, 0 );\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\tconsole.log('Invalid selector');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar links = $(document).find( '.js-section-link' );\r\n\t\tif (links.length) {\r\n\t\t\tlinks.off('click').on( 'click', function(e) {\r\n\t\t\t\tvar targetLink = $(this).attr('href');\r\n\r\n\t\t\t\tif (targetLink && $( targetLink )) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tScroll.To( $( targetLink ), 0 );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\r\n\t} );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/scroll.js","var BackgroundSwicher = {};\r\n\r\nBackgroundSwicher.refresh = function () {\r\n  $.each($('.js-bg-switch'), function () {\r\n\t\tlet breakPoint = $(this).data('bg-breakpoint');\r\n\t\tif (breakPoint == undefined) {\r\n\t\t\tbreakPoint = 1023.98;\r\n\t\t}\r\n\t\t$(this).backgroundSwitcher({\r\n\t\t\tbreakpoint: breakPoint,\r\n\t\t});\r\n  });\r\n};\r\n\r\nBackgroundSwicher.refresh();\r\n\r\n$(window).resize(BackgroundSwicher.refresh);\r\n\r\nwindow.BackgroundSwicher = BackgroundSwicher;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/backgroundSwitch.js","const articles = {};\r\n\r\nvar loadMoreButton = false;\r\n\r\narticles.init = () => {\r\n  // Article Ajax Load More Start Here\r\n  loadMoreButton = $( '.article-loadmore' );\r\n\r\n  loadMoreButton.on( 'click', function () {\r\n    var currentPage = $( this ).data( 'currentpage' );\r\n    var nextPage = currentPage + 1;\r\n    articleLoad( nextPage );\r\n    $( this ).data( 'currentpage', nextPage );\r\n  } );\r\n}\r\n\r\narticles.init();\r\n\r\nfunction articleLoad ( nextPage ) {\r\n  var ajaxUrl = loadMoreButton.data( 'ajaxurl' );\r\n  var order = loadMoreButton.data( 'order' );\r\n  var orderBy = loadMoreButton.data( 'orderby' );\r\n  var postsPerPage = loadMoreButton.data( 'postsperpage' );\r\n  var currentTermId = loadMoreButton.data( 'currentterm_id' );\r\n  var languange = loadMoreButton.data('language');\r\n  // /wp-json/wp/v2/posts?per_page=10&page=1&categories=4,5&order=desc&order_by=post_date\r\n  ajaxUrl += '?page=' + nextPage;\r\n  ajaxUrl += '&per_page=' + postsPerPage;\r\n\r\n  if(currentTermId) {\r\n    ajaxUrl += '&categories=' + currentTermId;\r\n  }\r\n\r\n  // ajaxUrl += '&categories_exclude=1';\r\n  ajaxUrl += '&order=' + order;\r\n  ajaxUrl += '&order_by=' + orderBy;\r\n  ajaxUrl += '&lang=' + languange;\r\n  // console.log(ajaxUrl);\r\n  $.ajax( {\r\n    url: ajaxUrl,\r\n    type: 'GET',\r\n    beforeSend: function () {\r\n      loadMoreButton.addClass( 'is-loading' );\r\n    },\r\n    error: function ( data, textStatus ) {\r\n      console.log( data );\r\n      console.log( textStatus );\r\n    },\r\n    success: function ( data, textStatus, jqXHR ) {\r\n      if ( data ) {\r\n        loadMoreButton.removeClass( 'is-loading' );\r\n\r\n        // Need to clear list if Filter is trigger\r\n        if ( nextPage == 1 ) {\r\n          $( '.article-list' ).html( '' );\r\n        }\r\n\r\n        if ( $( data ).length > 0 ) {\r\n          $( data ).each( function ( key, val ) {\r\n            $( '.article-list' ).append( val.article_item );\r\n          } );\r\n        }\r\n\r\n        var totalCount = parseInt( jqXHR.getResponseHeader( 'X-WP-Total' ), 10 );\r\n        // if ($('.js-total-count')) {\r\n        // \t$('.js-total-count').text( totalCount );\r\n        // }\r\n\r\n        if ( totalCount === 0 ) {\r\n          loadMoreButton.addClass( 'd-none' );\r\n        }\r\n\r\n        var totalPage = parseInt( jqXHR.getResponseHeader( 'X-WP-TotalPages' ), 10 );\r\n        if ( loadMoreButton.data( 'currentpage' ) == totalPage || data.length == 0 )\r\n          loadMoreButton.addClass( 'd-none' ); // if last page, remove the button\r\n      } else {\r\n        loadMoreButton.addClass( 'd-none' ); // if no data, remove the button as well\r\n      }\r\n    },\r\n    complete: function () {\r\n      if ( window.lazyLoadInstance ) {\r\n        window.lazyLoadInstance.update();\r\n      }\r\n    },\r\n  } );\r\n}\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/articles.js","let textBanner = {};\r\n\r\ntextBanner.init = function () {\r\n  let textBannerShowChar;\r\n\r\n  if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n    textBannerShowChar = 150;\r\n  } else {\r\n    textBannerShowChar = 350;\r\n  }\r\n\r\n  // let textBannerEllipsisText = '...';\r\n  let textBannerSection = $('.js-text-intro-block');\r\n\r\n  $.each(textBannerSection, function () {\r\n    let currentTextBanner = $(this);\r\n    let textBannerMoreText = currentTextBanner.data('readmore');\r\n    let textBannerLessText = currentTextBanner.data('readless');\r\n    let textBannerMobile = currentTextBanner.find('.js-text-intro-block-content');\r\n    let contentWrapper = currentTextBanner.find('.js-content');\r\n\r\n    let content = currentTextBanner.find('.js-content').html();\r\n    if (content && content.length > textBannerShowChar) {\r\n      currentTextBanner.addClass('has-content-hidden');\r\n      let textBannerShownContent = content.substr(0, textBannerShowChar);\r\n\r\n      let htmlLess = '<div class=\"less\">' + textBannerShownContent + '</div>';\r\n      let htmlMore = '<div class=\"more\">' + content + '</div>';\r\n      let readButton = '&nbsp;&nbsp;<a href=\"#\" class=\"js-readMore-link readMore-link\">' + textBannerMoreText + '</a>';\r\n      currentTextBanner.find('.js-content').html(htmlLess);\r\n      currentTextBanner.find('.js-content').append(htmlMore);\r\n      currentTextBanner.find('.js-content').append(readButton);\r\n    } else {\r\n      currentTextBanner.find('.js-arrow-mobile').addClass('d-none');\r\n    }\r\n\r\n    currentTextBanner.find('.js-readMore-link').click(function () {\r\n      if (contentWrapper.hasClass('toggle-content')) {\r\n        textBannerMobile.removeClass('toggle-content');\r\n        contentWrapper.removeClass('toggle-content');\r\n        $(this).html(textBannerMoreText);\r\n      } else {\r\n        textBannerMobile.addClass('toggle-content');\r\n        contentWrapper.addClass('toggle-content');\r\n        $(this).html(textBannerLessText);\r\n      }\r\n    });\r\n\r\n    textBannerMobile.click(function () {\r\n      if (matchMedia('screen and (max-width: 1023.98px)').matches) {\r\n        if (contentWrapper.hasClass('toggle-content')) {\r\n          textBannerMobile.removeClass('toggle-content');\r\n          contentWrapper.removeClass('toggle-content');\r\n        } else {\r\n          textBannerMobile.addClass('toggle-content');\r\n          contentWrapper.addClass('toggle-content');\r\n        }\r\n      }\r\n    });\r\n  });\r\n}\r\n\r\ntextBanner.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/text-banner.js","let Form = {};\r\n\r\nForm.init = function () {\r\n\t// TOGGLE IS_VALID CLASS ON CHECKBOX\r\n  $('input[type=\"checkbox\"].custom-control-input').change(function () {\r\n    if ($(this).prop('checked')) {\r\n      $(this).removeClass('is-invalid')\r\n    }\r\n  });\r\n};\r\n\r\nForm.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/forms.js","let hero = {};\r\n\r\nhero.video = function () {\r\n  \r\n  let currentIsDesktop = $('html.no-touchevents').length;\r\n  let mobileVideo = $('.hero-mobile-vid')\r\n  \r\n  if (!currentIsDesktop) {\r\n    let videoMobileClass = $('.hero-mb-vid');\r\n    let videoDesktopClass = $('.hero-d-vid');\r\n\r\n    if (videoMobileClass.hasClass('d-none') && videoMobileClass.hasClass('d-lg-block')) {\r\n      videoMobileClass.removeClass('d-none d-lg-block').addClass('d-block d-lg-none');\r\n    }\r\n\r\n    if (videoDesktopClass) {\r\n      videoDesktopClass.remove();\r\n    }\r\n\r\n  } else {\r\n    mobileVideo.remove();\r\n  }\r\n\r\n}\r\n\r\nhero.init = function () {\r\n  hero.video();\r\n}\r\n\r\nhero.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/hero.js","let StoreLocator = {};\r\nvar cartAjaxRequestEnable = true;\r\nvar selectedLocation = '';\r\nvar searchString = '';\r\n\r\nStoreLocator.init = function() {\r\n  let locationFilter = $('.js-store-locator-location');\r\n  locationFilter.on( 'click', function() {\r\n    let selectedValue = $(this).attr('data-value');\r\n    selectedLocation = selectedValue;\r\n    let data = {\r\n      'action': 'store_locator_search',\r\n      'location': selectedValue,\r\n    };\r\n\r\n    if( searchString.length > 0 ) {\r\n      data.city = searchString;\r\n    }\r\n    locationFilter.removeClass('btn-primary').addClass('btn-secondary');\r\n    $(this).removeClass('btn-secondary').addClass('btn-primary');\r\n    StoreLocator.ajaxCall( data );\r\n  });\r\n\r\n  // catch on enter\r\n  let searchButton = $('#js-search-locator-button');\r\n  let searchText = $('#js-search-locator-string');\r\n\r\n  searchButton.on( 'click', function() {\r\n    searchString =  $.trim(searchText.val());\r\n    if( searchString.length == 0 && selectedLocation.length == 0 ) {\r\n      return false;\r\n    }\r\n    \r\n    let data = {\r\n      'action': 'store_locator_search',\r\n    };\r\n\r\n    if( searchString.length > 0 ) {\r\n      data.city = searchString;\r\n    }\r\n    if( selectedLocation.length > 0 ) {\r\n      data.location = selectedLocation;\r\n    }\r\n    StoreLocator.ajaxCall( data );\r\n  });\r\n\r\n  searchText.on( 'keypress', function( e ) {\r\n    if (e.keyCode == 13) {\r\n      searchButton.trigger( 'click' );\r\n    }\r\n  });\r\n}\r\n\r\nStoreLocator.ajaxCall = function( data ) {\r\n  // To avoid double send of ajax request\r\n  if (!cartAjaxRequestEnable) {\r\n      return;\r\n  }\r\n\r\n  $.ajax({\r\n      url: '/wp-admin/admin-ajax.php',\r\n      data: data,\r\n      type: 'POST',\r\n      dataType: 'json',\r\n      beforeSend: function () {\r\n        cartAjaxRequestEnable = false;\r\n      },\r\n      success: function (result) {\r\n        $('#js-store-locator-search-result').html(result.html);\r\n      },\r\n      complete: function () {\r\n          cartAjaxRequestEnable = true;           \r\n      },\r\n      error: function (request) {\r\n          console.debug(request);\r\n      },\r\n  });\r\n};\r\n\r\nStoreLocator.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/store-locator.js","let BulletList = {};\r\n\r\nBulletList.init =  () => {\r\n\tBulletList.collapse(4);\r\n}\r\n\r\nBulletList.collapse = (maxItem) => {\r\n\tlet bulletList = $('.js-bullet-list');\r\n\r\n\tif (bulletList.length === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t$.each(bulletList, function () {\r\n\t\tlet $bulletList = $(this);\r\n\r\n\t\tlet bulletListToggle = $bulletList.find('.js-bullet-list-toggle');\r\n\t\tlet bulletListItem = $bulletList.find('.js-bullet-list-collapse li');\r\n\t\tlet itemCount = $bulletList.find('.js-bullet-list-collapse li').length;\r\n\r\n\t\tif (itemCount > maxItem) {\r\n\t\t\t$bulletList.addClass('is-hidden');\r\n\t\t\tbulletListItem.slice(maxItem, itemCount).addClass('is-hidden');\r\n\t\t\r\n\t\t\tbulletListToggle.click(() => {\r\n\t\t\t\tif ($bulletList.hasClass('is-hidden')) {\r\n\t\t\t\t\t$bulletList.removeClass('is-hidden');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$bulletList.addClass('is-hidden');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}  \r\n\t});\r\n}\r\n\r\n\r\nBulletList.init();\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/bullet-list.js","( ( $ ) => {\r\n\tlet FlexibleBundles = {};\r\n\tconst $cartItems = $( '.js-cart-items' ),\r\n\t\tisSinglePage = $( 'body' ).hasClass( 'single-silk_products' );\r\n\r\n\tFlexibleBundles.changeColor = () => {\r\n\t\tif ( isSinglePage ) {\r\n\t\t\t$( '.js-color-item-checkbox' ).change( ( e ) => {\r\n\t\t\t\t$( '#js-images-' + e.currentTarget.dataset.section )\r\n\t\t\t\t\t.find( '.product-bundle-item-image' )\r\n\t\t\t\t\t.each( ( index, image ) => {\r\n\t\t\t\t\t\tif ( image.dataset.color != e.currentTarget.value ) {\r\n\t\t\t\t\t\t\timage.style.display = 'none';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\timage.style.display = 'initial';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.flickity( 'resize' );\r\n\r\n\t\t\t\t$( '#js-sizes-' + e.currentTarget.dataset.section + ' .js-size-list-item' )\r\n\t\t\t\t\t.each( ( index, item ) => {\r\n\t\t\t\t\t\tif ( item.dataset.color != e.currentTarget.value ) {\r\n\t\t\t\t\t\t\titem.style.display = 'none';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\titem.style.display = 'initial';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t$( '#js-sizes-' + e.currentTarget.dataset.section + ' input[type=radio]' )\r\n\t\t\t\t\t.prop( 'checked', false );\r\n\t\t\t} );\r\n\t\t} else {\r\n\t\t\t$( '.js-section-color' ).change( ( e ) => {\r\n\t\t\t\tconst section = e.currentTarget.dataset.section,\r\n\t\t\t\t\t$select = $( 'select#section-' + section + '-size' ),\r\n\t\t\t\t\t$selected = $( 'input[name=section-' + section + '-color]:checked' );\r\n\r\n\t\t\t\t$select.find( 'option' )\r\n\t\t\t\t\t.hide()\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.find( 'option[data-color=' + $selected.val() + ']' )\r\n\t\t\t\t\t.show()\r\n\t\t\t\t\t.end()\r\n\t\t\t\t\t.find( 'option[data-color=' + $selected.val() + ']' )\r\n\t\t\t\t\t.not( ':disabled' )\r\n\t\t\t\t\t.first()\r\n\t\t\t\t\t.prop( 'selected', true );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\tFlexibleBundles.removeBundle = () => {\r\n\t\t$( document ).on( 'click', '.js-remove-bundle', ( e ) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tconst $element = $( e.currentTarget ),\r\n\t\t\t\tisCheckout = $element.data( 'checkout' );\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: window.ajaxURL,\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'remove_bundle',\r\n\t\t\t\t\tline: $element.data( 'line' ),\r\n\t\t\t\t\tcheckout: isCheckout,\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: () => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\twindow.Checkout.showLoader( true );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$element.parents( 'li.item' ).addClass( 'is-processing' );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: ( data, textStatus ) => {\r\n\t\t\t\t\tconsole.log( data );\r\n\t\t\t\t\tconsole.log( textStatus );\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: ( result ) => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\tif ( result.totalItems === 0 || result.items === '' ) {\r\n\t\t\t\t\t\t\twindow.location.href = location.pathname;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\twindow.Checkout.updateHtml( result );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif ( result.success && result.data.cart ) {\r\n\t\t\t\t\t\t\t$cartItems.html( result.data.cart );\r\n\t\t\t\t\t\t\twindow.Cart.toggleCart( 'open' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tif ( isCheckout ) {\r\n\t\t\t\t\t\twindow.Checkout.showLoader( false );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\t\twindow.Cart.toggleCart( 'close' );\r\n\t\t\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t\t\twindow.Cart.init();\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tFlexibleBundles.addBundle = () => {\r\n\t\t$( '.js-bundle-form' ).submit( ( e ) => {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tlet data = {\r\n\t\t\t\titem: '',\r\n\t\t\t\tsections: [],\r\n\t\t\t},\r\n\t\t\t\tpost = null,\r\n\t\t\t\thasSelectedSizes = true;\r\n\r\n\t\t\tconst $form = $( e.currentTarget ),\r\n\t\t\t\t$submit = $form.find( 'button[type=submit]' ),\r\n\t\t\t\t$submitText = $submit.find( '.js-button-text' );\r\n\r\n\t\t\t$submitText.text( $submit.data( 'text' ) );\r\n\r\n\t\t\tif ( isSinglePage ) {\r\n\t\t\t\t$( '.js-size-list' ).each( ( index, element ) => {\r\n\t\t\t\t\tif ( $( element ).find( 'input[type=radio]:checked' ).length === 0 ) {\r\n\t\t\t\t\t\thasSelectedSizes = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !hasSelectedSizes ) {\r\n\t\t\t\t$submitText.text( $submit.data( 'error' ) );\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t$form\r\n\t\t\t\t.serializeArray()\r\n\t\t\t\t.forEach( ( item ) => {\r\n\t\t\t\t\tif ( item.name === 'item' ) {\r\n\t\t\t\t\t\tdata.item = item.value;\r\n\t\t\t\t\t} else if ( item.name.indexOf( '-size' ) !== -1 ) {\r\n\t\t\t\t\t\tdata.sections.push( {\r\n\t\t\t\t\t\t\tsection: item.name.split( '-' )[1],\r\n\t\t\t\t\t\t\titem: item.value,\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t} else if ( item.name === 'post' ) {\r\n\t\t\t\t\t\tpost = item.value\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\r\n\t\t\t$.ajax( {\r\n\t\t\t\turl: window.ajaxURL,\r\n\t\t\t\ttype: 'POST',\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tdata: {\r\n\t\t\t\t\taction: 'add_bundle',\r\n\t\t\t\t\tpost: post,\r\n\t\t\t\t\tdata: data,\r\n\t\t\t\t\tesc_post: post,\r\n\t\t\t\t\tesc_product_item: data.item,\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: () => {\r\n\t\t\t\t\t$submit.addClass( 'is-loading' );\r\n\t\t\t\t\t$submit.prop( 'disabled', true );\r\n\t\t\t\t},\r\n\t\t\t\terror: ( data, textStatus ) => {\r\n\t\t\t\t\tconsole.log( data );\r\n\t\t\t\t\tconsole.log( textStatus );\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: ( result ) => {\r\n\t\t\t\t\tif ( result.success && result.data.cart ) {\r\n\t\t\t\t\t\t$cartItems.html( result.data.cart );\r\n\t\t\t\t\t\twindow.Cart.toggleCart( 'open' );\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsetTimeout( function () {\r\n\t\t\t\t\t\twindow.Cart.toggleCart( 'close' );\r\n\t\t\t\t\t\t$submit.removeClass( 'is-loading' );\r\n\t\t\t\t\t\t$submit.prop( 'disabled', false );\r\n\t\t\t\t\t}, 1500 );\r\n\r\n\t\t\t\t\twindow.Cart.init();\r\n\t\t\t\t},\r\n\t\t\t} );\r\n\t\t} );\r\n\t};\r\n\r\n\tFlexibleBundles.init = () => {\r\n\t\tFlexibleBundles.changeColor();\r\n\t\tFlexibleBundles.addBundle();\r\n\t\tFlexibleBundles.removeBundle();\r\n\t};\r\n\r\n\tFlexibleBundles.init();\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/bundles.js","( ( $ ) => {\r\n\tlet Hotjar = {};\r\n\twindow.hj = window.hj || function () { ( window.hj.q = window.hj.q || [] ).push( arguments ) };\r\n\r\n\tHotjar.init = () => {\r\n\t\t$( '.js-search-open' ).on( 'click', () => {\r\n\t\t\twindow.hj( 'event', 'search' );\r\n\t\t} );\r\n\r\n\r\n\t\t$( '.js-filter-open' ).on( 'click', () => {\r\n\t\t\twindow.hj( 'event', 'filter' );\r\n\t\t} );\r\n\t};\r\n\r\n\t$( document ).on( 'ready', Hotjar.init );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/tracking/hotjar.js","let TextEditor = {};\r\n\r\nTextEditor.init = function() {\r\n\tlet readMore = $('.js-read-more');\r\n\tlet btnReadMore = $('.btn-read-more');\r\n\r\n\tif (readMore.length === 0){\r\n\t\treturn;\r\n\t}\r\n\r\n\treadMore.each(function(){\r\n\t\tlet thisReadMore = $(this);\r\n\t\tlet thisTextHeight = thisReadMore.find('.editor-content-text').height();\r\n\r\n\t\tif (thisTextHeight > 150){\r\n\t\t\tthisReadMore.addClass('collapse-read-more');\r\n\t\t}\r\n\t});\r\n\r\n\tbtnReadMore.click(function(){\r\n\t\tlet thisReadMoreBtn = $(this);\r\n\t\tlet editorContentCont = thisReadMoreBtn.closest('.js-read-more');\r\n\t\tlet hasCollapse = editorContentCont.hasClass('collapse-read-more');\r\n\r\n\t\tif(hasCollapse){\r\n\t\t\teditorContentCont.removeClass('collapse-read-more');\r\n\t\t\teditorContentCont.addClass('expand-read-more');\r\n\t\t} else {\r\n\t\t\teditorContentCont.addClass('collapse-read-more');\r\n\t\t\teditorContentCont.removeClass('expand-read-more');\r\n\t\t\t\r\n\t\t}\r\n\r\n\t});\r\n\t\r\n}\r\n\r\nTextEditor.init();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/text-editor.js","( ( $ ) => {\r\n\t$( document ).on( 'ready', () => {\r\n\t\tif ( !( 'gtag' in window ) || !( 'dataLayer' in window ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\twindow.dataLayer.forEach( item => {\r\n\t\t\tif ( !( 'ecommerce' in item )\r\n\t\t\t\t|| ('ecommerce' in item && item.ecommerce === null )\r\n\t\t\t\t|| !( 'purchase' in item.ecommerce ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\twindow.gtag( 'event', 'purchase', {\r\n\t\t\t\ttransaction_id: item.ecommerce.purchase.actionField.id,\r\n\t\t\t\tvalue: item.ecommerce.purchase.actionField.revenue,\r\n\t\t\t\ttax: item.ecommerce.purchase.actionField.tax,\r\n\t\t\t\tshipping: item.ecommerce.purchase.actionField.shipping,\r\n\t\t\t\tcurrency: item.ecommerce.currencyCode,\r\n\t\t\t\tcoupon: item.ecommerce.purchase.actionField.coupon,\r\n\t\t\t\titems: item.ecommerce.purchase.products.map( product => {\r\n\t\t\t\t\treturn [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titem_id: product.id,\r\n\t\t\t\t\t\t\titem_name: product.name,\r\n\t\t\t\t\t\t\taffiliation: product.brand,\r\n\t\t\t\t\t\t\titem_brand: product.brand,\r\n\t\t\t\t\t\t\titem_category: product.category,\r\n\t\t\t\t\t\t\titem_variant: product.variant,\r\n\t\t\t\t\t\t\tprice: product.price,\r\n\t\t\t\t\t\t\tquantity: product.quantity,\r\n\t\t\t\t\t\t}]\r\n\t\t\t\t} ),\r\n\t\t\t} );\r\n\t\t} );\r\n\t} );\r\n} )( jQuery );\n\n\n// WEBPACK FOOTER //\n// ./scripts/tracking/gtag.js","let topBanner = {};\r\n\r\nconst body = document.querySelector('body');\r\nconst overlay = document.getElementById('js-overlay');\r\nconst closePopup = document.getElementById('js-close-popup');\r\nconst uspTopBannerPopup = document.getElementById('js-usp-top-banner-popup');\r\nconst uspTopBannerItems = document.querySelectorAll('.js-usp-top-banner-item');\r\n\r\ntopBanner.animate = function() {\r\n    window.addEventListener('load', function() {\r\n        let currentIndex = 0;\r\n        const totalItems = uspTopBannerItems.length;\r\n\r\n        function showItem(index) {\r\n            uspTopBannerItems.forEach((item, i) => {\r\n                item.classList.remove('show');\r\n                if (i === index) {\r\n                    item.classList.add('show');\r\n                }\r\n            });\r\n        }\r\n\r\n        function rotateItems() {\r\n            showItem(currentIndex);\r\n            currentIndex = (currentIndex + 1) % totalItems;\r\n        }\r\n\r\n\r\n\t\tif (uspTopBannerItems.length > 0) {\r\n\t\t\t// Initialize the first item display\r\n\t\t\tshowItem(currentIndex);\r\n\r\n\t\t\t// Change item every 5 seconds\r\n\t\t\tsetInterval(rotateItems, 5000);\r\n\t\t}\r\n\r\n    });\r\n}\r\n\r\ntopBanner.size = function() {\r\n    const vh = window.innerHeight / 100;\r\n\tif(uspTopBannerPopup) {\r\n\t\tif (uspTopBannerPopup.offsetHeight > 80 * vh) {\r\n\t\t\tuspTopBannerPopup.classList.add('is-fullscreen');\r\n\t\t} else {\r\n\t\t\tuspTopBannerPopup.classList.remove('is-fullscreen');\r\n\t\t}\r\n\t}\r\n}\r\n\r\ntopBanner.close = function() {\r\n    if (uspTopBannerPopup) {\r\n        uspTopBannerPopup.classList.remove('is-open');\r\n\t\tif (overlay) {\r\n\t\t\toverlay.style.display = 'none';\r\n\t\t}\r\n        body.classList.remove('usp-top-banner-popup-no-scroll');\r\n        uspTopBannerPopup.classList.remove('is-fullscreen');\r\n      }\r\n}\r\n\r\ntopBanner.init = function() {\r\n    if (uspTopBannerItems.length > 0) {\r\n        uspTopBannerItems.forEach(function (button) {\r\n            button.addEventListener('click', function (event) {\r\n                event.preventDefault();\r\n\r\n                if(uspTopBannerPopup) {\r\n                    uspTopBannerPopup.classList.add('is-open');\r\n                    if (overlay) {\r\n                        overlay.style.display = 'block';\r\n                    }\r\n                    body.classList.add('usp-top-banner-popup-no-scroll');\r\n                    topBanner.size();\r\n                }\r\n\r\n            });\r\n        });\r\n    }\r\n\r\n\tif(closePopup) {\r\n\t\tclosePopup.addEventListener('click', topBanner.close);\r\n\t}\r\n\r\n\tif(overlay) {\r\n        overlay.addEventListener('click', topBanner.close);\r\n\t}\r\n\r\n    window.addEventListener('resize', window.stokpress.debounce(function () {\r\n        topBanner.size();\r\n    }, 500));\r\n}\r\n\r\ntopBanner.init();\r\ntopBanner.animate();\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/top-banner.js","export const sliders = {\r\n  init() {\r\n    require('./product-selected');\r\n    require('./product-slider');\r\n    require('./feature-slider');\r\n    require('./article-slider');\r\n    require('./article-listing');\r\n\trequire('./trustbar-slider');\r\n\trequire('./cart-slider');\r\n\trequire('./category-promo-slider');\r\n\trequire('./sub-navigation');\r\n\trequire('./product-bundle-page-slider');\r\n\r\n    // IOS 13.1.3 Flickity Fix\r\n    let touchingCarousel = false;\r\n    let touchStartCoords;\r\n\r\n    document.body.addEventListener('touchstart', function(e) {\r\n      if (e.target.closest('.flickity-slider')) {\r\n        touchingCarousel = true;\r\n      } else {\r\n        touchingCarousel = false;\r\n        return;\r\n      }\r\n\r\n      touchStartCoords = {\r\n        x: e.touches[0].pageX,\r\n        y: e.touches[0].pageY,\r\n      }\r\n    });\r\n\r\n    document.body.addEventListener('touchmove', function(e) {\r\n      if (!(touchingCarousel && e.cancelable)) {\r\n        return;\r\n      }\r\n\r\n      var moveVector = {\r\n        x: e.touches[0].pageX - touchStartCoords.x,\r\n        y: e.touches[0].pageY - touchStartCoords.y,\r\n      };\r\n\r\n      if (Math.abs(moveVector.x) > 7)\r\n        e.preventDefault()\r\n\r\n    }, {passive: false});\r\n  },\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/index.js","let ProductSelectedSlider;\r\n\r\nlet $mobileSlider;\r\nlet $desktopSliderModal;\r\nlet $desktopSliderThumbnailModal;\r\nlet $flickityModal;\r\n\r\nProductSelectedSlider = {\r\n\tinit () {\r\n\t\t$mobileSlider = $( '.js-selected-product-mobile-slider' );\r\n\t\t$desktopSliderModal = $( '.js-selected-product-modal-slider' );\r\n\t\t$desktopSliderThumbnailModal = $( '.js-selected-product-modal-thumbnail-slider' );\r\n\t\t$flickityModal = $( '.flickity-modal' );\r\n\r\n\t\tlet options = {};\r\n\r\n\t\toptions.$mobileOption = {\r\n\t\t\tpageDots: true,\r\n\t\t\twrapAround: true,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\tfullscreen: false,\r\n\t\t\ton: {\r\n\t\t\t\tready: function () {\r\n\t\t\t\t\t$mobileSlider.removeClass( 'invisible' );\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t}\r\n\r\n\t\toptions.$desktopOption = {\r\n\t\t\tpageDots: false,\r\n\t\t\twrapAround: true,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\tfullscreen: false,\r\n\t\t}\r\n\r\n\t\toptions.$desktopSliderThumbnailModal = {\r\n\t\t\tpageDots: false,\r\n\t\t\twrapAround: false,\r\n\t\t\tcellAlign: 'center',\r\n\t\t\tpercentPosition: false,\r\n\t\t\tdragThreshold: 10,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\tfullscreen: false,\r\n\t\t\tcontain: true,\r\n\t\t}\r\n\r\n\t\t$mobileSlider.flickity( options.$mobileOption );\r\n\t\t$desktopSliderModal.flickity( options.$desktopOption );\r\n\t\t// $desktopSliderThumbnailModal.flickity(options.$desktopSliderThumbnailModal);\r\n\r\n\t\t$mobileSlider.on( 'select.flickity', () => {\r\n\t\t\t// Pause all videos\r\n\t\t\tif ( typeof window.Video === 'object' ) {\r\n\t\t\t\twindow.Video.refs.forEach( ( item ) => {\r\n\t\t\t\t\titem.call( 'pause' );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !$mobileSlider.is( ':visible' ) ) return;\r\n\r\n\t\t\t// Play video on active slide\r\n\t\t\tif ( typeof window.Video === 'object' ) {\r\n\t\t\t\twindow.Video.refs\r\n\t\t\t\t\t.filter( ( item ) => {\r\n\t\t\t\t\t\treturn $mobileSlider[0].contains( item.element )\r\n\t\t\t\t\t\t\t&& item.element.parentNode.classList.contains( 'is-selected' );\r\n\t\t\t\t\t} )\r\n\t\t\t\t\t.forEach( ( item ) => {\r\n\t\t\t\t\t\titem.call( 'play' );\r\n\t\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\t$desktopSliderThumbnailModal.on( 'click', '.item', function () {\r\n\t\t\tlet _this = this;\r\n\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t\t$( _this ).addClass( 'is-active' );\r\n\t\t\tlet index = $( _this ).index();\r\n\t\t\t$desktopSliderModal.flickity( 'select', index );\r\n\t\t} );\r\n\r\n\t},\r\n\tsliderModal ( index ) {\r\n\t\t$flickityModal.modal( 'show' );\r\n\t\t$( 'body' ).addClass( 'product-modal-open' );\r\n\r\n\t\t$( document ).find( '.flickity-modal' ).off( 'shown.bs.modal' ).on( 'shown.bs.modal', function () {\r\n\t\t\tsetTimeout( () => {\r\n\t\t\t\t$( this ).find( '.modal-dialog' ).removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.flickity( 'resize' );\r\n\t\t\t\t$desktopSliderThumbnailModal.removeClass( 'invisible' );\r\n\t\t\t\t$desktopSliderModal.flickity( 'select', index );\r\n\t\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t\t\t$desktopSliderThumbnailModal.find( '.item:eq(' + index + ')' ).addClass( 'is-active' );\r\n\t\t\t}, 500 );\r\n\t\t} );\r\n\r\n\t\t$( document ).find( '.flickity-modal' ).on( 'hidden.bs.modal', function () {\r\n\t\t\t$( 'body' ).removeClass( 'product-modal-open' );\r\n\t\t\t$desktopSliderThumbnailModal.find( '.item' ).removeClass( 'is-active' );\r\n\t\t} );\r\n\t},\r\n}\r\n\r\n$( '.js-slider-modal' ).click( function () {\r\n\tlet $this = $( this );\r\n\tProductSelectedSlider.sliderModal( $this.data( 'index' ) );\r\n} );\r\n\r\n\r\n$( window ).resize( function () {\r\n\tif ( matchMedia( 'screen and (max-width: 1023px)' ).matches ) {\r\n\t\t$flickityModal.modal( 'hide' );\r\n\t}\r\n} );\r\n\r\nProductSelectedSlider.init();\r\n\r\nwindow.ProductSelectedSlider = ProductSelectedSlider;\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-selected.js","let ProductSlider = {};\r\n\r\nProductSlider = {\r\n  init() {\r\n    let $productSlider = $('.js-product-slider');\r\n\r\n    if ($productSlider.length === 0) {\r\n      return;\r\n    }\r\n\r\n    $.each($productSlider, function(){\r\n      let $slider = $(this);\r\n\r\n      let options = {\r\n        pageDots: false,\r\n        groupCells: false,\r\n        cellAlign: 'left',\r\n        percentPosition: false,\r\n        wrapAround: false,\r\n        contain: true,\r\n        dragThreshold: 10,\r\n        prevNextButtons: true,\r\n        on: {\r\n          ready: function() {\r\n            $slider.removeClass('invisible');\r\n            $slider.addClass('first-el');\r\n          },\r\n        },\r\n      };\r\n\r\n      if (matchMedia('screen and (min-width: 768px)').matches) {\r\n        options = {\r\n          pageDots: false,\r\n          groupCells: true,\r\n          cellAlign: 'left',\r\n          percentPosition: false,\r\n          wrapAround: true,\r\n          contain: false,\r\n          dragThreshold: 15,\r\n          prevNextButtons: true,\r\n          on: {\r\n            ready: function() {\r\n              $slider.removeClass('invisible');\r\n              $slider.addClass('first-el');\r\n            },\r\n          },\r\n        }\r\n      }\r\n\r\n      let flkty = $slider.flickity(options);\r\n      let flktyData = $slider.data('flickity');\r\n      var count = flktyData.cells.length;\r\n\r\n      if (count < 4) {\r\n        options.groupCells = false\r\n        options.wrapAround = false\r\n        options.prevNextButtons = false\r\n        options.contain = true\r\n\r\n        if (count == 5) {\r\n          $slider.addClass('is-indented');\r\n        }\r\n\r\n        $slider.flickity(options);\r\n        $slider.addClass('no-prevnext');\r\n      }\r\n\r\n      if (matchMedia('screen and (max-width: 767px)').matches) {\r\n        flkty.on('change.flickity', function () {\r\n            if (flktyData.selectedIndex == 0) {\r\n              $slider.addClass('first-el');\r\n            } else {\r\n              $slider.removeClass('first-el');\r\n            }\r\n        });\r\n      } else if (matchMedia('screen and (min-width: 768px)').matches) {\r\n        flkty.on('change.flickity', function () {\r\n          if (flktyData.selectedIndex == 0) {\r\n            $slider.addClass('is-indented');\r\n          } else {\r\n            $slider.removeClass('is-indented');\r\n          }\r\n      });\r\n      }\r\n    });\r\n  },\r\n}\r\n\r\n$(function () {\r\n  ProductSlider.init();\r\n\r\n  window.addEventListener('resize', window.stokpress.debounce(function () {\r\n    ProductSlider.init();\r\n  }, 500));\r\n\r\n});\r\n\r\nwindow.ProductSlider = ProductSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-slider.js","var FeatureSlider = {}, $featureSlider;\r\n\r\nFeatureSlider = {\r\n  init() {\r\n    $featureSlider = $('.js-feature-slider');\r\n\r\n    if ($featureSlider.length === 0) {\r\n      return;\r\n    }\r\n\r\n    $.each( $featureSlider, function() {\r\n      let $slider = $(this),\r\n        $autoplay = $slider.data('autoplay');\r\n\r\n      $slider.flickity({\r\n        autoPlay: $autoplay,\r\n        cellAlign: 'left',\r\n        contain: true,\r\n        prevNextButtons: false,\r\n        pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\twrapAround: true,\r\n\t\t\t});\r\n    });\r\n  },\r\n}\r\n\r\n$(function () {\r\n  FeatureSlider.init();\r\n\r\n  $(window).resize(function () {\r\n    FeatureSlider.init();\r\n  });\r\n});\r\n\r\nwindow.FeatureSlider = FeatureSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/feature-slider.js","let ArticleSlider = {};\r\n\r\nArticleSlider.slider = function () {\r\n  let $articleSlider = $('#article-slider');\r\n\r\n  $articleSlider.on('ready.flickity', function () {\r\n    $articleSlider.css('visibility', 'visible');\r\n  });\r\n\r\n  var options = {\r\n    contain: true,\r\n    cellAlign: 'left',\r\n    groupCells: false,\r\n    prevNextButtons: true,\r\n    pageDots: true,\r\n    dragThreshold: 10,\r\n  };\r\n\r\n  $articleSlider.flickity(options);\r\n\r\n  let $prevButton = $('.js-flickity-prev');\r\n  let $nextButton = $('.js-flickity-next');\r\n\r\n  $prevButton.click(function () {\r\n    $articleSlider.flickity('previous');\r\n  });\r\n\r\n  $nextButton.click(function () {\r\n    $articleSlider.flickity('next');\r\n  });\r\n};\r\n\r\nArticleSlider.slider();\r\n\r\n$(window).resize(function () {\r\n  ArticleSlider.slider();\r\n});\r\n\r\nwindow.addEventListener('resize', window.stokpress.debounce(function () {\r\n  ArticleSlider.slider();\r\n}, 500));\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/article-slider.js","let ArticleListing = {};\r\n\r\nArticleListing = {\r\n  init() {\r\n    let articleListingSlider = $('.js-article-listing-slider');\r\n\r\n    if(articleListingSlider.length === 0) {\r\n      return;\r\n    }\r\n\r\n    $.each(articleListingSlider, function() {\r\n      let $slider = $(this);\r\n\r\n      let options = {\r\n        contain: true,\r\n        wrapAround: false,\r\n        cellAlign: 'left',\r\n        groupCells: false,\r\n        prevNextButtons: true,\r\n        pageDots: false,\r\n        dragThreshold: 10,\r\n        on: {\r\n          ready: function() {\r\n            $slider.addClass('first-el flickity-ready').removeClass('hidden');\r\n          },\r\n        },\r\n      };\r\n\r\n      if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n        options = {\r\n          contain: true,\r\n          wrapAround: false,\r\n          cellAlign: 'left',\r\n          groupCells: false,\r\n          prevNextButtons: true,\r\n          pageDots: false,\r\n          dragThreshold: 10,\r\n          on: {\r\n            ready: function() {\r\n              $slider.addClass('first-el flickity-ready').removeClass('hidden');\r\n            },\r\n          },\r\n        };\r\n      }\r\n\r\n      let flkty = $slider.flickity(options);\r\n      let flktyData = $slider.data('flickity');\r\n\t\t\t\r\n      flkty.on('change.flickity', function () {\r\n\r\n        if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n          if (flktyData.selectedIndex == 0) {\r\n            $slider.addClass('first-el');\r\n          } else {\r\n            $slider.removeClass('first-el');\r\n          }\r\n        }\r\n      });\r\n    });\r\n  },\r\n}\r\n\r\nArticleListing.init();\r\n\r\n$(window).resize(function () {\r\n  ArticleListing.init();\r\n});\r\n\r\nwindow.ArticleListing = ArticleListing;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/article-listing.js","let TrustbarSlider = {}, isInitialized = false, $trustbarSlider, $slider, $autoplay;\r\n\r\nTrustbarSlider = {\r\n  init() {\r\n    $trustbarSlider = $('.js-trustbar-slider');\r\n\r\n    if ($trustbarSlider.length === 0) {\r\n      return;\r\n    }\r\n\r\n    $.each( $trustbarSlider, function() {\r\n      $slider = $(this);\r\n      $autoplay = $slider.data('autoplay');\r\n\r\n      $slider.flickity({\r\n        autoPlay: $autoplay,\r\n        pauseAutoPlayOnHover: false,\r\n        cellAlign: 'left',\r\n        contain: true,\r\n        prevNextButtons: false,\r\n        wrapAround: true,\r\n        pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\timagesLoaded: true,\r\n        on: {\r\n          ready: function () {\r\n            if (matchMedia('screen and (max-width: 1023px)').matches) {\r\n              isInitialized = true;\r\n            }\r\n          },\r\n        },\r\n      });\r\n\r\n      if (matchMedia('screen and (min-width: 1024px)').matches) {\r\n        isInitialized = false;\r\n      }\r\n\r\n      if (isInitialized == false) {\r\n        $slider.flickity('destroy');\r\n      }\r\n    });\r\n  },\r\n}\r\n\r\n$(function () {\r\n  TrustbarSlider.init();\r\n\r\n  $(window).resize(function () {\r\n    TrustbarSlider.init();\r\n\t});\r\n\r\n});\r\n\r\nwindow.TrustbarSlider = TrustbarSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/trustbar-slider.js","let CartSlider = {};\r\n\r\nCartSlider = {\r\n    init(event) {\r\n        let $cartSlider = $('.js-cart-related-slider');\r\n\r\n        if ($cartSlider.length === 0) {\r\n            return;\r\n        }\r\n\r\n        $.each($cartSlider, function () {\r\n\t\t\tlet $slider = $(this);\r\n\t\t\tlet sliderItemLength = $slider.find('.product-thumb-item').length;\r\n\r\n            let options = {\r\n                pageDots: false,\r\n                groupCells: false,\r\n                cellAlign: 'center',\r\n                percentPosition: false,\r\n                wrapAround: false,\r\n                contain: true,\r\n\t\t\t\tdragThreshold: 10,\r\n\t\t\t\tdraggable: sliderItemLength > 3 ? true : false,\r\n                prevNextButtons: sliderItemLength > 3 ? true : false,\r\n                on: {\r\n                    ready: function () {\r\n\t\t\t\t\t\t$slider.removeClass('invisible');\r\n                    },\r\n                },\r\n            };\r\n\r\n\t\t\t$slider.flickity(options);\r\n\r\n\t\t\tif (event == 'destroy') {\t\t\t\r\n\t\t\t\t$slider.flickity('destroy');\r\n\t\t\t\t$slider.addClass('invisible');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (event == 'reInit') {\r\n\t\t\t\t$slider.flickity(options);\r\n\t\t\t}\t\t\t\r\n        });\r\n    },\r\n}\r\n\r\n$(function () {\r\n    CartSlider.init();\r\n});\r\n\r\nwindow.CartSlider = CartSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/cart-slider.js","let CategoryPromoSlider = {},\r\n    // isInitialized = false,\r\n    $categoryPromoSlider, $slider;\r\n\r\nCategoryPromoSlider = {\r\n    init() {\r\n        $categoryPromoSlider = $('.js-category-promo-slider');\r\n\r\n        if ($categoryPromoSlider.length === 0) {\r\n            return;\r\n        }\r\n\r\n        $.each($categoryPromoSlider, function () {\r\n\t\t\t$slider = $(this);\r\n\t\t\tlet sliderItemLength = $slider.find('.categoryPromo-item').length;\r\n\r\n            $slider.flickity({\r\n\t\t\t\tcellAlign: 'center',\r\n                contain: true,\r\n                prevNextButtons: false,\r\n                pageDots: true,\r\n\t\t\t\tdragThreshold: 10,\r\n                on: {\r\n                    ready: function () {\r\n                        if (sliderItemLength > 3) {\r\n\t\t\t\t\t\t\t$slider.addClass('is-multiple');\r\n\t\t\t\t\t\t}\r\n                    },\r\n                },\r\n            });\r\n        });\r\n    },\r\n}\r\n\r\n$(function () {\r\n    CategoryPromoSlider.init();\r\n\r\n    $(window).resize(function () {\r\n        CategoryPromoSlider.init();\r\n    });\r\n\r\n});\r\n\r\nwindow.CategoryPromoSlider = CategoryPromoSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/category-promo-slider.js","let SubNavigation = {};\r\n\r\nSubNavigation = {\r\n    init() {\r\n        let $subNavigationSlider = $('.js-sub-navigation-slider');\r\n\r\n        if ($subNavigationSlider.length === 0) {\r\n            return;\r\n        }\r\n\r\n        $.each($subNavigationSlider, function () {\r\n            let $slider = $(this);\r\n\t\t\tlet slideCount = $slider.children().length;\r\n            $slider.flickity({\r\n                pageDots: false,\r\n                groupCells: false,\r\n                cellAlign: slideCount <= 4 ? 'center' : 'left',\r\n                percentPosition: false,\r\n                wrapAround: false,\r\n                contain: true,\r\n                dragThreshold: 10,\r\n\t\t\t\tprevNextButtons: false,\r\n                on: {\r\n                    ready: function ready() {\r\n                        $slider.closest('.sub-navigation').removeClass('is-hidden').addClass('is-loaded');\r\n                    },\r\n                },\r\n            });\r\n        });\r\n    },\r\n}\r\n\r\n$(function () {\r\n    SubNavigation.init();\r\n\r\n    window.addEventListener('resize', window.stokpress.debounce(function () {\r\n        SubNavigation.init();\r\n    }, 500));\r\n\r\n});\r\n\r\nwindow.SubNavigation = SubNavigation;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/sub-navigation.js","var ProductBundlePageSlider = {},\r\n    $productBundlePageSlider;\r\n\r\nProductBundlePageSlider = {\r\n    init() {\r\n        $productBundlePageSlider = $('.js-product-bundle-page-slider');\r\n\r\n        if ($productBundlePageSlider.length === 0) {\r\n            return;\r\n        }\r\n\r\n        $.each($productBundlePageSlider, function () {\r\n            let $slider = $(this);\r\n\r\n\t\t\t$slider.flickity(\r\n\t\t\t\t{\r\n\t\t\t\t\tcellAlign: 'left',\r\n\t\t\t\t\tcontain: true,\r\n\t\t\t\t\tprevNextButtons: true,\r\n\t\t\t\t\tpageDots: false,\r\n\t\t\t\t\twrapAround: true,\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t$slider.addClass('first-el');\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t}\r\n\t\t\t);\r\n\r\n        });\r\n    },\r\n}\r\n\r\n$(function () {\r\n\tProductBundlePageSlider.init();\r\n});\r\n\r\nwindow.ProductBundlePageSlider = ProductBundlePageSlider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/components/sliders/product-bundle-page-slider.js","function _extends(){return(_extends=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function _typeof(t){return(_typeof=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}!function(t,e){\"object\"===(\"undefined\"==typeof exports?\"undefined\":_typeof(exports))&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.LazyLoad=e()}(this,function(){\"use strict\";var t=\"undefined\"!=typeof window,e=t&&!(\"onscroll\"in window)||\"undefined\"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),n=t&&\"IntersectionObserver\"in window,o=t&&\"classList\"in document.createElement(\"p\"),r={elements_selector:\"img\",container:e||t?document:null,threshold:300,thresholds:null,data_src:\"src\",data_srcset:\"srcset\",data_sizes:\"sizes\",data_bg:\"bg\",class_loading:\"loading\",class_loaded:\"loaded\",class_error:\"error\",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null,use_native:!1},a=function(t,e){var n,o=new t(e);try{n=new CustomEvent(\"LazyLoad::Initialized\",{detail:{instance:o}})}catch(t){(n=document.createEvent(\"CustomEvent\")).initCustomEvent(\"LazyLoad::Initialized\",!1,!1,{instance:o})}window.dispatchEvent(n)};var i=function(t,e){return t.getAttribute(\"data-\"+e)},s=function(t,e,n){var o=\"data-\"+e;null!==n?t.setAttribute(o,n):t.removeAttribute(o)},c=function(t){return\"true\"===i(t,\"was-processed\")},l=function(t,e){return s(t,\"ll-timeout\",e)},u=function(t){return i(t,\"ll-timeout\")},d=function(t,e){t&&t(e)},f=function(t,e){t._loadingCount+=e,0===t._elements.length&&0===t._loadingCount&&d(t._settings.callback_finish)},_=function(t){for(var e,n=[],o=0;e=t.children[o];o+=1)\"SOURCE\"===e.tagName&&n.push(e);return n},v=function(t,e,n){n&&t.setAttribute(e,n)},g=function(t,e){v(t,\"sizes\",i(t,e.data_sizes)),v(t,\"srcset\",i(t,e.data_srcset)),v(t,\"src\",i(t,e.data_src))},m={IMG:function(t,e){var n=t.parentNode;n&&\"PICTURE\"===n.tagName&&_(n).forEach(function(t){g(t,e)});g(t,e)},IFRAME:function(t,e){v(t,\"src\",i(t,e.data_src))},VIDEO:function(t,e){_(t).forEach(function(t){v(t,\"src\",i(t,e.data_src))}),v(t,\"src\",i(t,e.data_src)),t.load()}},b=function(t,e){var n,o,r=e._settings,a=t.tagName,s=m[a];if(s)return s(t,r),f(e,1),void(e._elements=(n=e._elements,o=t,n.filter(function(t){return t!==o})));!function(t,e){var n=i(t,e.data_src),o=i(t,e.data_bg);n&&(t.style.backgroundImage='url(\"'.concat(n,'\")')),o&&(t.style.backgroundImage=o)}(t,r)},h=function(t,e){o?t.classList.add(e):t.className+=(t.className?\" \":\"\")+e},p=function(t,e,n){t.addEventListener(e,n)},y=function(t,e,n){t.removeEventListener(e,n)},E=function(t,e,n){y(t,\"load\",e),y(t,\"loadeddata\",e),y(t,\"error\",n)},w=function(t,e,n){var r=n._settings,a=e?r.class_loaded:r.class_error,i=e?r.callback_loaded:r.callback_error,s=t.target;!function(t,e){o?t.classList.remove(e):t.className=t.className.replace(new RegExp(\"(^|\\\\s+)\"+e+\"(\\\\s+|$)\"),\" \").replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")}(s,r.class_loading),h(s,a),d(i,s),f(n,-1)},I=function(t,e){var n=function n(r){w(r,!0,e),E(t,n,o)},o=function o(r){w(r,!1,e),E(t,n,o)};!function(t,e,n){p(t,\"load\",e),p(t,\"loadeddata\",e),p(t,\"error\",n)}(t,n,o)},k=[\"IMG\",\"IFRAME\",\"VIDEO\"],A=function(t,e){var n=e._observer;z(t,e),n&&e._settings.auto_unobserve&&n.unobserve(t)},L=function(t){var e=u(t);e&&(clearTimeout(e),l(t,null))},x=function(t,e){var n=e._settings.load_delay,o=u(t);o||(o=setTimeout(function(){A(t,e),L(t)},n),l(t,o))},z=function(t,e,n){var o=e._settings;!n&&c(t)||(k.indexOf(t.tagName)>-1&&(I(t,e),h(t,o.class_loading)),b(t,e),function(t){s(t,\"was-processed\",\"true\")}(t),d(o.callback_reveal,t),d(o.callback_set,t))},O=function(t){return!!n&&(t._observer=new IntersectionObserver(function(e){e.forEach(function(e){return function(t){return t.isIntersecting||t.intersectionRatio>0}(e)?function(t,e){var n=e._settings;d(n.callback_enter,t),n.load_delay?x(t,e):A(t,e)}(e.target,t):function(t,e){var n=e._settings;d(n.callback_exit,t),n.load_delay&&L(t)}(e.target,t)})},{root:(e=t._settings).container===document?null:e.container,rootMargin:e.thresholds||e.threshold+\"px\"}),!0);var e},N=[\"IMG\",\"IFRAME\"],C=function(t,e){return function(t){return t.filter(function(t){return!c(t)})}((n=t||function(t){return t.container.querySelectorAll(t.elements_selector)}(e),Array.prototype.slice.call(n)));var n},M=function(t,e){this._settings=function(t){return _extends({},r,t)}(t),this._loadingCount=0,O(this),this.update(e)};return M.prototype={update:function(t){var n,o=this,r=this._settings;(this._elements=C(t,r),!e&&this._observer)?(function(t){return t.use_native&&\"loading\"in HTMLImageElement.prototype}(r)&&((n=this)._elements.forEach(function(t){-1!==N.indexOf(t.tagName)&&(t.setAttribute(\"loading\",\"lazy\"),z(t,n))}),this._elements=C(t,r)),this._elements.forEach(function(t){o._observer.observe(t)})):this.loadAll()},destroy:function(){var t=this;this._observer&&(this._elements.forEach(function(e){t._observer.unobserve(e)}),this._observer=null),this._elements=null,this._settings=null},load:function(t,e){z(t,this,e)},loadAll:function(){var t=this;this._elements.forEach(function(e){A(e,t)})}},t&&function(t,e){if(e)if(e.length)for(var n,o=0;n=e[o];o+=1)a(t,n);else a(t,e)}(M,window.lazyLoadOptions),M});\n//# sourceMappingURL=lazyload.min.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/xampp/htdocs/dev.www.dailysports.com/wp-content/themes/dailysports/node_modules/vanilla-lazyload/dist/lazyload.min.js\n// module id = 81\n// module chunks = 0","$.fn.plusItem = function () {\r\n  let $btn, $items;\r\n\r\n  $btn = $(this).find('.js-plus-item-btn'),\r\n  $items = $(this).find('.item');\r\n\r\n  if ($(window).innerWidth() > 991) {\r\n    if ($items.length > 8) {\r\n      $(this).find('.item:lt(8)').removeClass('d-none');\r\n      $btn.removeClass('d-none');\r\n    } else {\r\n      $btn.addClass('d-none');\r\n      $items.removeClass('d-none');\r\n    }\r\n  } else {\r\n    if ($items.length > 6) {\r\n      $(this).find('.item:lt(6)').removeClass('d-none');\r\n      $btn.removeClass('d-none');\r\n    } else {\r\n      $btn.addClass('d-none');\r\n      $items.removeClass('d-none');\r\n    }\r\n  }\r\n\r\n  $btn.find('label').text('+' + $(this).find('.item.d-none').length);\r\n\r\n  $btn.click(function () {\r\n    $items.each(function () {\r\n      setTimeout(() => {\r\n        $(this).removeClass('d-none').fadeIn('slow');\r\n      }, $(this).index() * 50);\r\n    });\r\n    $(this).addClass('d-none');\r\n  });\r\n\r\n  return this;\r\n};\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/plusItem.js","var Platform = {};\r\n\r\n(function () {\r\n\r\n  Platform.detectDevice = function () {\r\n    var body = document.body;\r\n    var ua = navigator.userAgent;\r\n    var checker = {\r\n      // OS\r\n      Windows: ua.match(/Windows/),\r\n      MacOS: ua.match(/Mac/),\r\n      Android: ua.match(/Android/),\r\n\r\n      // Browser\r\n      Msie: ua.match(/Trident/),\r\n      Edge: ua.match(/Edge/),\r\n      Chrome: ua.match(/Chrome/),\r\n      Firefox: ua.match(/Firefox/),\r\n      Safari: ua.match(/Safari/),\r\n\r\n      // Device\r\n      isApple: ua.match(/(iPhone|iPod|iPad)/),\r\n      iPhone: ua.match(/iPhone/),\r\n      iPad: ua.match(/iPad/),\r\n      iPod: ua.match(/iPod/),\r\n    };\r\n\r\n    if (checker.isApple) {\r\n      // Apple\r\n      body.classList.add('isApple');\r\n\r\n      if (checker.iPhone) {\r\n        // Apple iPhone\r\n        body.classList.add('iphone');\r\n      } else if (checker.iPad) {\r\n        // Apple iPad\r\n        body.classList.add('ipad');\r\n      } else if (checker.iPod) {\r\n        // Apple iPod\r\n        body.classList.add('ipod');\r\n      }\r\n\r\n    } else  if (checker.Windows){\r\n      // Windows OS\r\n      body.classList.add('windowsOS');\r\n\r\n      if (checker.Edge){\r\n        // Edge Browser\r\n        body.classList.add('edge');\r\n      } else if (checker.Chrome){\r\n        // Chrome Browser\r\n        body.classList.add('chrome');\r\n      } else if(checker.Safari){\r\n        // Safari Browser\r\n        body.classList.add('safari');\r\n      } else if(checker.Firefox){\r\n        // Firefox Browser\r\n        body.classList.add('firefox');\r\n      } else if(checker.Msie){\r\n        // IE Browser\r\n        body.classList.add('msie');\r\n      }\r\n\r\n    } else if (checker.MacOS){\r\n      // Mac OS\r\n      body.classList.add('macOS');\r\n\r\n      if (checker.Chrome){\r\n        // Chrome Browser\r\n        body.classList.add('chrome');\r\n      } else if(checker.Safari){\r\n        // Safari Browser\r\n        body.classList.add('safari');\r\n      } else if(checker.Firefox){\r\n        // Firefox Browser\r\n        body.classList.add('firefox');\r\n      }\r\n\r\n    } else if (checker.Android){\r\n      // Android OS\r\n      body.classList.add('AndroidOS');\r\n    }\r\n\r\n  }\r\n\r\n  Platform.detectDevice();\r\n\r\n})($);\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/crossPlatform.js","$.fn.autoPadding = function ($settings) {\r\n  var $config = {\r\n      source: null,\r\n    },\r\n    $target = $(this);\r\n\r\n  if ($settings) jQuery.extend($config, $settings);\r\n\r\n  $(this).css({\r\n    paddingTop: $config.source.innerHeight() + 'px',\r\n  });\r\n\r\n  var windowWidth = $(window).width();\r\n\r\n  $(window).resize(function () {\r\n\t\tif ($(window).width() != windowWidth) {\r\n\t\t\twindowWidth = $(window).width();\r\n\t\t\t\r\n\t\t\t$target.css({\r\n\t\t\t\tpaddingTop: $config.source.innerHeight() + 'px',\r\n\t\t\t});\r\n\t\t} \r\n\t});\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/autoPadding.js","// Promo Box\r\n$('.promo-box-name').txtTruncate({\r\n\tend: '...',\r\n\tlines: 1,\r\n});\r\n\r\n$('.promo-box-description').txtTruncate({\r\n\tend: '...',\r\n\tlines: 2,\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/ellipsis.js","jQuery.fn.backgroundSwitcher = function ( settings ) {\r\n    var config = {\r\n            breakpoint: 991.98,\r\n            bgDesktop: $( this ).data( 'bg-desktop' ),\r\n            bgMobile: $( this ).data( 'bg-mobile' ),\r\n        },\r\n        self = $( this );\r\n\r\n    if ( settings ) jQuery.extend( config, settings );\r\n\r\n    changeBackground();\r\n\r\n    function changeBackground () {\r\n        var imageURL = config.bgDesktop;\r\n\r\n        if ( $( window ).innerWidth() <= config.breakpoint ) {\r\n            imageURL = config.bgMobile;\r\n          }\r\n\r\n          self.css( 'background-image', `url(${imageURL})` );\r\n\r\n        // if ( self.prop( 'tagName' ) === 'IMG' ) {\r\n        //     if ( self.hasClass( 'lazy' ) && !self.hasClass( 'loaded' ) ) {\r\n        //         self.attr( 'data-src', imageURL );\r\n        //     } else {\r\n        //         self.attr( 'src', imageURL );\r\n        //     }\r\n        // } else if ( [ 'DIV', 'SECTION' ].indexOf( self.prop( 'tagName' ) ) !== -1 ) {\r\n        //     if ( self.hasClass( 'lazy' ) && !self.data( 'wasProcessed' ) ) {\r\n        //         self.attr( 'data-bg', `url(${imageURL})` );\r\n        //     } else {\r\n        //         self.css( 'background-image', `url(${imageURL})` );\r\n        //     }\r\n        // }\r\n    }\r\n\r\n    return this;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/backgroundSwitcher.js","let articleGridFilter = {};\r\n\r\narticleGridFilter.dropdown = function() {\r\n    var $articleDropdown = $('.article-dropdown .article-dropdown-title');\r\n    var $articleContent = $('.article-dropdown .article-dropdown-menu');\r\n\r\n    $articleDropdown.click(function() {\r\n        var thisDropdown = $(this);\r\n\r\n        if (thisDropdown.next('.article-dropdown-menu').hasClass('show')) {\r\n            thisDropdown.next('.article-dropdown-menu').removeClass('show');\r\n        } else {\r\n            $articleContent.removeClass('show');\r\n            thisDropdown.next('.article-dropdown-menu').addClass('show');\r\n        }\r\n    });\r\n\r\n    window.onclick = function(event) {\r\n      if (!event.target.matches('.article-dropdown-title')) {\r\n        var dropdowns = document.getElementsByClassName('article-dropdown-menu');\r\n        var i;\r\n        for (i = 0; i < dropdowns.length; i++) {\r\n          var openDropdown = dropdowns[i];\r\n          if (openDropdown.classList.contains('show')) {\r\n            openDropdown.classList.remove('show');\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  articleGridFilter.dropdown();\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/articleFilter.js","let checkTouch = function() {\r\n  let $html = $('html');\r\n\r\n  if ('ontouchstart' in document.documentElement) {\r\n    $html.removeClass('no-touchevents');\r\n    $html.addClass('touchevents');\r\n  }\r\n\r\n  if ($html.hasClass('no-touchevents')) {\r\n    $(window).on('touchstart.touchTest', function () {\r\n      $html.removeClass('no-touchevents');\r\n      $html.addClass('touchevents');\r\n      $(window).off('touchstart.touchTest');\r\n    });\r\n  }\r\n};\r\n\r\ncheckTouch();\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/checkTouch.js","$.fn.displayProp = function () {\r\n\tvar self, target, items;\r\n\r\n\tself = $( this );\r\n\ttarget = self.data( 'prop-target' );\r\n\titems = self.find( '.item' );\r\n\r\n\t$.each( items, function ( i, el ) {\r\n\t\t$( el ).on( 'mouseenter', function () {\r\n\t\t\t$( target ).text( $( this ).data( 'prop' ) );\r\n\t\t} ).on( 'mouseleave', function () {\r\n\t\t\t$( target ).text( self.find( 'input[type=radio]:checked' ).parents( 'li' ).data( 'prop' ) );\r\n\t\t} );\r\n\t} );\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/displayProp.js","let disableBodyScroll = (function () {\r\n\tlet _selector = false,\r\n\t\t_element = false,\r\n\t\t_clientY;\r\n\r\n\tif (!Element.prototype.matches)\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector ||\r\n\t\tElement.prototype.webkitMatchesSelector;\r\n\r\n\tif (!Element.prototype.closest)\r\n\t\tElement.prototype.closest = function (s) {\r\n\t\t\tlet el = this;\r\n\t\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\t\tdo {\r\n\t\t\t\tif (el.matches(s)) return el;\r\n\t\t\t\tel = el.parentElement || el.parentNode;\r\n\t\t\t} while (el !== null && el.nodeType === 1);\r\n\t\t\treturn null;\r\n\t\t};\r\n\r\n\tlet preventBodyScroll = function (event) {\r\n\t\tif (false === _element || !event.target.closest(_selector)) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\r\n\tlet captureClientY = function (event) {\r\n\t\tif (event.targetTouches.length === 1) {\r\n\t\t\t_clientY = event.targetTouches[0].clientY;\r\n\t\t}\r\n\t};\r\n\r\n\tlet preventOverscroll = function (event) {\r\n\t\tif (event.targetTouches.length !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet clientY = event.targetTouches[0].clientY - _clientY;\r\n\r\n\t\tif (_element.scrollTop === 0 && clientY > 0) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ((_element.scrollHeight - _element.scrollTop <= _element.clientHeight) && clientY < 0) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\r\n\treturn function (allow, selector) {\r\n\t\tif (typeof selector !== 'undefined') {\r\n\t\t\t_selector = selector;\r\n\t\t\t_element = document.querySelector(selector);\r\n\t\t}\r\n\r\n\t\tif (true === allow) {\r\n\t\t\tif (false !== _element) {\r\n\t\t\t\t_element.addEventListener('touchstart', captureClientY, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t\t_element.addEventListener('touchmove', preventOverscroll, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tdocument.body.addEventListener('touchmove', preventBodyScroll, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (false !== _element) {\r\n\t\t\t\t_element.removeEventListener('touchstart', captureClientY, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t\t_element.removeEventListener('touchmove', preventOverscroll, {\r\n\t\t\t\t\tpassive: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tdocument.body.removeEventListener('touchmove', preventBodyScroll, {\r\n\t\t\t\tpassive: false,\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}());\r\n\r\nwindow.disableBodyScroll = disableBodyScroll;\r\n\n\n\n// WEBPACK FOOTER //\n// ./scripts/util/disableBodyScroll.js","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./styles/main.scss\n// module id = 91\n// module chunks = 0"],"sourceRoot":""}